| name | uni-agent |
| description | 统一智能体协议适配层。一套 API 调用所有 Agent 协议(ANP/MCP/A2A/AITP 等)。当用户需要调用 Agent、跨协议通信、连接工具时触发此技能。 |
UniAgent - 统一智能体协议适配层
"Connect Any Agent, Any Protocol"
设计理念
问题
当前 Agent 协议生态割裂:
- MCP:Anthropic 的工具调用协议
- A2A:Google 的 Agent 间协作协议
- ANP:去中心化身份 + Agent 网络协议
- AITP:NEAR 的交互交易协议
- ...
开发者需要为每个协议学习不同的 SDK、实现不同的调用逻辑。
解决方案
UniAgent 提供统一抽象层,一套 API 适配所有协议:
from uni_agent import UniAgent
agent = UniAgent()
agent.call("amap@anp", "maps_weather", {"city": "北京"})
agent.call("filesystem@mcp", "read_file", {"path": "/tmp/a.txt"})
agent.call("assistant@a2a", "chat", {"message": "hello"})
agent.call("shop@aitp", "purchase", {"item": "coffee", "amount": 10})
架构设计
┌─────────────────────────────────────────────────────────┐
│ UniAgent │
│ 统一调用接口 │
├─────────────────────────────────────────────────────────┤
│ call(agent_id, method, params) -> result │
│ discover(capability) -> List[Agent] │
│ connect(agent_id) -> Connection │
└────────────────────────┬────────────────────────────────┘
│
┌──────────┴──────────┐
│ Protocol Router │
│ 协议路由 & 适配 │
└──────────┬──────────┘
│
┌─────────┬───────────┼───────────┬─────────┐
▼ ▼ ▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│ ANP │ │ MCP │ │ A2A │ │ AITP │ │ ... │
│Adapter│ │Adapter│ │Adapter│ │Adapter│ │Adapter│
└──────┘ └──────┘ └──────┘ └──────┘ └──────┘
核心概念
1. Agent ID 格式
<agent_name>@<protocol>
示例:
- amap@anp # ANP 协议的高德地图 Agent
- filesystem@mcp # MCP 协议的文件系统 Server
- gemini@a2a # A2A 协议的 Gemini Agent
- shop@aitp # AITP 协议的商店 Agent
2. 统一调用接口
result = agent.call(
agent_id="amap@anp",
method="maps_weather",
params={"city": "北京"},
timeout=30
)
3. 能力发现
agents = agent.discover("weather")
4. 协议适配器接口
class ProtocolAdapter(ABC):
"""协议适配器基类"""
@abstractmethod
def connect(self, agent_config: dict) -> Connection:
"""建立连接"""
pass
@abstractmethod
def call(self, connection: Connection, method: str, params: dict) -> dict:
"""调用方法"""
pass
@abstractmethod
def discover(self, capability: str) -> List[AgentInfo]:
"""发现 Agent"""
pass
@abstractmethod
def close(self, connection: Connection):
"""关闭连接"""
pass
支持的协议
| 协议 | 状态 | 适配器 | 说明 |
|---|
| ANP | ✅ 已实现 | adapters/anp.py | 去中心化身份 + Agent 网络 |
| MCP | ✅ 已实现 | adapters/mcp.py | LLM 工具调用 |
| A2A | ✅ 已实现 | adapters/a2a.py | Agent 间协作 |
| AITP | ✅ 已实现 | adapters/aitp.py | 交互 + 交易 |
| Agent Protocol | ✅ 已实现 | adapters/agent_protocol.py | REST API |
| LMOS | ✅ 已实现 | adapters/lmos.py | 企业级平台 |
使用方式
CLI 调用
python scripts/uni_cli.py call amap@anp maps_weather '{"city":"北京"}'
python scripts/uni_cli.py call filesystem@mcp read_file '{"path":"/tmp/a.txt"}'
python scripts/uni_cli.py discover weather
python scripts/uni_cli.py list
Python SDK
from uni_agent import UniAgent
agent = UniAgent(config_path="config/agents.yaml")
result = agent.call("amap@anp", "maps_weather", {"city": "北京"})
print(result)
results = agent.batch_call([
("amap@anp", "maps_weather", {"city": "北京"}),
("amap@anp", "maps_weather", {"city": "上海"}),
])
配置文件
config/agents.yaml
agents:
- id: amap
protocol: anp
ad_url: https://agent-connect.ai/mcp/agents/amap/ad.json
- id: hotel
protocol: anp
ad_url: https://agent-connect.ai/agents/hotel-assistant/ad.json
- id: filesystem
protocol: mcp
command: npx
args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
- id: github
protocol: mcp
command: npx
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_TOKEN: "${GITHUB_TOKEN}"
- id: assistant
protocol: a2a
endpoint: https://example.com/.well-known/agent.json
config/identity.yaml
identity:
anp:
did_document: config/did.json
private_key: config/private-key.pem
a2a:
auth_type: oauth2
client_id: "${A2A_CLIENT_ID}"
client_secret: "${A2A_CLIENT_SECRET}"
目录结构
uni-agent/
├── SKILL.md # 本文件
├── README.md # 使用文档
├── setup.sh # 一键安装
├── requirements.txt # Python 依赖
├── config/
│ ├── agents.yaml # Agent 注册表
│ ├── identity.yaml # 身份配置
│ └── .gitignore
├── adapters/
│ ├── __init__.py
│ ├── base.py # 适配器基类
│ ├── anp.py # ANP 适配器
│ ├── mcp.py # MCP 适配器
│ ├── a2a.py # A2A 适配器
│ └── aitp.py # AITP 适配器
├── scripts/
│ └── uni_cli.py # CLI 工具
└── docs/
├── architecture.md # 架构文档
└── adapters.md # 适配器开发指南
扩展新协议
- 创建适配器文件
adapters/new_protocol.py
- 继承
ProtocolAdapter 基类
- 实现
connect、call、discover、close 方法
- 在
adapters/__init__.py 注册
from .base import ProtocolAdapter
class NewProtocolAdapter(ProtocolAdapter):
protocol_name = "new_protocol"
def connect(self, agent_config):
pass
def call(self, connection, method, params):
pass
依赖
pip install anp aiohttp mcp pyyaml