ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Agent Network Protocol(ANP)解析:智能体通信协议的核心机制与落地实践

Agent Network Protocol(ANP)解析:智能体通信协议的核心机制与落地实践

1. 为什么智能体之间需要一套专属的通信协议

过去两年,我陆续接触过不少多智能体协作的项目,从最简单的两个Agent互相调用工具,到十几个Agent分工完成一条完整任务链。几乎每一个项目在跑通Demo之后,都会撞上同一堵墙:Agent之间的通信方式太随意了。有人用HTTP直接传JSON,有人把消息塞进消息队列,有人干脆让Agent共享一个数据库读写状态。这些做法在封闭系统里勉强能用,一旦要跨团队、跨平台、跨厂商地让智能体互相发现和协作,问题就全暴露出来了。

这正是Agent Network Protocol(ANP)想要解决的核心问题。简单说,ANP是一套面向"智能体互联网"的通信协议草案,目标是让不同来源、不同框架、不同厂商构建的智能体,能够像网页之间通过HTTP互相访问那样,彼此发现、协商、交换能力并协同完成任务。它要做的不是又一个RPC框架,而是智能体世界的"通用语言"。

这篇文章适合三类人看:一是正在做多智能体系统的工程师,你大概率已经感受到了点对点集成的痛苦;二是做平台或基础设施的架构师,需要提前判断智能体互联的协议走向;三是对W3C DID、去中心化身份这些概念感兴趣,想看看它们怎么落到Agent场景里的开发者。我会把ANP的核心设计拆开讲清楚,包括它为什么这样设计、关键机制怎么运作、实际落地时会踩哪些坑,以及我自己在类似系统里积累的一些经验。

需要先说明的是,ANP目前还是草案阶段,很多细节在演进中。所以下面的内容,一部分来自协议本身的公开设计思路,一部分是我基于多年做分布式通信和Agent系统的经验做的合理推演。我会明确区分哪些是协议规定、哪些是工程实践中的补充判断,避免误导。

2. ANP要解决的三个根本问题:发现、描述与信任

在讲具体机制之前,得先把问题定义清楚。智能体互联不是简单地"能发消息"就行,它背后有三个层层递进的根本问题。理解这三层,后面所有的协议设计就都能对上号了。

2.1 发现问题:一个Agent怎么知道另一个Agent存在

传统微服务里,服务发现靠注册中心,比如Consul、Nacos,服务启动时注册自己的地址,调用方去查。但智能体互联网的场景不一样:你的Agent可能要和某个你根本不认识的、由另一家公司运营的Agent协作。这时候没有统一的注册中心,你连对方的存在都不知道,谈何调用。

ANP的思路是引入去中心化的标识与发现机制,这也是它和W3C DID(Decentralized Identifier,去中心化标识符)深度绑定的原因。每个Agent拥有一个DID作为全局唯一身份,这个DID可以解析出一个DID Document,里面包含该Agent的服务端点、公钥、支持的能力描述等信息。发现的过程,本质上就是"拿到对方DID,解析出DID Document,找到通信入口"。

我个人的判断是,这种设计借鉴了Web的URL+DNS思路,但比DNS更灵活,因为DID Document是可以携带丰富元数据的,不只是一个IP映射。

2.2 描述问题:Agent怎么表达"我能做什么"

就算找到了对方,你还得知道它能干什么、需要什么输入、会返回什么。这就是能力描述问题。传统做法是写死在文档里,或者靠OpenAPI这类接口描述规范。但Agent的能力是动态的、语义化的,用静态接口描述很难表达清楚。

ANP里Agent会发布一份能力描述(Capability Description),通常以结构化格式(类似JSON-LD)呈现,声明自己支持哪些任务类型、输入输出schema、调用约束、计费方式等。这样调用方可以在运行时动态读取并决定是否发起协作。这一点非常关键,因为它让"机器可读的协商"成为可能,而不需要人来读文档写对接代码。

2.3 信任问题:凭什么相信对方

