Token导航 LogoToken导航TokenDH.com
研究检索external-serviceclawhub未标认证来源可访问clear审计通过

yuyonghao-a2a-server余永豪 a2a 服务器

Agent Skill

yuyonghao-a2a-server 用于查找、检索和筛选相关信息,适合在 OpenClaw 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

6,291

周安装

257

GitHub Stars

公开资料未说明

下载量

2,035
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:yuyonghao-a2a-server(余永豪 a2a 服务器)
来源仓库:https://github.com/yuyonghao-123/yuyonghao-a2a-server
安装命令:
openclaw skills install yuyonghao-a2a-server
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install yuyonghao-a2a-server

简介

基于 WebSocket 的多智能体 P2P 通信服务器,支持低延迟消息转发、RPC 调用、发布/订阅、能力发现及离线消息队列。

SKILL.md

a2a-server

Agent-to-Agent (A2A) Communication Server - 基于 WebSocket 的多智能体 P2P 通信系统

描述

实现 AI Agent 之间的实时通信和协作:

  • P2P 消息转发 - Agent 间直接通信,低延迟(~10ms)
  • RPC 调用 - 请求/响应模式,支持超时控制
  • 发布/订阅 - 频道广播,支持多订阅者
  • 能力发现 - 按能力搜索 Agent,动态路由
  • 离线消息 - 支持离线 Agent,消息队列存储
  • 心跳机制 - 自动检测离线,自动清理

功能

  • Agent 注册与发现 - 动态注册、能力公告、元数据管理
  • P2P 消息转发 - WebSocket 双向通信、低延迟
  • RPC 调用 - correlationId 追踪、超时控制、错误处理
  • 发布/订阅 - 频道管理、多订阅者支持
  • 能力发现 - 按能力/元数据筛选、实时查询
  • 离线消息队列 - 内存存储、大小限制(100 条)、自动投递
  • 心跳机制 - 定期心跳、超时检测(90 秒)、自动清理
  • 自动重连 - 指数退避、最大尝试次数、连接恢复
  • 信任链授权 - 待实现
  • 消息签名 - 待实现

安装

# 从 ClawHub 安装(待发布)
clawhub install a2a-server

# 或手动克隆
git clone https://github.com/YOUR_GITHUB/skills/a2a-server
cd skills/a2a-server
npm install

快速开始

1. 启动服务器

npm start
# 或
node src/server.js

# 环境变量
# A2A_PORT=8080
# A2A_HOST=localhost
# A2A_VERBOSE=true

2. 客户端连接

const { A2AClient } = require('./src/index');
// 或分别导入
const { A2AServer } = require('./src/index');
const { A2AClient } = require('./src/index');

const client = new A2AClient('ws://localhost:8080', {
  agentId: 'my-agent',
  capabilities: ['search', 'analyze'],
  metadata: { version: '1.0.0' },
  verbose: true,
});

await client.connect();
console.log('✅ 已连接并注册');

3. RPC 调用

// 调用远程 Agent
const result = await client.call('remote-agent', {
  action: 'search',
  query: 'AI trends'
});

console.log(result);

4. 发布/订阅

// 订阅频道
await client.subscribe('notifications');

client.on('message', (payload, from) => {
  console.log(`收到 ${from}:`, payload);
});

// 发布消息
await client.publish('notifications', {
  type: 'task-complete',
  taskId: '123'
});

5. 能力发现

// 发现所有 Agent
const agents = await client.discover();

// 按能力发现
const searchAgents = await client.discover({
  capability: 'search'
});

console.log(`找到 ${searchAgents.length} 个搜索 Agent`);

配置选项

Server 配置

选项类型默认值说明
portnumber8080WebSocket 端口
hoststring'localhost'监听地址
verbosebooleanfalse详细日志
heartbeatIntervalnumber30000心跳间隔(毫秒)

Client 配置

选项类型默认值说明
agentIdstring自动生成Agent 唯一标识
capabilitiesarray[]能力列表
metadataobject{}元数据
callTimeoutnumber30000调用超时(毫秒)
maxReconnectAttemptsnumber10最大重连次数
reconnectDelaynumber1000重连延迟(毫秒)
verbosebooleanfalse详细日志

API 参考

A2AServer

constructor(options)

创建服务器实例。

start()

启动服务器,返回 Promise。

stop()

停止服务器,关闭所有连接。

getStats()

获取统计信息:

{
  totalConnections: 100,
  totalMessages: 500,
  activeAgents: 10,
  uptime: 3600,
  memoryUsage: {...}
}

getAgents()

获取已注册 Agent 列表:

[
  {
    agentId: 'agent-1',
    capabilities: ['search'],
    metadata: {...},
    registeredAt: Date,
    lastHeartbeat: Date
  }
]

broadcast(payload, exclude)

广播消息给所有 Agent。

A2AClient

constructor(serverUrl, options)

创建客户端实例。

connect()

连接服务器,自动注册。

disconnect()

断开连接。

call(targetAgentId, payload, options)

RPC 调用:

  • targetAgentId - 目标 Agent
  • payload - 调用参数
  • options.timeout - 超时(默认 30s)
  • 返回:Promise<result>

publish(channel, payload)

发布消息到频道。

subscribe(channel)

订阅频道。

unsubscribe(channel)

取消订阅。

discover(options)

能力发现:

  • options.capability - 按能力筛选
  • options.filter - 按元数据筛选
  • 返回:Promise<Agent[]>

heartbeat()

发送心跳。

getStatus()

获取连接状态:

{
  connected: true,
  registered: true,
  agentId: 'my-agent',
  reconnectAttempts: 0
}

on(event, listener)

