15.3 ANP(Agent Network Protocol)协议

本节目标:理解 ANP 协议的设计理念,掌握去中心化智能体网络的核心机制,并与 MCP/A2A 进行对比分析。


为什么需要 ANP?

在前两节中,我们学习了 MCP 和 A2A 两种协议:

  • MCP 解决了 Agent 与工具之间的"连接"问题
  • A2A 解决了 Agent 与 Agent 之间的"协作"问题

但当我们面临大规模智能体网络的场景时,一个新的问题浮现了:

在一个有成千上万 Agent 的开放网络中,Agent 如何发现彼此、验证身份、安全地通信?

这就是 ANP(Agent Network Protocol) 要解决的问题 [1]。

类比理解

协议类比核心问题
MCPUSB 接口标准Agent 如何接入工具?
A2A即时通讯协议两个 Agent 如何协作?
ANP互联网 DNS + HTTPS大量 Agent 如何组网?

如果说 MCP 是"Agent 的 USB",A2A 是"Agent 的微信",那么 ANP 就是"Agent 的互联网"。


ANP 的核心设计理念

ANP 的设计遵循以下关键原则 [1]:

1. 去中心化(Decentralization)

传统的 Agent 协作(包括 A2A)通常依赖中心化的服务发现机制——Agent 注册到一个中央注册表,其他 Agent 通过注册表查找。但中心化方案存在单点故障、扩展性瓶颈、信任集中等问题。

ANP 采用去中心化架构:每个 Agent 拥有自己的身份标识,可以独立地发布自己的能力描述,无需依赖中央服务器。

2. DID 身份验证(Decentralized Identifiers)

ANP 使用 DID(去中心化标识符)[2] 作为 Agent 的身份基础:

# DID 格式
did:anp:agent_12345

# 完整的 DID Document 示例
{
  "@context": "https://www.w3.org/ns/did/v1",
  "id": "did:anp:agent_12345",
  "authentication": [
    {
      "id": "did:anp:agent_12345#keys-1",
      "type": "Ed25519VerificationKey2020",
      "publicKeyMultibase": "z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK"
    }
  ],
  "service": [
    {
      "id": "did:anp:agent_12345#agent-service",
      "type": "AgentService",
      "serviceEndpoint": "https://agent.example.com/api"
    }
  ]
}

DID 的关键优势:

  • 自主性:Agent 自己生成和管理身份,不依赖第三方
  • 可验证性:通过密码学签名验证 Agent 身份
  • 互操作性:W3C 标准,跨平台兼容

3. 去中心化服务发现

ANP 定义了 Agent 的能力描述格式发现机制

# ANP Agent 能力描述(概念性实现)
agent_capability = {
    "did": "did:anp:weather_agent_001",
    "name": "天气预报 Agent",
    "description": "提供全球城市的实时天气查询和未来 7 天预报",
    
    "capabilities": [
        {
            "name": "get_current_weather",
            "description": "获取指定城市当前天气",
            "input_schema": {
                "type": "object",
                "properties": {
                    "city": {"type": "string", "description": "城市名称"},
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
                },
                "required": ["city"]
            },
            "output_schema": {
                "type": "object",
                "properties": {
                    "temperature": {"type": "number"},
                    "condition": {"type": "string"},
                    "humidity": {"type": "number"}
                }
            }
        },
        {
            "name": "get_forecast",
            "description": "获取未来 7 天天气预报",
            "input_schema": {
                "type": "object",
                "properties": {
                    "city": {"type": "string"},
                    "days": {"type": "integer", "minimum": 1, "maximum": 7}
                },
                "required": ["city"]
            }
        }
    ],
    
    "trust_score": 0.95,
    "response_time_ms": 200,
    "pricing": {
        "model": "per_request",
        "price": 0.001,
        "currency": "USD"
    }
}

ANP 的三层协议栈

ANP 的协议设计分为三层:

ANP 三层协议栈

传输层:安全通信

class ANPTransport:
    """ANP 传输层(概念性实现)"""
    
    def __init__(self, agent_did: str, private_key):
        self.did = agent_did
        self.private_key = private_key
    
    def send_message(self, target_did: str, message: dict) -> dict:
        """
        向目标 Agent 发送加密消息
        
        流程:
        1. 解析目标 DID 获取公钥和 Endpoint
        2. 用目标公钥加密消息
        3. 用自己的私钥签名
        4. 发送到目标 Endpoint
        """
        # 1. DID 解析
        target_doc = self.resolve_did(target_did)
        target_pubkey = target_doc["authentication"][0]["publicKeyMultibase"]
        target_endpoint = target_doc["service"][0]["serviceEndpoint"]
        
        # 2. 构建签名消息
        signed_message = {
            "from": self.did,
            "to": target_did,
            "timestamp": time.time(),
            "payload": message,
            "signature": self.sign(message),  # 私钥签名
        }
        
        # 3. 加密并发送
        encrypted = self.encrypt(signed_message, target_pubkey)
        response = self.http_post(target_endpoint, encrypted)
        
        return response
    
    def resolve_did(self, did: str) -> dict:
        """解析 DID 获取 DID Document"""
        # 在去中心化网络中查找 DID Document
        # 可以是区块链、DHT、DNS 等多种解析方式
        pass
    
    def sign(self, message: dict) -> str:
        """使用私钥对消息签名"""
        pass
    
    def encrypt(self, message: dict, public_key: str) -> bytes:
        """使用目标公钥加密消息"""
        pass

