内容
[README.md](https://github.com/user-attachments/files/27191945/README.md)
# ANP · 代理协商协议
**人工智能代理栈中缺失的经济层。**
[](LICENSE)
[](https://python.org)
[]()
[]()
```
[买方 ] → WIRE 01 13 37 00 01 00 00 00 0E ... [出价] api_access max=$0.10
[卖方] ← WIRE 02 13 37 00 02 00 00 00 0C ... [报价] $0.07
[买方 ] → WIRE 04 13 37 00 01 00 00 00 02 ... [接受] $0.07 ✓
✓ 交易在 3 条消息中完成 · 55 字节 · 0.3毫秒 · $0.0000 in LLM tokens
```
---
## 问题
MCP 移动上下文。A2A 移动任务。ACP 移动消息。
**没有人移动价值。**
当两个 AI 代理需要就价格达成一致时,他们要么:
- 让人类决定(慢,不可扩展)
- 使用 LLM 进行自然语言协商(昂贵,模糊,容易出现幻觉价格)
- 硬编码价格(不灵活,错失赚钱机会)
ANP 是第四个选项:一种**二进制线路协议**,代理可以在其中协商价格、证明身份和强制执行支出限制 — 无需单个 LLM token。
---
## ANP 的功能
```
没有 ANP 使用 ANP
──────────────────────────── ────────────────────────────
GPT-4: "我想购买 API 访问权限 01 1337 0001 0E [出价 $0.10]
也许大约八美分,如果可以的话..." 02 1337 0002 0C [报价 $0.07]
04 1337 0001 02 [接受]
3 条消息。55 字节。完成。
~400 个 token。~$0.002。
```
1,000 次谈判/天:
- **使用 LLM:** ~$2.00/天,~400ms 每次,幻觉风险
- **使用 ANP:** ~$0.00/天,~0.3ms 每次,数学精确
---
## 堆栈
```
┌─────────────────────────────────────────┐
│ 您的 LLM(GPT-4、Claude、Llama 等) │ ← 说人类语言
│ ANP 包装器(函数调用) │ ← 翻译意图 → 线路
├─────────────────────────────────────────┤
│ M1 · 协商引擎 │ ← 出价/报价/反报价/接受
│ M2 · 价格预言机 │ ← 阻止幻觉价格
│ M3 · ANP-Pass Token │ ← 支出限制 + 范围
│ M4 · Ed25519 身份 │ ← 代理身份验证
├─────────────────────────────────────────┤
│ M0 · ANP-Wire(二进制协议) │ ← 9 字节头部,10:1 vs JSON
└─────────────────────────────────────────┘
```
ANP 位于 **MCP、A2A 和 ACP 之上** — 它不与它们竞争。这是它们都缺少的经济层。
---
## 快速入门
```bash
pip install pynacl msgpack rich fastapi uvicorn
git clone https://github.com/yourname/anp
cd anp
```
### 在终端中查看两个代理进行协商
```bash
python demos/terminal_demo.py
```
### 直接从 Python 使用 ANP
```python
from wrappers import anp_negotiate
result = anp_negotiate(
item="api_access_basic",
max_price=0.08,
seller_start=0.09,
seller_min=0.04,
)
print(result.final_price) # 0.07
print(result.bytes_wire) # 55
print(result.elapsed_ms) # 0.3
```
### 将 ANP 与 OpenAI 结合使用
```python
import openai
from wrappers import ANPOpenAIWrapper
client = openai.OpenAI(api_key="...")
wrapper = ANPOpenAIWrapper(client, model="gpt-4o-mini")
response = wrapper.chat(
"我需要 API 访问权限,价格低于 $0.08 美元每调用"
)
# → "完成。已协商 api_access_basic 价格为 $0.07。ANP 在 3 轮中使用 55 字节完成交易。零协商 token 消耗。"
```
### 将 ANP 与 Claude 结合使用
```python
import anthropic
from wrappers import ANPAnthropicWrapper
client = anthropic.Anthropic(api_key="...")
wrapper = ANPAnthropicWrapper(client)
response = wrapper.chat(
"找到每月 $9 以下的共享主机,协商最佳价格"
)
```
### 启动 REST API
```bash
uvicorn anp.api.server:app --port 8000
# → http://localhost:8000/docs
```
---
## 线路协议
每个 ANP 消息都是一个 **9 字节头部 + 紧凑的二进制负载**。
```
偏移量 字节 字段
──────────────────────────────────────
0 1 操作码 (出价=0x01, 报价=0x02, 反报价=0x03, 接受=0x04 ...)
1 2 交易 ID (uint16, 会话间共享)
3 2 代理 ID
5 4 负载长度
9 N 负载(结构体打包,无字符串)
```
| 消息 | ANP-Wire | JSON 等效值 | 比例 |
|---------|----------|-----------------|-------|
| 出价 | 23 字节 | ~180 字节 | 8:1 |
| 报价 | 21 字节 | ~140 字节 | 7:1 |
| 接受 | 11 字节 | ~80 字节 | 7:1 |
| 完整协商 | **55 字节** | **~600 字节** | **10:1** |
价格为 `int32` 定点数(分),不是浮点数。无四舍五入错误。无歧义。
---
## 安全模型
ANP 的灵感来自比特币的安全设计:**您持有密钥,代理服从**。
### ANP-Pass Token (M3)
每个代理都携带一个签名令牌,明确定义它可以执行的操作:
```python
token = {
"agent_id": "agent-uuid",
"budget_usd": 10.00, # 总支出限制
"budget_per_tx": 2.00, # 每笔交易限制
"scope": ["api:*"], # 它可以协商的内容
"expires_at": unix_ts, # TTL
"allowed_sellers": [...], # 白名单
"blocked_sellers": [...], # 黑名单
}
# 使用 HMAC-SHA256 签名。160 字节。适合 HTTP 头部。
```
没有有效令牌:零次协商。没有发行者密钥:无法伪造。
### Ed25519 身份 (M4)
每个代理都有一个从私钥派生的加密身份 — 像比特币地址一样:
```
私钥(32 字节,秘密)
↓
公钥(32 字节,共享)
↓
agent_id = SHA256(pubkey)[:32] ← 确定性,无中心注册
```
卖方验证:“此代理使用与此 agent_id 匹配的密钥签署了此身份验证。” 冒充需要破坏 Ed25519 — 那是 2^128 次操作。
### 价格预言机 (M2)
LLM 会产生幻觉数字。预言机会在资金流动之前捕获:
```python
# LLM “认为”价格为 $5.00,适用于 $0.05 API 调用
result = oracle.check_buy("api_access_basic", offered_price=5.00)
# → BLOCKED_CEILING: $5.00 > 上限 $0.20。节省:$4.80
```
三层:硬上限(绝对阻止),软容忍度(±20%,人工确认),和实时节省跟踪器,显示预言机节省的确切金额。
---
## 模块
| 模块 | 文件 | 功能 |
|--------|------|--------------|
| M0 · 线路 | `anp/wire/` | 二进制协议,操作码,帧编解码器 |
| M1 · 协商 | `anp/negotiation/` | 引擎,买方,卖方,策略 |
| M2 · 预言机 | `anp/oracle/` | 价格验证,x402/MPP 集成 |
| M3 · 护照 | `anp/passport/` | HMAC 令牌,权限,防重放 |
| M4 · 身份 | `anp/identity/` | Ed25519 密钥对,注册表,凭证 |
| M5 · API | `anp/api/` | FastAPI 服务器,11 个端点 |
| M6 · 包装器 | `wrappers/` | OpenAI,Anthropic,LangChain,纯 Python |
---
## 运行演示
```bash
python demos/terminal_demo.py # 两个代理实时协商
python demos/oracle_demo.py # 查看预言机阻止幻觉价格
python demos/passport_demo.py # 令牌生命周期和权限强制执行
python demos/identity_demo.py # Ed25519 身份验证 + 5 种攻击类型阻止
python demos/wrapper_demo.py # LLM + ANP 集成模拟
```
---
## x402 / MPP 集成
当交易超过配置的阈值(默认为 $1.00)时,ANP 会发出信号,指示它应该通过 x402 或 Lightning MPP 支付通道路由,然后再执行:
```python
oracle = Oracle.from_json(
"feeds/prices.json",
x402_endpoint="https://payments.example.com/x402",
x402_threshold_usd=1.0,
)
result = oracle.check_buy("hosting_shared_monthly", 8.99)
# result.x402_required == True
# result.x402_endpoint == "https://payments.example.com/x402"
```
协商在 ANP-Wire 中结束。支付在 x402 中结算。两个独立的关注点,干净地分离。
---
## 为什么不使用 JSON-RPC?
JSON-RPC 处理传输。ANP 处理 **语义**。
JSON-RPC 不知道 `出价` 的含义,`反报价` 价格不能超过之前的 `报价`,`接受` 在会话内是不可撤销的,或者价格是具有无歧义的定点整数。ANP 在协议本身中编码这些不变性。
这与拥有线路和拥有 TCP/IP 之间的区别。
---
## 路线图
- [x] M0 · ANP-Wire 二进制协议
- [x] M1 · 协商引擎(3 种买方策略,2 种卖方策略)
- [x] M2 · 价格预言机 + x402 集成
- [x] M3 · ANP-Pass 能力令牌
- [x] M4 · Ed25519 代理身份 + TOFU 注册表
- [x] M5 · FastAPI REST 服务器
- [x] M6 · OpenAI,Anthropic,LangChain 包装器
- [ ] WebSocket 传输用于实时多代理会话
- [ ] 持久性价格馈送(连接到实时市场 API)
- [ ] 多卖家拍卖(N 个卖家竞争一个买家)
- [ ] ANP-Pass 撤销注册表
- [ ] SPEC.md RFC 正式化
- [ ] PR 到 LangChain,CrewAI,AutoGen 进行原生集成
---
## 贡献
ANP 被设计为 **标准**,而非库。这意味着:
1. 线路协议必须足够简单,以便任何 AI(GPT-3 至 GPT-4)都能生成正确的调用
2. 每个新操作码都需要有充分的理由 — 表中有 255 个槽,我们已经使用了 11 个
3. SPEC.md(即将推出)是源头 — 实现遵循规范,而不是相反
如果您在其他语言(Go、Rust、TypeScript)中实现了 ANP,请打开一个 PR,我们将在这里链接它。
---
## 许可证
MIT。 使用它,基于它构建,使它成为标准。
---
当前限制
单一价格馈送(JSON 本地)— 生产部署需要实时市场数据源
仅限双边会话 — 多卖家拍卖模式正在路线图中(v0.2)
协商策略基于规则,而不是博弈论 — 精通的对手可能会利用可预测的模式
仅限 Python 参考实现 — SPEC.md 和测试向量将在 v1.0 之前发布
仅限 Python 参考实现 — SPEC.md 和测试向量将在 v1.0 之前发布
*ANP · 代理间协商的经济层。*
*MCP 移动上下文。A2A 移动任务。ANP 移动价值。*
连接信息
猜你喜欢
暂无推荐服务器