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

Python Agent tới A2A Agent

Trình tạo connection có thể kết nối Python 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 Python Agent (Strands hoặc LangChain)
  2. Một dự án với component Agent được tạo với --protocol=A2A--auth=IAM (có thể là ts#agent hoặc py#agent)
  3. Cả hai component được tạo với infra: agentcore
  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.
    preferInstallDependencies boolean true Có nên cài đặt các dependencies sau khi generator chạy hay không. Đặt thành false để trì hoãn việc cài đặt khi chạy nhiều generator liên tiếp (việc cài đặt vẫn sẽ chạy nếu cần thiết để các generator tiếp theo có thể tính toán Nx project graph); cài đặt một lần vào cuối.

    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_endpoints.py Giải quyết ARN/URL không phụ thuộc framework
          • agentcore_a2a_client_config.py Cấu hình client A2A không phụ thuộc framework (đã ký ClientConfig)
          • agentcore_a2a_client_<framework>.py Client A2A bọc cấu hình cho framework của agent của bạn
          • Thư mụcauth/ SigV4 không phụ thuộc framework / chuyển tiếp session httpx.Auth
        • Thư mụcapp
          • <target_agent_name>_client_<framework>.py Client A2A theo từng kết nối cho mỗi agent A2A

    Hậu tố client khớp với framework của agent của bạn (_strands hoặc _langchain). Cả hai đều bọc cùng một ClientConfig đã ký không phụ thuộc framework: client Strands bọc một Strands A2AAgent, trong khi client LangChain điều khiển a2a SDK trực tiếp để một agent LangChain không kéo theo dependency Strands.

    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ụ. Agent từ xa được đăng ký với một delegate được trang trí bằng @tool — import của decorator và constructor của agent khác nhau theo framework:

    packages/my-project/my_module/agent/agent.py
    from contextlib import contextmanager
    from strands import Agent, tool
    from my_scope_agent_connection import RemoteAgentClientStrands
    @contextmanager
    def get_agent():
    remote_agent = RemoteAgentClientStrands.create()
    @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],
    )

    Cả hai client đều có thể gọi trực tiếp, trả về phản hồi của agent từ xa, và bọc một httpx.AsyncClient ký các yêu cầu bằng SigV4 khi triển khai lên AWS và sử dụng endpoint http://localhost:<port>/ đơn giản khi LOCAL_DEV=true. Client Strands bọc một Strands A2AAgent; client LangChain điều khiển a2a SDK trực tiếp.

    Session ID của AgentCore được truyền tự động đến agent từ xa thông qua header X-Amzn-Bedrock-AgentCore-Runtime-Session-Id, bất kể framework: agent server liên kết session của yêu cầu đến vào một async context, và httpx.Auth đã ký của connection client đóng dấu nó trên mọi cuộc gọi đi — đảm bảo tính nhất quán cho Bedrock AgentCore Observability.

    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>-dev <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.