跨组织协作最棘手的是信任。你的Agent把任务交给一个陌生Agent,怎么保证它不会乱来、不会泄露数据、不会收了钱不办事?ANP通过DID绑定的可验证凭证(Verifiable Credential,VC)来建立信任。Agent可以持有由权威方签发的凭证,证明自己的身份、资质、信誉等。交互时双方可以互相验证凭证,而不依赖某个中心化平台背书。

这三层问题——发现、描述、信任——构成了ANP的骨架。下面我逐个拆解它们的技术实现。

3. DID与可验证凭证:ANP身份层的落地细节

身份层是ANP最底层也最容易被低估的部分。很多人一上来就关注消息怎么传,结果做到一半发现身份没设计好,整个信任链是断的。我见过太多项目在身份这块返工,所以这里多花点篇幅。

3.1 DID Document里到底该放什么

一个Agent的DID Document,核心字段包括:id(DID本身)、verificationMethod(公钥及验证方法)、service(服务端点列表)、以及扩展的能力元数据。service字段是通信的入口,通常包含端点URL、协议类型、支持的传输方式。

这里有个实操经验:不要把能力描述全塞进DID Document。DID Document应该保持相对稳定,而能力是会频繁变化的。我的做法是DID Document里只放一个指向能力描述的URL,能力描述单独托管、独立更新。这样身份和能力的生命周期解耦,避免每次能力变更都要更新链上或分布式账本上的DID记录,成本和复杂度都低得多。

3.2 可验证凭证怎么用在Agent协作里

VC的典型用法是这样的:某权威机构(比如一个行业协会或平台)给Agent签发一张凭证,声明"该Agent通过了安全审计"或"该Agent具备处理医疗数据的资质"。凭证由签发方的私钥签名,验证方用签发方的公钥验证签名,从而确认凭证真实且未被篡改。

在ANP的协作流程里,两个Agent建立会话前可以先交换并验证VC。比如Agent A要委托Agent B处理敏感数据,A会要求B出示"数据合规"凭证,验证通过才继续。这套机制的好处是信任不依赖中心平台,而是依赖密码学签名和签发方的信誉。

注意:VC的验证涉及凭证状态检查(是否被吊销)。草案阶段这块还没有统一标准,实践中常见做法是定期拉取吊销列表,或者用状态位查询。做生产系统时一定要把吊销检查做进去,否则一张已失效的凭证还能继续用,安全形同虚设。

3.3 密钥管理的坑:别把私钥放在代码里

这是我最想强调的一点。DID体系的安全性完全建立在私钥保密上。我在实际项目里见过有人把Agent的私钥硬编码在配置文件里提交到代码仓库,这等于把身份拱手让人。正确做法是用密钥管理服务(KMS)或硬件安全模块(HSM)托管私钥,Agent运行时通过受控接口调用签名操作,私钥永远不出安全边界。

对于中小团队,如果暂时上不了HSM,至少要做到:私钥加密存储、访问权限最小化、密钥轮换机制、以及操作审计日志。这些是底线,不是可选项。

4. 消息传输与协商机制:ANP怎么把话说明白

身份解决了"你是谁",接下来是"你怎么说"。ANP的传输层设计有几个值得细说的点,尤其是它如何处理异构Agent之间的语义差异。

4.1 传输层选型:为什么不是简单的HTTP

ANP并不排斥HTTP,事实上大部分实现会基于HTTPS做传输,因为它的穿透性、成熟度和生态都最好。但ANP在HTTP之上定义了自己的消息封装格式,原因在于Agent通信有几个特殊需求:消息需要携带身份凭证、需要支持异步长任务、需要表达复杂的语义结构。

所以你会看到ANP的消息体通常是结构化的,包含发送方DID、接收方DID、消息类型、时间戳、签名、以及业务载荷。签名保证了消息的完整性和不可否认性。异步任务则通过回调端点或轮询机制处理,因为很多Agent任务(比如一次数据分析)耗时远超HTTP超时限制。

我个人的经验是,长任务一定要设计成异步+回调,不要让调用方一直挂着连接等结果。我早期做过一个同步等待的Agent调用,任务一复杂就超时,后来改成"提交任务返回taskId,完成后回调通知",稳定性提升非常明显。

