Bỏ qua để đến nội dung

Python Strands Agent tới A2A Agent

Trình tạo connection có thể kết nối Python Strands Agent của bạn với một agent A2A từ xa — có thể là TypeScript hoặc Python — để agent của bạn có thể ủy quyền cho một agent khác như một công cụ.

Trình tạo thiết lập tất cả các kết nối cần thiết để agent của bạn có thể khám phá và gọi agent A2A từ xa, cả khi triển khai lên AWS (thông qua Bedrock AgentCore) và khi chạy cục bộ.

Trước khi sử dụng trình tạo này, hãy đảm bảo bạn có:

  1. Một dự án Python với component Strands Agent (bất kỳ giao thức nào)
  2. Một dự án với component Strands Agent được tạo với --protocol=A2A--auth=IAM (có thể là ts#strands-agent hoặc py#strands-agent)
  3. Cả hai component được tạo với computeType: BedrockAgentCoreRuntime
  1. Cài đặt Nx Console VSCode Plugin nếu bạn chưa cài đặt
  2. Mở Nx Console trong VSCode
  3. Nhấp Generate (UI) trong phần "Common Nx Commands"
  4. Tìm kiếm @aws/nx-plugin - connection
  5. Điền các tham số bắt buộc
    • Nhấp Generate

    Chọn dự án agent chủ của bạn làm nguồn và dự án agent A2A của bạn làm đích. Nếu các dự án của bạn chứa nhiều component, hãy chỉ định các tùy chọn sourceComponenttargetComponent để phân biệt.

    Tham số Kiểu Mặc định Mô tả
    sourceProject Bắt buộc string - Dự án nguồn
    targetProject Bắt buộc string - Dự án đích để kết nối tới
    sourceComponent string - Component nguồn để kết nối từ đó (tên component, đường dẫn tương đối so với thư mục gốc của dự án nguồn, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm nguồn.
    targetComponent string - Component đích để kết nối tới (tên component, đường dẫn tương đối so với thư mục gốc của dự án đích, hoặc generator id). Sử dụng '.' để chọn rõ ràng dự án làm đích.

    Trình tạo tạo một dự án Python agent_connection được chia sẻ tại packages/common/agent_connection/ (nếu nó chưa tồn tại). Các module client theo từng kết nối được tạo vào dự án chia sẻ này:

    • Thư mụcpackages/common/agent_connection
      • Thư mục<scope>_agent_connection
        • __init__.py Xuất lại các client theo từng kết nối
        • Thư mụccore
          • agentcore_a2a_client.py Client A2A AgentCore cốt lõi với xác thực SigV4
        • Thư mụcapp
          • <target_agent_name>_client.py Client theo từng kết nối cho mỗi agent A2A

    Ngoài ra, trình tạo:

    • Chuyển đổi agent.py của agent của bạn để đăng ký agent A2A từ xa như một công cụ sử dụng @tool
    • Thêm dự án agent_connection như một dependency workspace của dự án agent của bạn
    • Cập nhật target serve-local của agent để phụ thuộc vào target serve-local của agent đích

    Trình tạo chuyển đổi agent.py của agent của bạn để bọc agent A2A từ xa như một công cụ:

    packages/my-project/my_module/agent/agent.py
    from contextlib import contextmanager
    from strands import Agent, tool
    from my_scope_agent_connection import RemoteAgentClient
    @contextmanager
    def get_agent(session_id: str):
    remote_agent = RemoteAgentClient.create(session_id=session_id)
    @tool
    def ask_remote_agent(prompt: str) -> str:
    """Delegate a question to the remote RemoteAgent A2A agent and return its reply."""
    return str(remote_agent(prompt))
    yield Agent(
    system_prompt="...",
    tools=[ask_remote_agent],
    )

    Tham số session_id được truyền qua từ người gọi, đảm bảo tính nhất quán cho Bedrock AgentCore Observability.

    Bên trong, RemoteAgentClient.create(session_id=...) trả về một Strands A2AAgent được cấu hình với một httpx.AsyncClient ký các yêu cầu bằng SigV4 khi triển khai lên AWS, và một endpoint http://localhost:<port>/ đơn giản khi SERVE_LOCAL=true.

    Sau khi chạy trình tạo kết nối, bạn cần cấp quyền cho agent chủ để gọi agent A2A từ xa.

    packages/infra/src/stacks/application-stack.ts
    const remoteAgent = new RemoteAgent(this, 'RemoteAgent');
    const myAgent = new MyAgent(this, 'MyAgent');
    // Grant the host agent permission to invoke the remote A2A agent
    remoteAgent.grantInvokeAccess(myAgent);

    grantInvokeAccess trên agent A2A thiết lập cả bedrock-agentcore:InvokeAgentRuntimebedrock-agentcore:GetAgentCard — client A2A cần cả hai để lấy agent card và gửi tin nhắn.

    ARN runtime AgentCore của agent từ xa được tự động đăng ký trong namespace agentcore của Runtime Configuration bởi CDK construct được tạo, do đó agent chủ có thể khám phá nó tại runtime.

    Trình tạo cấu hình target serve-local của agent chủ để:

    1. Tự động khởi động (các) agent A2A đã kết nối
    2. Đặt SERVE_LOCAL=true để client được tạo kết nối trực tiếp đến http://localhost:<port>/ thay vì AgentCore

    Chạy agent cục bộ với:

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

    Điều này sẽ khởi động cả agent chủ và tất cả các agent A2A đã kết nối, với agent chủ gọi các agent từ xa qua HTTP đơn giản trên các cổng cục bộ được chỉ định của chúng.