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

TypeScript Strands Agent đến A2A Agent

Trình tạo connection có thể kết nối TypeScript 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 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ể phát hiện 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 TypeScript 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 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 ra một package agent-connection được chia sẻ và sửa đổi mã agent của bạn:

    • Thư mụcpackages/common/agent-connection
      • Thư mụcsrc
        • Thư mụcapp
          • <target-agent-name>-client.ts Client cấp cao cho agent A2A được kết nối
        • Thư mụccore
          • agentcore-a2a-client.ts Client AgentCore A2A cấp thấp với xác thực SigV4
        • index.ts Xuất tất cả các client
      • project.json
      • tsconfig.json

    Ngoài ra, nó:

    • Chuyển đổi agent.ts của agent của bạn để đăng ký agent A2A từ xa như một tool của Strands
    • Cập nhật target serve-local của agent để phụ thuộc vào target serve-local của agent đích
    • Cài đặt các dependency cần thiết

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

    packages/example/src/my-agent/agent.ts
    import { Agent, tool } from '@strands-agents/sdk';
    import { RemoteAgentClient } from ':my-scope/agent-connection';
    import { z } from 'zod';
    export const getAgent = async (sessionId: string) => {
    const remoteAgent = await RemoteAgentClient.create(sessionId);
    const remoteAgentTool = tool({
    name: 'askRemoteAgent',
    description: 'Delegate a question to the remote RemoteAgent A2A agent and return its reply.',
    inputSchema: z.object({ prompt: z.string() }),
    callback: async ({ prompt }) => (await remoteAgent.invoke(prompt)).toString(),
    });
    return new Agent({
    systemPrompt: '...',
    tools: [remoteAgentTool],
    });
    };

    Tham số sessionId được truyền từ caller, đảm bảo tính nhất quán cho Bedrock AgentCore Observability.

    Bên trong, RemoteAgentClient.create(sessionId) trả về một A2AAgent của Strands được cấu hình với clientFactory ký 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. Khởi động (các) agent A2A được kết nối tự động
    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 được 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.