# ANP (AI Native Protocol) v1.0.0 > **AI Agent 通信基础设施** — 基于 libp2p 的去中心化通信协议 > **定位**: AI 间无头通信是主流,人类界面反而不重要 [![Go Version](https://img.shields.io/badge/Go-1.22+-00ADD8)](https://golang.org) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Build Status](https://img.shields.io/badge/build-passing-brightgreen)]() --- ## 📋 目录 - [项目愿景](#项目愿景) - [核心特性](#核心特性) - [架构设计](#架构设计) - [快速开始](#快速开始) - [API 文档](#api-文档) - [性能测试](#性能测试) - [部署指南](#部署指南) - [路线图](#路线图) --- ## 🎯 项目愿景 **Soraecho 不是聊天软件,而是 AI 通信基础设施。** - **AI 间无头通信是主流** — 大部分消息将在 AI Agent 之间自动交换 - **基础设施优先** — 没有稳固网络基础,用户体验都是空谈 - **对标微信的极简安装** — 双击即装,面向普通用户 - **ANP = AI 时代的 Internet** — A2A = HTTP,ANP = TCP/IP --- ## ✨ 核心特性 ### Phase 1: MVP ✅ (2026-05-11) - [x] **身份管理** — DID (did:key) + PeerID 双身份体系 - [x] **P2P 消息** — 基于 libp2p Stream 的点对点通信 - [x] **DHT 发现** — Kademlia DHT 节点/服务发现 - [x] **Gossip 广播** — Gossipsub 主题广播 - [x] **消息确认** — ACK 机制 + 自动重试 - [x] **中继穿透** — Relay 服务支持 NAT 穿透 - [x] **IPLD DAG** — 对话上下文链存储 ### Phase 2: 可靠性与群聊 ✅ (2026-05-12) - [x] **离线消息** — Mail Server (BadgerDB, TTL 30天) - [x] **群组管理** — 创建/加入/退出,Gossipsub 广播 - [x] **群组历史** — IPLD DAG 历史消息存储 - [x] **身份持久化** — identity.json 本地存储 ### Phase 3: A2A 适配层 ✅ (2026-05-12) - [x] **Agent Card** — DID + 能力 + 技能,DHT 注册 - [x] **A2A 消息模型** — Message/Part/Artifact/Task - [x] **能力发现** — 单标签 + 多标签 AND 匹配 - [x] **任务生命周期** — 7 种状态管理 - [x] **9 个 REST API** — 完整的 A2A 操作接口 ### Phase 4: 测试与优化 ✅ (2026-05-16) - [x] **测试覆盖率** — p2p 63.9%, discovery 76.6%, group 75.8%, mailbox 62.2% - [x] **端到端压力测试** — 4644 ops/30s (155 ops/sec) - [x] **跨节点验证** — Bootstrap/Client 三节点全功能测试 - [x] **性能优化** — 超时参数调优,内存保护 --- ## 🏗️ 架构设计 ### ANP 四层架构 ``` ┌──────────────────────────────────────────────┐ │ A2A 协议层 │ │ ├── Agent Card (能力声明) │ │ ├── Task (任务生命周期) │ │ ├── Message (消息交换) │ │ └── Artifact (输出产物) │ ├──────────────────────────────────────────────┤ │ ANP 应用层 │ │ ├── 群组管理 (创建/加入/消息/历史) │ │ ├── 离线消息 (Mail Server/Client) │ │ └── 身份管理 (DID/PeerID/签名/验证) │ ├──────────────────────────────────────────────┤ │ ANP 传输层 │ │ ├── DHT (Kademlia 发现) │ │ ├── Gossipsub (主题广播) │ │ ├── Stream (P2P 消息) │ │ ├── ACK (消息确认) │ │ └── Relay (NAT 穿透) │ ├──────────────────────────────────────────────┤ │ libp2p 基础层 │ │ ├── TCP/QUIC 传输 │ │ ├── Noise 加密 │ │ ├── Yamux 多路复用 │ │ └── PeerID + Crypto │ └──────────────────────────────────────────────┘ ``` ### 技术栈 | 组件 | 技术 | 版本 | |------|------|------| | 语言 | Go | 1.22.2 | | P2P 框架 | go-libp2p | v0.36.0 | | DHT | go-libp2p-kad-dht | v0.25.2 | | 广播 | go-libp2p-pubsub | v0.11.0 | | 存储 | BadgerDB | v4.2.0 | | Protobuf | google.golang.org/protobuf | latest | | CLI | spf13/cobra | latest | --- ## 🚀 快速开始 ### 1. 下载二进制 ```bash # Linux amd64 wget https://soraecho.com/downloads/packages/anpd-v1.0.1-linux-amd64.tar.gz tar -xzf anpd-v1.0.1-linux-amd64.tar.gz cd anpd-v1.0.1 ``` ### 2. 配置节点 ```bash # 编辑 config.yaml cat > config.yaml < -t "Hello ANP!" # 创建群组 ./anpctl group create -N "My Group" # 发布 Agent Card ./anpctl a2a publish --name "My Agent" --caps "anp/chat,anp/llm" ``` --- ## 📡 API 文档 ANP 节点提供 RESTful HTTP API,默认监听 `127.0.0.1:4002`。 ### 基础接口 | 端点 | 方法 | 说明 | |------|------|------| | `/api/v1/status` | GET | 节点状态 (peers, groups, DHT stats) | | `/api/v1/identity` | GET | 节点身份 (DID, PeerID) | | `/api/v1/peers` | GET | 已连接节点列表 | | `/api/v1/topics` | GET | 已订阅 Gossipsub 主题 | ### 消息接口 | 端点 | 方法 | 说明 | |------|------|------| | `/api/v1/message/send` | POST | 发送 P2P 消息 | | `/api/v1/group/create` | POST | 创建群组 | | `/api/v1/group/send` | POST | 发送群组消息 | | `/api/v1/group/join` | POST | 加入群组 | | `/api/v1/group/leave` | POST | 退出群组 | | `/api/v1/group/info` | GET | 查询群组信息 | ### A2A 接口 | 端点 | 方法 | 说明 | |------|------|------| | `/api/v1/a2a/publish` | POST | 发布 Agent Card | | `/api/v1/a2a/discover` | GET | 发现 Agent (by DID) | | `/api/v1/a2a/match` | POST | 按能力匹配 Agent | | `/api/v1/a2a/task/send` | POST | 发送 A2A 任务 | | `/api/v1/a2a/task/get` | GET | 查询任务详情 | ### 离线消息接口 | 端点 | 方法 | 说明 | |------|------|------| | `/api/v1/mail/pull` | GET | 拉取离线消息 | | `/api/v1/mail/deliver` | POST | 投递离线消息 | 详细 API 文档请查看 [docs/API.md](docs/API.md) --- ## 📊 性能测试 ### 测试环境 - **Hermes 节点**: 43.156.115.156 (本机) - **Bootstrap 节点**: 129.226.202.231 - **Client 节点**: 43.156.104.197 ### 测试结果 | 测试项 | 结果 | |--------|------| | **消息吞吐量** (50x 批量) | 50/50 ✅ | | **大消息** (10KB/100KB) | ✅ / ✅ | | **跨节点消息** (双向) | ✅ / ✅ | | **群组批量消息** (50x) | 50/50 ✅ | | **A2A 任务** (20x + 查询) | 40/40 ✅ | | **持续压力** (30秒) | 4644 ops (155 ops/sec) | | **能力匹配** | ✅ 找到 1 个 Agent | | **Gossip 统计** | announce_sent=6, recv=8 | ### 测试覆盖率 | 包 | 覆盖率 | |----|--------| | p2p | 63.9% | | discovery | 76.6% | | group | 75.8% | | mailbox | 62.2% | --- ## 🌐 部署指南 ### 单机测试 ```bash # 启动本机节点 anpd --config config.yaml # 验证 curl http://127.0.0.1:4002/api/v1/status ``` ### Docker 测试网 ```bash # 启动 3 节点测试网 (1 Bootstrap + 2 Client) bash scripts/docker-testnet.sh # 验证 bash scripts/docker-testnet.sh verify # 清理 bash scripts/docker-testnet.sh clean ``` ### 生产部署 1. **Bootstrap 节点** (种子节点) - `dht_mode: server` (DHT 服务器模式) - `relay_enabled: true` (启用中继) - `mail_server: true` (启用离线消息) 2. **边缘节点** (普通节点) - `dht_mode: client` (DHT 客户端模式) - `bootstrap_peers` 指向 Bootstrap 详细部署指南请查看 [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md) --- ## 🗺️ 路线图 ### v1.1.0 (规划中) - [ ] **移动端 SDK** — Android/iOS (gomobile) - [ ] **WebRTC 传输** — 浏览器节点支持 - [ ] **支付通道** — 微支付激励层 - [ ] **信誉系统** — Sybil 防护 ### v2.0.0 (远期) - [ ] **跨链互操作** — 多链身份绑定 - [ ] **零知识证明** — 隐私保护消息 - [ ] **分片 DHT** — 百万级节点支持 --- ## 📄 许可证 MIT License — 详见 [LICENSE](LICENSE) --- ## 🔗 相关链接 - **官网**: https://soraecho.com - **文档**: https://docs.soraecho.com - **FFCosmos**: http://ffcosmos.com (Logos 负责模型路由) - **Soraecho**: https://soraecho.com (Hermes 主战场) - **GitHub**: https://github.com/soraecho/anp --- **Built with ❤️ by the Soraecho Team**