4.2 能力协商:从"能调用"到"谈得拢"

协商机制是ANP比较有特色的部分。两个Agent在正式协作前,会先进行一轮能力协商:调用方说明自己的需求,被调用方回应自己能否满足、以什么条件满足。这个过程类似"握手",但协商的是语义层面的匹配,而不只是协议版本。

举个具体场景:Agent A需要"翻译一段中文到英文",它可能不知道Agent B支持哪些语言对。协商时A发送需求描述,B返回自己支持的语言对列表和计费,A确认后再正式发起任务。这种动态协商让系统能适应能力不断变化的开放环境。

协商阶段调用方动作被调用方动作关键产出
能力查询发送需求描述返回能力清单候选能力列表
条件确认确认输入输出与约束确认计费与SLA协作条款
会话建立发起正式任务接受并分配资源会话ID
结果交付接收结果并验证返回结果与凭证完成凭证

4.3 消息格式的兼容性处理

开放环境里,不同Agent可能用不同的消息schema。ANP的做法是定义核心消息信封(envelope)标准,业务载荷则允许自定义,通过类型标识和schema引用让接收方知道怎么解析。这有点像邮件的信封是标准的,但信的内容可以是任意格式。

实操中我建议:业务载荷尽量用广泛支持的格式,JSON是首选,需要强类型时用JSON Schema约束。避免用过于小众的序列化格式,否则对接方解析成本高,协作意愿就低。

5. 一个完整的Agent协作流程长什么样

光讲机制太抽象,我把一次典型的跨Agent协作从头到尾走一遍,你就能看清各层是怎么串起来的。假设场景是:用户让Agent A帮忙"分析一份销售数据并生成报告",A自己不会做数据分析,需要委托给专业的Agent B。

5.1 第一步:发现与解析

A首先需要找到能做数据分析的Agent。它可能通过一个Agent目录服务,或者从用户提供的DID直接拿到B的标识。拿到B的DID后,A解析B的DID Document,从中获取B的服务端点和能力描述URL。这一步对应第2章讲的"发现问题"。

解析DID Document时要注意缓存策略。DID Document相对稳定,可以缓存一段时间,但要有失效机制。我一般设置较短的缓存TTL(比如几分钟到几小时,视场景而定),并在验证失败时强制刷新,避免用到过期的端点信息。

5.2 第二步:身份验证与信任建立

A和B建立连接后,先互相验证身份。A验证B的DID签名,B验证A的DID签名。如果任务涉及敏感数据,A还会要求B出示相关VC。这一步是安全的基础,绝不能省。

提示:身份验证失败时的处理要明确。是直接拒绝,还是降级到受限模式?我的建议是默认拒绝,除非业务明确允许匿名或低信任协作。安全默认值应该是"不信任",而不是"信任"。

5.3 第三步:能力协商与任务委托

身份通过后,A读取B的能力描述,确认B支持"销售数据分析"任务,并了解输入格式要求。A按B的要求组织数据,发起任务委托。委托消息里包含任务类型、输入数据、期望输出格式、截止时间等。

这里有个细节:输入数据的格式一定要严格按对方schema来。我踩过的坑是,自己觉得"差不多"的JSON结构,对方解析时字段对不上直接报错。后来我养成了习惯,委托前先用对方的schema做一次本地校验,能省掉大量来回调试。

5.4 第四步:执行、回调与结果验证

B接受任务后异步执行,完成后通过回调通知A,或者A轮询任务状态。结果返回时,B通常会附带一个完成凭证(比如对结果内容的签名),A可以验证结果确实来自B且未被篡改。

结果验证这块,除了签名,还要做业务层面的校验:数据是否完整、格式是否符合约定、是否在合理范围内。密码学验证保证"没被篡改",业务校验保证"内容靠谱",两者缺一不可。

5.5 第五步:结算与信誉更新

如果协作涉及计费,这一步完成支付结算。同时,双方可以根据本次协作的体验更新对方的信誉记录。信誉体系是开放Agent网络能持续运转的关键,没有信誉,劣质Agent无法被淘汰,优质Agent得不到激励。

