外观
快速开始
安装
bash
bun add @multi-agent/a2abash
pnpm add @multi-agent/a2abash
npm install @multi-agent/a2a基础示例
Server
typescript
import { createAgentServer } from '@multi-agent/a2a'
const server = createAgentServer({
agentId: 'my-agent',
name: 'My Agent',
version: '1.0.0',
address: 'a2a://0.0.0.0:50061',
skills: [{
name: 'hello',
description: '打招呼',
handler: async (params, ctx) => {
ctx.stream.send({ type: 'done', text: '完成', data: { message: `Hello, ${params.name}!` } })
},
}],
})
await server.start()Client
typescript
import { createAgentClient } from '@multi-agent/a2a'
const client = createAgentClient({ agentId: 'my-agent', address: 'a2a://localhost:50061' })
const stream = await client.call('hello', { name: 'World' })
for await (const msg of stream) {
if (msg.type === 'done') console.log(msg.data.message) // Hello, World!
}核心能力
流式输出
typescript
async function handler(params, ctx) {
for (const char of 'Hello') {
ctx.stream.send({ type: 'progress', text: char })
await sleep(100)
}
ctx.stream.send({ type: 'done', text: '完成' })
}双向交互
Server 可以向 Client 提问:
typescript
// Server
ctx.stream.send({ type: 'question', text: '请选择语言' })
for await (const msg of ctx.stream) {
if (msg.type === 'answer') { /* 处理回答 */ }
}
// Client
for await (const msg of stream) {
if (msg.type === 'question') stream.send({ type: 'answer', text: '中文' })
}取消请求
typescript
const controller = new AbortController()
const stream = await client.call('skill', params, { signal: controller.signal })
// 取消
controller.abort()浏览器支持
typescript
import { createAgentClient } from '@multi-agent/a2a/browser'
const client = createAgentClient({ agentId: 'my-agent', address: 'a2a://localhost:50061' })插件系统
typescript
const server = createAgentServer(config)
.use(createTracingPlugin({ /* 链路追踪 */ }))
.use(createIOMetricsPlugin({ /* Token 计量 */ }))
.use(createParasitePlugin({ /* 寄生模式 */ }))LLM 工具调用
将 Agent 技能转换为 Tool Calling 格式,让 LLM 自动调用 Agent:
typescript
import { createAgentClient } from '@multi-agent/a2a'
import { buildAgentTools, toOpenAITools, executeOpenAIToolCall } from '@multi-agent/agent-kit'
import OpenAI from 'openai'
// 1. 获取 Agent 的 AgentCard
const client = createAgentClient({ agentId: 'tool-agent', address: 'a2a://localhost:50055' })
const agentCard = await client.getAgentCard()
// 2. 构建 Tools
const { tools } = buildAgentTools([agentCard])
const openaiTools = toOpenAITools(tools)
// 3. 让 LLM 决定调用哪个工具
const openai = new OpenAI()
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [{ role: 'user', content: '读取 package.json 文件' }],
tools: openaiTools,
})
// 4. 执行 LLM 选择的工具(自动调用对应 Agent)
const toolCalls = response.choices[0].message.tool_calls
if (toolCalls) {
for (const toolCall of toolCalls) {
const result = await executeOpenAIToolCall(tools, toolCall)
console.log(result)
}
}支持 OpenAI、Anthropic、LangChain 三种 SDK,详见 @multi-agent/agent-kit。
常用 API
| Server | Client |
|---|---|
createAgentServer(config) | createAgentClient(config) |
server.start() | client.call(skill, params) |
server.shutdown() | client.getAgentCard() |
ctx.stream.send(msg) | client.checkHealth() |
ctx.signal | client.close() |