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ộ.
Yêu cầu trước
Phần tiêu đề “Yêu cầu trước”Trước khi sử dụng trình tạo này, hãy đảm bảo bạn có:
- Một dự án TypeScript với component Strands Agent (bất kỳ giao thức nào)
- Một dự án với component Strands Agent được tạo với
--protocol=A2Avà--auth=IAM(có thể làts#strands-agenthoặcpy#strands-agent) - Cả hai component được tạo với
computeType: BedrockAgentCoreRuntime
Cách sử dụng
Phần tiêu đề “Cách sử dụng”Chạy Trình tạo
Phần tiêu đề “Chạy Trình tạo”- Cài đặt Nx Console VSCode Plugin nếu bạn chưa cài đặt
- Mở Nx Console trong VSCode
- Nhấp
Generate (UI)trong phần "Common Nx Commands" - Tìm kiếm
@aws/nx-plugin - connection - Điền các tham số bắt buộc
- Nhấp
Generate
pnpm nx g @aws/nx-plugin:connectionyarn nx g @aws/nx-plugin:connectionnpx nx g @aws/nx-plugin:connectionbunx nx g @aws/nx-plugin:connectionBạn cũng có thể thực hiện chạy thử để xem những tệp nào sẽ bị thay đổi
pnpm nx g @aws/nx-plugin:connection --dry-runyarn nx g @aws/nx-plugin:connection --dry-runnpx nx g @aws/nx-plugin:connection --dry-runbunx nx g @aws/nx-plugin:connection --dry-runChọ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 sourceComponent và targetComponent để phân biệt.
Tùy chọn
Phần tiêu đề “Tùy chọn”| 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. |
Kết quả của Trình tạo
Phần tiêu đề “Kết quả của Trình tạo”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.tscủa agent của bạn để đăng ký agent A2A từ xa như mộttoolcủa Strands - Cập nhật target
serve-localcủa agent để phụ thuộc vào targetserve-localcủa agent đích - Cài đặt các dependency cần thiết
Sử dụng Agent A2A đã Kết nối
Phần tiêu đề “Sử dụng Agent A2A đã Kết nối”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ụ:
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.
Cơ sở hạ tầng
Phần tiêu đề “Cơ sở hạ tầng”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.
const remoteAgent = new RemoteAgent(this, 'RemoteAgent');const myAgent = new MyAgent(this, 'MyAgent');
// Grant the host agent permission to invoke the remote A2A agentremoteAgent.grantInvokeAccess(myAgent);grantInvokeAccess trên agent A2A thiết lập cả bedrock-agentcore:InvokeAgentRuntime và bedrock-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.
module "remote_agent" { source = "../../common/terraform/src/app/agents/remote-agent"}
module "my_agent" { source = "../../common/terraform/src/app/agents/my-agent"}
# Grant the host agent permission to invoke the remote A2A agentresource "aws_iam_policy" "agent_invoke_a2a" { name = "AgentInvokeA2aPolicy" policy = jsonencode({ Version = "2012-10-17" Statement = [{ Effect = "Allow" Action = [ "bedrock-agentcore:InvokeAgentRuntime", "bedrock-agentcore:GetAgentCard", ] Resource = module.remote_agent.agent_core_runtime_arn }] })}
resource "aws_iam_role_policy_attachment" "agent_invoke_a2a" { role = module.my_agent.agent_core_runtime_role_arn policy_arn = aws_iam_policy.agent_invoke_a2a.arn}ARN runtime AgentCore của agent từ xa được tự động đăng ký trong namespace agentcore của Runtime Configuration bởi module Terraform được tạo, do đó agent chủ có thể khám phá nó tại runtime.
Phát triển Cục bộ
Phần tiêu đề “Phát triển Cục bộ”Trình tạo cấu hình target serve-local của agent chủ để:
- Khởi động (các) agent A2A được kết nối tự động
- Đặt
SERVE_LOCAL=trueđể client được tạo kết nối trực tiếp đếnhttp://localhost:<port>/thay vì AgentCore
Chạy agent cục bộ với:
pnpm nx <agent-name>-serve-local <project-name>yarn nx <agent-name>-serve-local <project-name>npx nx <agent-name>-serve-local <project-name>bunx 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.