整个流程走下来,你会发现ANP的价值在于把这一长串步骤标准化了。没有标准时,每对接一个新Agent都要重新谈一遍这些细节;有了标准,大部分环节可以自动化。

6. 落地ANP时的现实挑战与应对思路

协议设计得再漂亮,落地时都会遇到现实问题。这一章我讲讲自己判断中最容易翻车的几个点,以及应对思路。

6.1 性能开销:密码学操作不是免费的

DID解析、签名验证、VC校验,每一个都是计算密集操作。在高频协作场景下,这些开销会累积成明显的延迟。我的经验是:对验证结果做合理缓存。比如某个Agent的DID Document验证过一次后,在有效期内可以复用验证结果,不必每条消息都重新解析验证。VC同理,验证通过后在有效期内缓存。

但缓存要小心吊销问题。凭证可能随时被吊销,缓存时间太长会用到失效凭证。折中方案是设置较短的缓存窗口,并配合吊销列表的定期同步。

6.2 互操作性:标准落地永远有"方言"

任何通信协议在落地时都会出现"方言"问题——大家都声称遵循标准,但实现细节各有偏差。ANP作为草案,这个问题会更突出。应对办法是:在项目早期就建立一致性测试,用一组标准测试用例验证不同实现的互操作性。别等到对接时才发现双方对某个字段的理解不一致。

我参与过的一个跨团队项目,就是靠一套共享的测试套件,把三个不同团队实现的Agent拉到同一水平线上。这套测试用例后来成了事实上的"方言词典"。

6.3 治理与信任锚点:去中心化不等于无治理

DID和VC听起来很去中心化,但现实中总需要一些信任锚点:谁有权签发"合规"凭证?凭证吊销由谁决定?这些治理问题不解决,信任体系就是空中楼阁。ANP草案里对治理着墨不多,这是落地时团队必须自己补上的部分。

我的建议是,初期不要追求完全去中心化,可以先在一个联盟内建立治理规则,由联盟成员共同认可的机构签发凭证。等生态成熟再逐步扩大。务实比理想主义更重要。

6.4 与现有系统的集成成本

大部分团队已经有现成的Agent系统和通信方式,全面切换到ANP成本很高。可行的路径是渐进式集成:先在新开发的Agent上采用ANP,同时用适配层把老系统包装成ANP兼容的端点。这样既享受新协议的好处,又不推翻现有投资。

适配层的核心工作是协议转换:把老系统的接口映射成ANP的能力描述和消息格式。这层做得好,老系统对ANP网络来说就是透明的。

7. 我对ANP这类协议走向的几点个人判断

做了这么多年分布式系统和Agent相关的工作,我对协议类的东西有个基本判断:协议的生命力不在于设计多优雅,而在于生态有多少人用。HTTP不是最优雅的协议,但它赢了,因为所有人都用它。

ANP目前还在草案阶段,它的成败取决于几个因素。第一是能否吸引足够多的实现者,形成网络效应。第二是治理机制能否建立起来,让参与者有信任基础。第三是能否找到杀手级应用场景,让协议的价值被直观感受到。跨组织的Agent协作如果能在某个垂直领域(比如供应链、科研协作)先跑通,会是很强的示范。

从技术角度,我认为ANP和W3C DID的结合是正确方向。去中心化身份是开放Agent网络的前提,没有它,信任只能靠中心平台,那就退回到平台割据的老路上了。但DID体系本身也在演进,ANP需要跟上DID标准的变化,这对协议的稳定性是个挑战。

最后分享一个我在实际做协议集成时的小技巧:永远先做最小可用的端到端打通,再考虑优化。我见过太多团队一上来就纠结性能、安全、治理的完美方案,结果几个月都没跑通一次完整协作。先用最简实现把两个Agent的发现、验证、协商、执行全流程走通,哪怕性能很差、安全很弱,你也能从中发现真正的问题在哪。跑通之后再逐层加固,效率高得多。

ANP这类协议现在还处在"跑通比完美重要"的阶段。等生态起来、实现多了,标准自然会收敛。作为从业者,现在入场做实现和验证,正是积累经验的好时机。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进