跳转到内容

Python Agent 到 Gateway

connection 生成器可以将您的 Python Agent 连接到 AgentCore Gateway

该生成器会配置 agent,使其在部署时通过 IAM SigV4(通过 httpx 请求签名)向 Gateway 进行身份验证,并在本地运行时连接到 Gateway 项目启动的本地 gateway。

在使用此生成器之前,请确保您具备:

  1. 一个包含 Agent 组件的 Python 项目(infra: agentcore
  2. 一个使用 auth: iamagentcore-gateway 项目

Gateway 必须使用 IAM 身份验证 — agent 使用其自己的执行角色通过 SigV4 签名其请求。生成器会拒绝使用 Cognito 身份验证的 gateway。

Terminal window
pnpm nx g @aws/nx-plugin:connection
您还可以执行试运行以查看哪些文件会被更改
Terminal window
pnpm nx g @aws/nx-plugin:connection --dry-run

选择 agent 项目作为源,Gateway 项目作为目标。

参数类型默认值描述
sourceProject 必需string-源项目
targetProject 必需string-要连接到的目标项目
sourceComponent string-要从其连接的源组件(组件名称、相对于源项目根目录的路径或生成器 ID)。使用 '.' 显式选择项目作为源。
targetComponent string-要连接到的目标组件(组件名称、相对于目标项目根目录的路径或生成器 ID)。使用 '.' 显式选择项目作为目标。
preferInstallDependencies booleantrue是否在生成器运行后优先安装依赖项。设置为 false 可在批量运行多个生成器时延迟安装(如果后续生成器需要计算 Nx 项目图,仍会运行安装);在最后统一安装一次。

生成器会将共享的 core-gateway 模块发送到您的 agent_connection Python 项目中,以及一个针对每个 Gateway 的包装器,并修改您的 agent:

  • 文件夹packages/common/agent_connection
    • 文件夹<scope>_agent_connection
      • 文件夹core/
        • agentcore_endpoints.py Framework-agnostic ARN/URL resolution
        • agentcore_gateway_mcp_transport.py Framework-agnostic Gateway MCP transport
        • agentcore_gateway_mcp_client_<framework>.py Gateway MCP client for your agent’s framework
        • 文件夹auth/ Framework-agnostic SigV4 / session-forwarding httpx.Auth
      • 文件夹app/
        • <gateway_snake>_client_<framework>.py Per-Gateway client wrapper
      • __init__.py Re-exports the Gateway client

客户端后缀与您的 agent 框架匹配(_strands_langchain)。

此外,生成器还会:

  • 修改您的 agent 的 agent.py,导入 Gateway 客户端并在 tools 中注册其工具
  • agent_connection 添加为 agent 的工作区依赖项
  • 将 agent 的 <agent>-dev 目标配置为依赖于 Gateway 的 dev 目标

生成器会转换您的 agent 的 agent.py 以使用 Gateway 客户端:

packages/example/example/my_agent/agent.py
from contextlib import contextmanager
from strands import Agent
from my_scope_agent_connection import MyGatewayClientStrands
@contextmanager
def get_agent():
my_gateway = MyGatewayClientStrands.create()
with (
my_gateway,
):
yield Agent(
system_prompt="...",
tools=[*my_gateway.list_tools_sync()],
)

MyGatewayClientStrands.create() 返回一个可作为上下文管理器的 MCPClient,其 list_tools_sync() 会生成通过 Gateway 可用的所有工具。

在这两种情况下,客户端在每种模式下的行为相同:

  • 部署模式(未设置 LOCAL_DEV):工具指向 Gateway 的 MCP 端点,使用 SigV4 签名。
  • 本地模式LOCAL_DEV=true):纯 HTTP 工具指向 Gateway 项目的 dev 目标启动的本地 gateway。

会话 ID 会通过 X-Amzn-Bedrock-AgentCore-Runtime-Session-Id 标头自动传播到下游 MCP 服务器。

运行生成器后,您必须授予 agent 调用 Gateway 的权限。

packages/infra/src/stacks/application-stack.ts
const gateway = new MyGateway(this, 'MyGateway');
const myAgent = new MyAgent(this, 'MyAgent');
// Grant the agent permissions to invoke the Gateway
gateway.grantInvokeAccess(myAgent);

Gateway URL 会由生成的 CDK 构造自动注册到 运行时配置agentcore.gateways.<ClassName> 命名空间中,因此 agent 可以在运行时发现它。

生成器会配置 agent 的 dev 目标以:

  1. 启动已连接的 Gateway 的本地 gateway 以及所有附加的 MCP 服务器
  2. 设置 LOCAL_DEV=true,使生成的客户端指向本地 gateway 而不是已部署的 Gateway

使用以下命令在本地运行 agent:

Terminal window
pnpm nx <agent-name>-dev <project-name>

要在本地运行 agent 针对已部署的 Gateway(例如,为了测试 Cedar 策略),请使用 agent 的 serve 目标。在未设置 LOCAL_DEV 的情况下,客户端会从运行时配置中解析已部署的 Gateway URL,并使用您的本地 AWS 凭证对请求进行 SigV4 签名:

Terminal window
pnpm nx <agent-name>-serve <project-name>

本地 gateway 代替已部署的 Gateway,因此:

  • 没有 Cedar 策略评估。 无论策略如何,agent 都可以看到所有工具。使用 serve 目标针对已部署的 Gateway 测试策略。
  • 保留工具名称前缀。 每个本地 MCP 服务器的工具都以 <target-name>___<tool-name> 的形式公开,与已部署的 Gateway 发出的内容相匹配。这使得 agent 的系统提示和您引用的 Cedar 操作名称在本地和已部署运行中保持一致。