事件监听:

  • connected - 连接成功
  • disconnected - 断开连接
  • registered - 注册成功
  • reconnecting - 重连中
  • reconnected - 重连成功
  • message - 收到频道消息

使用场景

场景 1: 多智能体协作

// Planner Agent
const planner = new A2AClient('ws://localhost:8080', {
  agentId: 'planner',
  capabilities: ['planning', 'analysis']
});
await planner.connect();

// Executor Agent
const executor = new A2AClient('ws://localhost:8080', {
  agentId: 'executor',
  capabilities: ['execution', 'tool-use']
});
await executor.connect();

// Planner 调用 Executor
const result = await planner.call('executor', {
  action: 'execute',
  task: 'analyze code'
});

场景 2: 分布式搜索

// Search Agent 注册
const searchAgent = new A2AClient('ws://localhost:8080', {
  agentId: 'search-001',
  capabilities: ['web-search', 'tavily']
});
await searchAgent.connect();

// 发现搜索 Agent
const agents = await client.discover({ capability: 'web-search' });

// 调用搜索
const result = await client.call(agents[0].agentId, {
  query: 'AI trends 2026'
});

场景 3: 通知系统

// 订阅通知
await client.subscribe('system-alerts');

client.on('message', (payload, from) => {
  if (payload.type === 'alert') {
    console.log(`⚠️ 告警:${payload.message}`);
  }
});

// 发布告警
await client.publish('system-alerts', {
  type: 'alert',
  level: 'warning',
  message: 'High CPU usage detected'
});

与现有系统集成

集成 Multi-Agent

const { MultiAgentOrchestrator } = require('../multi-agent');
const { A2AClient } = require('../a2a-server/src/index');

const a2a = new A2AClient('ws://localhost:8080', {
  agentId: 'planner-agent',
  capabilities: ['planning']
});
await a2a.connect();

const orchestrator = new MultiAgentOrchestrator();

// 注册远程工具
orchestrator.registerTool('remote-execute',
  async (params) => {
    const agents = await a2a.discover({ capability: 'execution' });
    return await a2a.call(agents[0].agentId, params);
  },
  { description: '远程执行', keywords: ['执行', '远程'] }
);

集成 ReAct Orchestrator

const { ReActOrchestrator } = require('../react-orchestrator');
const { A2AClient } = require('../a2a-server/src/index');

const orchestrator = new ReActOrchestrator();
const a2a = new A2AClient('ws://localhost:8080', {
  agentId: 'react-agent',
  capabilities: ['reasoning']
});
await a2a.connect();

// 注册远程工具
orchestrator.registerTool('remote-search',
  async (params) => {
    const agents = await a2a.discover({ capability: 'search' });
    return await a2a.call(agents[0].agentId, params);
  },
  { description: '远程搜索', keywords: ['搜索', '远程'] }
);

测试

# 运行所有测试
npm test

# 运行测试并监视
npm run test:watch

# 调试模式运行
npm run test:debug

测试框架

  • 测试运行器: Jest v29.7.0
  • 覆盖率目标: >80%
  • 测试超时: 30秒(可配置)

测试覆盖

  • ✅ 服务器基础功能(启动/停止/统计)
  • ✅ Agent 注册/注销/心跳
  • ✅ RPC 调用/响应(在线/离线/超时)
  • ✅ 发布/订阅(单订阅者/多订阅者)
  • ✅ 能力发现(全部/按能力/按元数据)
  • ✅ 离线消息队列
  • ✅ 错误处理
  • ✅ 并发连接

测试文件

  • test/a2a.test.js - 完整 Jest 测试套件
  • TEST-STATUS.md - 详细测试状态

消息协议

注册消息

{
  "type": "register",
  "agentId": "planner-001",
  "capabilities": ["planning", "analysis"],
  "metadata": { "version": "1.0.0" }
}

RPC 调用

{
  "type": "call",
  "from": "planner-001",
  "to": "executor-001",
  "correlationId": "uuid-123",
  "payload": { "action": "execute", "task": "..." }
}

RPC 响应

{
  "type": "response",
  "to": "planner-001",
  "correlationId": "uuid-123",
  "payload": { "result": "success" }
}

发布消息

{
  "type": "publish",
  "channel": "notifications",
  "from": "system",
  "payload": { "type": "alert", "message": "..." }
}

性能基准

延迟(本地)

操作延迟
连接建立~5ms
Agent 注册~10ms
RPC 调用~15ms
发布/订阅~10ms
能力发现~20ms

并发

Agent 数量消息/秒CPU内存
1010005%50MB
50500015%100MB
1001000030%200MB

已知限制

  • ⚠️ 离线消息 - 内存存储,重启丢失(未来用 Redis)
  • ⚠️ 认证授权 - 尚未实现(信任链待开发)
  • ⚠️ 消息签名 - 尚未实现(防止伪造)
  • ⚠️ 集群支持 - 单服务器(未来支持多节点)

依赖

  • Node.js >= 18.0.0
  • ws ^8.16.0
  • uuid ^9.0.0

版本历史

v0.1.0 (2026-03-18)

  • ✅ 初始版本
  • ✅ WebSocket 服务器
  • ✅ A2A Client
  • ✅ RPC 调用
  • ✅ 发布/订阅
  • ✅ 能力发现
  • ✅ 心跳机制

许可证

MIT

作者

小蒲萄 (Clawd) 🦞

贡献

欢迎提交 Issue 和 PR!

参考资料

  • README.md - 使用指南
  • IMPLEMENTATION-NOTES.md - 实施笔记
  • A2A-RESEARCH.md - 调研报告

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

71.52%
按下载量换算1,455

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

external-service

该 Skill 可能调用第三方服务、云服务或外部模型 API,使用前需要确认账号、额度、数据发送范围和服务条款。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills