Files
opencode-skills/uni-agent/SKILL.md
2026-02-11 22:02:47 +08:00

280 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 适配所有协议:
```python
from uni_agent import UniAgent
agent = UniAgent()
# 调用 ANP Agent
agent.call("amap@anp", "maps_weather", {"city": "北京"})
# 调用 MCP Server
agent.call("filesystem@mcp", "read_file", {"path": "/tmp/a.txt"})
# 调用 A2A Agent
agent.call("assistant@a2a", "chat", {"message": "hello"})
# 调用 AITP Agent带支付
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. 统一调用接口
```python
result = agent.call(
agent_id="amap@anp", # Agent 标识
method="maps_weather", # 方法名
params={"city": "北京"}, # 参数
timeout=30 # 可选超时
)
```
### 3. 能力发现
```python
# 发现所有能提供天气服务的 Agent
agents = agent.discover("weather")
# 返回: [
# {"id": "amap@anp", "protocol": "anp", "methods": [...]},
# {"id": "weather@mcp", "protocol": "mcp", "methods": [...]}
# ]
```
### 4. 协议适配器接口
```python
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 调用
```bash
# 调用 ANP Agent
python scripts/uni_cli.py call amap@anp maps_weather '{"city":"北京"}'
# 调用 MCP Server
python scripts/uni_cli.py call filesystem@mcp read_file '{"path":"/tmp/a.txt"}'
# 发现 Agent
python scripts/uni_cli.py discover weather
# 列出已注册 Agent
python scripts/uni_cli.py list
```
### Python SDK
```python
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
```yaml
agents:
# ANP 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
# MCP Servers
- 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}"
# A2A Agents
- id: assistant
protocol: a2a
endpoint: https://example.com/.well-known/agent.json
```
### config/identity.yaml
```yaml
# 身份配置(跨协议通用)
identity:
# ANP DID 身份
anp:
did_document: config/did.json
private_key: config/private-key.pem
# A2A 认证
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 # 适配器开发指南
```
## 扩展新协议
1. 创建适配器文件 `adapters/new_protocol.py`
2. 继承 `ProtocolAdapter` 基类
3. 实现 `connect``call``discover``close` 方法
4.`adapters/__init__.py` 注册
```python
# adapters/new_protocol.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
# ...
```
## 依赖
```bash
pip install anp aiohttp mcp pyyaml
```