协商层:智能路由

class ANPRouter:
    """ANP 智能路由(概念性实现)"""
    
    def __init__(self):
        self.known_agents = {}  # DID -> 能力描述
    
    def discover_agents(
        self, 
        capability_query: str,
        min_trust_score: float = 0.8
    ) -> list[dict]:
        """
        发现具有特定能力的 Agent
        
        搜索策略:
        1. 本地缓存查找
        2. 已知邻居节点查询
        3. 全网广播(最后手段)
        """
        candidates = []
        
        for did, capability in self.known_agents.items():
            # 能力匹配
            if self._match_capability(capability, capability_query):
                # 信任过滤
                if capability.get("trust_score", 0) >= min_trust_score:
                    candidates.append({
                        "did": did,
                        "capability": capability,
                        "trust_score": capability["trust_score"],
                        "response_time": capability.get("response_time_ms", 999),
                    })
        
        # 按信任分数和响应时间排序
        candidates.sort(
            key=lambda x: (-x["trust_score"], x["response_time"])
        )
        
        return candidates
    
    def _match_capability(self, capability: dict, query: str) -> bool:
        """检查 Agent 能力是否匹配查询"""
        # 简化版:关键词匹配
        description = capability.get("description", "").lower()
        cap_names = [c["name"].lower() for c in capability.get("capabilities", [])]
        
        query_lower = query.lower()
        return (
            query_lower in description or
            any(query_lower in name for name in cap_names)
        )

MCP vs A2A vs ANP 三协议对比

三协议对比

维度MCPA2AANP
核心目标Agent ↔ 工具连接Agent ↔ Agent 协作大规模 Agent 组网
通信模式请求-响应任务委派 + 流式对等通信 + 路由
服务发现客户端主动连接中心化 Agent Card去中心化 DID + DHT
身份验证可选(通常无)Agent Card 声明DID 密码学验证
安全性依赖传输层JSON-RPC over HTTPS端到端加密 + 签名
扩展性单点连接小规模团队大规模网络
标准化Anthropic 主导Google 主导社区驱动
成熟度⭐⭐⭐⭐ 生产可用⭐⭐⭐ 逐步成熟⭐⭐ 早期阶段
适用场景工具/数据源接入多 Agent 工作流开放 Agent 生态

三协议的互补关系

在实际应用中,三种协议通常组合使用

  1. ANP 负责在开放网络中发现合适的 Agent
  2. A2A 负责协调多个 Agent 的任务协作
  3. MCP 负责每个 Agent 调用自己的工具

ANP 的应用场景

场景 1:跨组织 Agent 协作

公司 A 的客服 Agent
    ↕ (ANP 发现 + 身份验证)
公司 B 的物流 Agent
    ↕ (A2A 任务协作)
公司 C 的支付 Agent

场景:用户向公司 A 的客服咨询退货。客服 Agent 通过 ANP 
发现公司 B 的物流 Agent 查询物流状态,再通过公司 C 的
支付 Agent 处理退款——全程自动完成,无需人工干预。

场景 2:去中心化 Agent 市场

开发者发布 Agent → 注册 DID + 能力描述
                        ↓
用户描述需求 → ANP 路由器匹配最优 Agent
                        ↓
            自动协商定价、SLA、数据权限
                        ↓
              执行任务 → 自动结算

场景 3:物联网 Agent 网络

智能家居 Agent 集群:
  - 温控 Agent (DID: did:anp:hvac_001)
  - 照明 Agent (DID: did:anp:light_001)
  - 安防 Agent (DID: did:anp:security_001)
  - 能源 Agent (DID: did:anp:energy_001)

通过 ANP 组成自治网络,无需中央控制器:
  安防 Agent 检测到异常 → 通知照明 Agent 开灯
                       → 通知能源 Agent 进入警戒模式

当前进展与挑战

进展

  • ANP 社区已发布协议规范草案
  • 与 W3C DID 标准对齐
  • 多个开源实现正在开发中

主要挑战

挑战说明
性能DID 解析和加密通信增加延迟
信任机制如何在去中心化网络中建立可靠的信任评估
标准化尚未形成广泛共识的行业标准
生态建设需要足够多的 Agent 加入网络才能产生网络效应
隐私保护在能力发现和通信过程中如何保护隐私

🏭 生产实践

  • 当前阶段:ANP 仍处于早期阶段,生产环境建议以 MCP + A2A 为主
  • 关注动向:ANP 代表了 Agent 网络化的未来方向,值得持续关注
  • 渐进式采用:可以先在内部 Agent 网络中实验 DID 身份验证和去中心化服务发现
  • 安全优先:任何涉及跨组织 Agent 通信的场景,都应优先考虑身份验证和加密

下一节:15.4 Agent 间的消息传递与状态共享


参考文献

[1] ANP Community. Agent Network Protocol Specification[EB/OL]. 2025. https://github.com/agent-network-protocol/anp.

[2] W3C. Decentralized Identifiers (DIDs) v1.0[S]. 2022. https://www.w3.org/TR/did-core/.

[3] ANTHROPIC. Model Context Protocol specification[EB/OL]. 2024. https://spec.modelcontextprotocol.io/.

[4] GOOGLE. Agent-to-Agent (A2A) Protocol[EB/OL]. 2025. https://google.github.io/A2A/.