Skip to content

快速开始

安装

bash
bun add @multi-agent/a2a
bash
pnpm add @multi-agent/a2a
bash
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

ServerClient
createAgentServer(config)createAgentClient(config)
server.start()client.call(skill, params)
server.shutdown()client.getAgentCard()
ctx.stream.send(msg)client.checkHealth()
ctx.signalclient.close()

MIT Licensed