1. 项目概述:当智能体需要“安全对话”
最近在折腾多智能体系统时,我遇到了一个典型痛点:手头有几个不同团队开发的智能体,有的用Python写的,有的基于Rust,还有的跑在云端容器里。它们各自为战时都挺能干,但一旦想让它们协作完成一个跨链数据查询、分析并生成报告的任务,问题就来了。通信协议五花八门,身份谁都不认谁,执行结果更是“公说公有理,婆说婆有理”,没法验证。这场景,是不是像极了早期互联网上各种私有网络协议林立、无法互通的混乱年代?
这正是“智能体互联网”从概念走向落地必须跨越的鸿沟。我们需要的不是又一个封闭的智能体平台,而是一套能让异构智能体像在互联网上一样,安全、可信、自由协作的“通用语言”和“交通规则”。我深入研究和实践了InterSAGE这套协议,它瞄准的正是这个核心问题——为智能体互联网提供一个安全且可验证的互操作性协议。
简单来说,InterSAGE试图成为智能体世界的“TCP/IP+HTTPS+数字签名”融合体。它不关心单个智能体内部有多聪明,只专注于定义智能体之间如何安全地“握手”、如何可靠地“对话”、以及如何让第三方无可辩驳地“审计”这场对话的真实性与结果。这听起来像是基础架构,但恰恰是决定智能体生态能否繁荣的关键。没有安全,协作就是裸奔;没有可验证性,协作就缺乏信任基石。
接下来,我会结合自己的实践,拆解InterSAGE的设计思路、核心机制,并分享在模拟环境中搭建和测试这套协议的关键步骤与踩坑记录。无论你是智能体系统架构师,还是对分布式系统安全感兴趣的开发者,相信这些内容都能给你带来直接参考。
2. 协议核心设计思路与架构拆解
InterSAGE的命名本身就蕴含了其设计哲学:Interoperability(互操作性)、Secure(安全)、Attestable(可验证)、GlobalEcosystem(全球生态)。它不是某个具体算法的实现,而是一套分层的协议规范。理解它的架构,是理解其如何工作的第一步。
2.1 分层模型:从通信到信任的递进
InterSAGE采用了清晰的分层模型,这借鉴了经典网络协议栈的思想,但每一层都注入了针对智能体协作的特殊考量。
第一层:传输与发现层这一层解决智能体“如何找到彼此并建立连接”的基础问题。InterSAGE协议本身不强制绑定于某一种网络传输协议(如gRPC、WebSocket、HTTP/3),而是定义了一套抽象的寻址与发现接口。智能体可以通过去中心化的标识符(DID)进行寻址,并通过一个可插拔的“注册中心”或“目录服务”来发现其他智能体的网络端点和服务能力描述。这里的关键是,发现过程本身也需要被保护,协议建议使用基于区块链或可信执行环境的去中心化身份注册表,防止恶意节点提供虚假的端点信息。
第二层:会话与消息层连接建立后,智能体间需要交换结构化的消息。这一层定义了统一的信封格式。每个消息信封至少包含:
- 发送者DID:唯一且可验证的身份标识。
- 接收者DID:目标智能体标识。
- 消息ID:全局唯一的消息标识符,用于防重放和追踪。
- 协议版本:指明使用的InterSAGE协议版本。
- 负载类型:描述消息体内数据的格式(如JSON Schema的URI)。
- 时间戳:消息创建时间。
- 数字签名:发送者对信封头部(不含负载)的签名,用于身份认证和完整性校验。
消息体(负载)本身是协议无关的,由上层应用定义。这种设计将通用的安全元数据与业务数据分离,既保证了安全基线,又保持了业务灵活性。
第三层:安全与验证层这是InterSAGE的核心。安全不是单一功能,而是一组贯穿始终的机制:
- 双向身份认证:连接建立时,双方智能体必须交换并验证基于其DID的证书或证明,确保“你声称的你,就是真实的你”。这通常通过相互验证数字签名来实现。
- 端到端加密:消息层的信封签名保证了消息来源和头部的完整性,但负载的机密性需要额外保障。InterSAGE推荐对消息负载进行端到端加密,密钥交换机制可以集成如ML-KEM等后量子密码算法,以应对未来的安全威胁。
- 可验证执行凭证:这是“可验证性”的关键。当一个智能体完成一项任务(例如,处理了一段数据、调用了一个外部API),它需要生成一个“执行凭证”。这个凭证不是简单的结果输出,而是一个密码学证明,证明:“在给定的输入和公开的代码/逻辑下,我确实产出了这个结果,且执行过程符合预期”。这可以通过零知识证明、可信执行环境远程证明等技术来实现。
第四层:语义与协作层在最顶层,InterSAGE定义了一套用于描述智能体“能力”和“协作意图”的元数据格式。这类似于Web Service中的WSDL或OpenAPI Specification,但更轻量、更动态。智能体可以对外宣告:“我能处理自然语言查询”、“我能访问某数据库并执行SQL”、“我能在满足条件时触发某个动作”。协作时,智能体间可以通过协商,基于这些语义描述自动组合任务流。
2.2 为什么是“协议”而非“平台”?
这是InterSAGE一个至关重要的设计选择。它不提供一个中心化的运行时环境或调度平台,而是定义一套开放标准。这样做的优势显而易见:
- 避免供应商锁定:任何团队都可以按照协议规范实现自己的智能体,无需依赖特定厂商的生态系统。
- 促进异构集成:用Go写的智能体、用Java写的智能体、甚至硬件嵌入式智能体,只要遵循相同的通信和安全规范,就能互操作。
- 专注核心价值:协议只解决“安全互操作”这个共性问题,将智能体的“智能”本身(用什么AI模型、内部逻辑如何)完全留给开发者。
这种设计也带来了挑战,主要是实现的复杂性和一致性测试。但长远看,这是构建真正开放生态的必由之路。
3. 核心安全机制深度解析
安全是InterSAGE的基石。它不仅仅是“加密通信”,而是一个立体的信任框架。我们来深入看看几个关键机制是如何工作的。
3.1 基于去中心化标识的身份系统
智能体不能再用IP地址或随机字符串来标识。InterSAGE强烈建议采用W3C的去中心化标识符标准。一个DID可能看起来像这样:did:key:z6Mkf5rGM...或did:web:example.com:agent:alice。每个DID都对应一个DID文档,文档中包含用于验证的公钥列表、服务端点等。
实操要点:
- 密钥管理:智能体必须安全地保管与其DID关联的私钥。对于高安全场景,应考虑使用硬件安全模块或可信执行环境来保护私钥,防止泄露。
- DID解析:协议需要实现一个DID解析器,能够根据DID字符串获取到对应的DID文档。解析器本身需要是可信的,或者通过去中心化网络(如区块链)来保证文档不可篡改。
注意:不要自己发明一套身份系统。拥抱现有标准(如DID),能极大降低集成复杂度和提升互操作性。在测试中,我使用了
did:key方法生成Ed25519密钥对,它足够轻量,适合初期开发。
3.2 可验证执行与凭证生成
这是实现“可信协作”的魔法所在。假设智能体A委托智能体B处理敏感数据,A如何相信B没有篡改数据或执行了恶意代码?
方案一:基于可信执行环境的远程证明如果智能体B运行在支持TEE(如Intel SGX, AMD SEV)的环境中,它可以生成一个由硬件背书的“证明报告”。这个报告密码学地证明了:1) 代码确实运行在真实的TEE内;2) 运行的代码度量(哈希值)与预期一致;3) 运行时的内存状态未被篡改。智能体A在收到B的结果和这份报告后,可以将其发送给硬件厂商的验证服务进行验证。InterSAGE协议需要定义如何封装和传递这种证明报告。
方案二:基于零知识证明的逻辑验证对于某些确定性或可形式化验证的任务,可以让智能体B在输出结果的同时,生成一个零知识证明。这个证明能向验证者(智能体A或第三方审计者)表明:“我知道一个秘密输入(或执行路径),使得公开的验证函数在公开的输入下,能输出公开的结果,但我不会泄露秘密信息本身。”这对于保护隐私的同时验证计算正确性非常有用,但生成证明的计算开销通常较大。
方案三:基于预言机与共识的见证对于涉及外部数据源或难以完全形式化的任务,可以引入一组“见证者”智能体。它们独立执行或验证同一任务,通过共识机制(如多数决)来确定最终结果。每个见证者都需要对各自的结论签名。InterSAGE可以定义这种多方见证的交互流程和凭证格式。
在实际项目中,我们需要根据任务的计算类型、性能要求和安全等级来混合使用这些方案。例如,对金融交易进行合规检查,可能采用TEE方案;对隐私数据进行聚合统计,可能采用ZK证明。
3.3 安全通信信道建立流程
让我们看一个典型的握手流程,它融合了身份认证和密钥协商:
- 发起连接:智能体A向智能体B的已知端点发起连接请求,附带自己的DID (
did:A)。 - 挑战-响应:B生成一个随机数(Nonce),发送给A,作为挑战。
- 身份证明:A用自己的私钥对
(did:A + did:B + Nonce)进行签名,将签名和自己的DID文档(或其中公钥的引用)发送给B。 - 验证与回应:B通过A的DID解析公钥,验证签名。验证通过后,B也用自己的私钥对
(did:B + did:A + Nonce)签名,并将签名发送给A。 - 密钥协商:双向认证通过后,双方利用彼此DID文档中支持的密钥协商算法(如X25519)计算出一个共享秘密。这个秘密用于派生后续会话的对称加密密钥。
- 安全会话:此后所有消息,使用会话密钥对负载进行加密,并对消息信封进行签名。
这个过程确保了通信的前向保密性(每次会话密钥不同)和双向身份认证。
4. 协议实现与实操部署指南
理论说得再多,不如动手跑通。下面我以构建两个简单的Python智能体(一个任务发布者,一个任务执行者)为例,演示如何实现InterSAGE核心协议的一个最小可行子集。
4.1 环境准备与依赖安装
我们首先需要一个能进行密码学操作和网络通信的环境。
# 创建项目目录 mkdir intersage-demo && cd intersage-demo python -m venv venv source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows # 安装核心依赖 pip install cryptography==41.0.7 # 用于签名、加密、密钥生成 pip install pydantic==2.5.3 # 用于数据验证和序列化 pip install aiohttp==3.9.3 # 用于异步HTTP通信(作为传输层示例) pip install uvicorn==0.27.1 # 用于运行ASGI服务器这里选择cryptography是因为它是一个经过广泛审计、维护良好的底层密码学库。aiohttp提供了异步HTTP能力,适合高并发的智能体通信。当然,你也可以根据智能体的主要技术栈替换为grpcio或websockets。
4.2 定义核心数据模型
根据协议分层,我们先定义消息信封和基础结构。
# models.py from pydantic import BaseModel, Field from typing import Any, Optional from datetime import datetime import uuid class DID(BaseModel): """简化版DID表示,实际应支持完整解析""" method: str # e.g., "key", "web" identifier: str class AgentIdentity(BaseModel): did: DID public_key_pem: str # PEM格式的公钥 service_endpoint: str # 智能体的网络地址 class MessageEnvelope(BaseModel): """InterSAGE 消息信封""" msg_id: str = Field(default_factory=lambda: str(uuid.uuid4())) from_did: DID to_did: DID protocol_version: str = "intersage-0.1.0" payload_type: str # 例如 "application/json+task-request" created_time: datetime = Field(default_factory=datetime.utcnow) signature: Optional[str] = None # 对信封头部的签名,Base64编码 # 此方法用于获取待签名的数据,通常是不包含`signature`字段的字典的规范JSON字符串 def get_signing_data(self) -> bytes: data_dict = self.dict(exclude={'signature'}) # 确保时间格式一致 data_dict['created_time'] = data_dict['created_time'].isoformat() + 'Z' # 排序键以保证确定性 sorted_json = json.dumps(data_dict, sort_keys=True, separators=(',', ':')) return sorted_json.encode('utf-8') class EncryptedPayload(BaseModel): """加密后的负载容器""" ciphertext: str # Base64编码的密文 iv: str # 初始化向量,Base64编码 tag: str # 认证标签(如使用AEAD算法),Base64编码 class TaskRequestPayload(BaseModel): """示例业务负载:任务请求""" task_id: str action: str parameters: dict[str, Any] max_execution_time: int4.3 实现密码学工具类
安全操作需要集中管理。
# crypto_utils.py from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import ed25519, x25519 from cryptography.hazmat.primitives.kdf.hkdf import HKDF from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305 import base64 import os class CryptoManager: def __init__(self): # 生成Ed25519密钥对,用于签名 self._signing_private_key = ed25519.Ed25519PrivateKey.generate() self.signing_public_key = self._signing_private_key.public_key() # 生成X25519密钥对,用于密钥协商 self._exchange_private_key = x25519.X25519PrivateKey.generate() self.exchange_public_key = self._exchange_private_key.public_key() def get_did(self) -> str: """从公钥生成一个简单的did:key标识符(简化版)""" pub_bytes = self.signing_public_key.public_bytes( encoding=serialization.Encoding.Raw, format=serialization.PublicFormat.Raw ) # 实际did:key编码更复杂,此处简化 b64_key = base64.urlsafe_b64encode(pub_bytes).decode('utf-8').rstrip('=') return f"did:key:z{ b64_key[:8]}" # 示意 def sign_message(self, message: bytes) -> str: """签名消息,返回Base64编码的签名""" signature = self._signing_private_key.sign(message) return base64.b64encode(signature).decode('utf-8') def verify_signature(self, public_key_pem: str, message: bytes, signature_b64: str) -> bool: """验证签名""" try: # 这里简化处理,实际应从DID文档解析公钥 pub_key = serialization.load_pem_public_key(public_key_pem.encode()) if not isinstance(pub_key, ed25519.Ed25519PublicKey): return False signature = base64.b64decode(signature_b64) pub_key.verify(signature, message) return True except Exception: return False def perform_key_exchange(self, peer_public_key: x25519.X25519PublicKey) -> bytes: """执行X25519密钥协商,返回共享密钥""" shared_key = self._exchange_private_key.exchange(peer_public_key) # 使用HKDF从共享密钥派生出一个强密钥 derived_key = HKDF( algorithm=hashes.SHA256(), length=32, salt=None, info=b'intersage-session-key', ).derive(shared_key) return derived_key @staticmethod def encrypt_payload(key: bytes, plaintext: str) -> EncryptedPayload: """使用ChaCha20-Poly1305加密负载""" chacha = ChaCha20Poly1305(key) iv = os.urandom(12) # 96-bit IV ciphertext_with_tag = chacha.encrypt(iv, plaintext.encode(), None) # 分离密文和认证标签(ChaCha20Poly1305加密后附加了16字节的tag) ciphertext = ciphertext_with_tag[:-16] tag = ciphertext_with_tag[-16:] return EncryptedPayload( ciphertext=base64.b64encode(ciphertext).decode(), iv=base64.b64encode(iv).decode(), tag=base64.b64encode(tag).decode() ) @staticmethod def decrypt_payload(key: bytes, encrypted: EncryptedPayload) -> str: """解密负载""" chacha = ChaCha20Poly1305(key) ciphertext = base64.b64decode(encrypted.ciphertext) iv = base64.b64decode(encrypted.iv) tag = base64.b64decode(encrypted.tag) ciphertext_with_tag = ciphertext + tag plaintext_bytes = chacha.decrypt(iv, ciphertext_with_tag, None) return plaintext_bytes.decode()4.4 构建任务执行者智能体
这个智能体将提供一个HTTP端点,接收InterSAGE格式的消息,验证签名,执行任务,并返回签名响应。
# executor_agent.py import asyncio from aiohttp import web import json from models import MessageEnvelope, DID, TaskRequestPayload, EncryptedPayload from crypto_utils import CryptoManager class ExecutorAgent: def __init__(self, host='localhost', port=8081): self.crypto = CryptoManager() self.identity_did = self.crypto.get_did() self.host = host self.port = port self.session_keys = {} # 缓存会话密钥,key为发送方DID print(f"Executor Agent DID: {self.identity_did}") print(f"Public Endpoint: http://{host}:{port}/api/v1/message") async def handle_incoming_message(self, request): """处理收到的InterSAGE消息""" try: data = await request.json() envelope = MessageEnvelope(**data) # 1. 基础验证 if envelope.to_did.identifier not in self.identity_did: return web.json_response({"error": "DID mismatch"}, status=400) # 2. 验证签名(此处简化,应通过DID解析获取发送者公钥) # 假设我们有一个可信的已知发送者列表 known_sender_public_key_pem = "..." # 应从可信源获取 signing_data = envelope.get_signing_data() if not self.crypto.verify_signature(known_sender_public_key_pem, signing_data, envelope.signature): return web.json_response({"error": "Invalid signature"}, status=401) # 3. 处理负载(示例中假设负载已解密) # 实际场景中,envelope可能包含一个`encrypted_payload`字段 payload_data = data.get("payload", {}) task_request = TaskRequestPayload(**payload_data) # 4. 执行任务(模拟) print(f"[Executor] Received task: {task_request.action} with params {task_request.parameters}") result = {"status": "completed", "result": f"Processed {task_request.action}", "task_id": task_request.task_id} # 5. 构造并签名响应信封 response_envelope = MessageEnvelope( from_did=DID(method="key", identifier=self.identity_did.split(":")[-1]), to_did=envelope.from_did, payload_type="application/json+task-response" ) response_envelope.signature = self.crypto.sign_message(response_envelope.get_signing_data()) response_data = { "envelope": response_envelope.dict(), "payload": result } return web.json_response(response_data) except Exception as e: print(f"[Executor] Error processing message: {e}") return web.json_response({"error": "Internal server error"}, status=500) async def run(self): """启动智能体HTTP服务器""" app = web.Application() app.router.add_post('/api/v1/message', self.handle_incoming_message) runner = web.AppRunner(app) await runner.setup() site = web.TCPSite(runner, self.host, self.port) await site.start() print(f"Executor agent running on {self.host}:{self.port}") # 保持运行 await asyncio.Event().wait() if __name__ == '__main__': agent = ExecutorAgent() asyncio.run(agent.run())4.5 构建任务发布者智能体
这个智能体主动向执行者发送任务请求。
# publisher_agent.py import aiohttp import asyncio import json from models import MessageEnvelope, DID, TaskRequestPayload from crypto_utils import CryptoManager class PublisherAgent: def __init__(self, executor_endpoint: str): self.crypto = CryptoManager() self.identity_did = self.crypto.get_did() self.executor_endpoint = executor_endpoint # e.g., "http://localhost:8081/api/v1/message" self.executor_public_key_pem = None # 应预先从可信源获取 print(f"Publisher Agent DID: {self.identity_did}") async def send_task_request(self, task_action: str, task_params: dict): """发送一个任务请求到执行者智能体""" # 1. 构造业务负载 task_payload = TaskRequestPayload( task_id="task_001", action=task_action, parameters=task_params, max_execution_time=30 ) # 2. 构造消息信封 # 假设我们知道执行者的DID executor_did = DID(method="key", identifier="zFakeExecutorKey123") envelope = MessageEnvelope( from_did=DID(method="key", identifier=self.identity_did.split(":")[-1]), to_did=executor_did, payload_type="application/json+task-request" ) # 3. 签名信封 envelope.signature = self.crypto.sign_message(envelope.get_signing_data()) # 4. 准备发送数据 message_data = { "envelope": envelope.dict(), "payload": task_payload.dict() } # 5. 发送HTTP请求 async with aiohttp.ClientSession() as session: try: async with session.post(self.executor_endpoint, json=message_data) as resp: if resp.status == 200: response = await resp.json() print(f"[Publisher] Task sent successfully. Response: {response}") # 这里应验证响应签名 else: error_text = await resp.text() print(f"[Publisher] Failed to send task. Status: {resp.status}, Error: {error_text}") except Exception as e: print(f"[Publisher] Network error: {e}") async def main(): publisher = PublisherAgent("http://localhost:8081/api/v1/message") # 发送一个示例任务 await publisher.send_task_request( task_action="data_analysis", task_params={"dataset": "sales_q1", "operation": "sum"} ) if __name__ == '__main__': asyncio.run(main())4.6 运行与测试
- 首先在一个终端启动执行者智能体:
python executor_agent.py - 然后在另一个终端运行发布者智能体:
python publisher_agent.py
如果一切正常,你将在执行者的控制台看到任务接收日志,在发布者控制台看到成功响应。这演示了最基本的身份签名验证和结构化消息交换。要构建完整的InterSAGE协议栈,你还需要在此基础上实现DID解析、完整的密钥协商与端到端加密、可验证执行凭证的生成与验证等。
5. 常见问题、挑战与实战心得
在实际构建和测试这类协议时,会遇到不少教科书上不会提的问题。下面是我踩过的一些坑和总结的经验。
5.1 密钥管理与轮换问题
问题:智能体的私钥是安全的核心。如果私钥泄露,所有基于此密钥的身份和签名都将失效。如何安全地存储、使用和轮换私钥?
解决方案与心得:
- 存储:对于生产环境,绝对不要将私钥硬编码在代码或配置文件中。使用专门的密钥管理服务,如云服务商的KMS、HashiCorp Vault,或利用硬件安全模块。在容器化部署中,可以通过安全卷挂载或运行时注入的方式提供密钥。
- 轮换:DID文档支持多公钥,并可以标记其状态(如
active,revoked)。应定期(如每季度)生成新的密钥对,将新公钥添加到DID文档,并逐步将旧密钥状态更新为revoked。协议需要支持在会话中声明所使用的公钥ID,以便接收方选择正确的密钥验证。 - 实操技巧:在开发测试阶段,可以使用环境变量来传递密钥文件路径或密钥内容。使用
python-dotenv管理本地环境变量是个好习惯。同时,为每个智能体实例生成唯一的DID和密钥,即使是在测试中,这有助于模拟真实的分布式环境。
5.2 可验证执行凭证的性能瓶颈
问题:无论是TEE远程证明还是ZK证明,生成和验证凭证都会带来显著的开销,可能从几十毫秒到数分钟不等,这对于需要低延迟交互的智能体协作是致命的。
权衡与优化策略:
- 分级验证:不是所有任务都需要最高级别的验证。可以设计一个“信任等级”体系。例如:
任务风险等级 建议验证机制 适用场景 低 仅数字签名 内部可信网络、非关键数据查询 中 签名 + 轻量级共识(2/3见证) 跨组织数据交换、一般性计算 高 签名 + TEE证明/ZK证明 金融交易、隐私数据计算、关键决策 - 异步验证与缓存:对于非实时性要求的结果,可以采用“先交付,后验证”的模式。智能体先返回结果和一个“承诺”,验证凭证在后台异步生成和提交。同时,对于频繁执行的相同任务,其凭证可以被缓存和复用一段时间。
- 硬件加速:对于ZK证明,考虑使用GPU或专用硬件加速器来加速证明生成过程。一些新的TEE技术也在不断降低证明开销。
注意:不要为了“可验证”而牺牲所有性能。在设计智能体协作流程时,必须将验证成本作为一项关键架构考量,根据业务需求选择最经济的安全方案。
5.3 协议版本兼容性与升级
问题:InterSAGE协议本身会演进。当网络中同时存在支持v0.1和v0.2的智能体时,如何保证互操作性?
向后兼容性设计:
- 版本声明:消息信封中的
protocol_version字段必须存在。接收方应能识别自己支持的版本范围。 - 能力协商:在连接握手阶段,除了身份认证,还应交换双方支持的协议版本、加密套件、负载类型等能力列表。通信应使用双方都支持的最高版本或协商一致的版本。
- 优雅降级:如果新版本引入了必需特性而旧版本不支持,应明确拒绝连接并给出错误原因,而不是尝试不兼容的通信,这会导致不可预知的行为。
- 弃用与过渡期:在协议规范中明确标记已弃用的字段或功能,并设定一个足够长的过渡期,让生态中的智能体逐步升级。
5.4 网络与传输层的现实挑战
问题:智能体可能位于NAT之后、防火墙内,或使用不稳定的移动网络。标准的客户端-服务器模型可能不适用。
应对方案:
- 中继与打洞:借鉴WebRTC等P2P技术,引入中继服务器帮助智能体建立直接连接。对于无法直连的情况,中继可以转发消息,但协议应确保中继无法解密端到端加密的负载。
- 异步消息队列:对于离线或间歇性在线的智能体,可以采用消息队列(如RabbitMQ, Kafka)作为传输层。InterSAGE消息作为队列中的有效负载。这要求智能体具备从队列拉取消息并处理的能力。
- 连接保持与重试:实现健壮的重试机制和心跳保活。在会话层设计连接状态恢复机制,避免因短暂网络中断而重新进行完整的昂贵认证流程。
实现InterSAGE这样的协议,是一个在安全性、性能、复杂性和互操作性之间不断权衡的过程。从最小可验证原型开始,逐步添加如密钥协商、负载加密、凭证生成等特性,是稳妥的推进方式。最重要的是,始终以“开放标准”和“可验证信任”为核心思想来指导设计决策,这才能让智能体互联网真正走向开放和繁荣。