4 协议设计原则
🧭 4. 协议设计原则
每个成功的协议都有一组核心信念指导其技术决策——HTTP 的"无状态"让 Web 可以无限扩展,Markdown 的"可读性优先"让源文本即使不渲染也能阅读。ICP 同样遵循 6 条核心设计原则,它们共同定义了协议的技术哲学,并约束所有后续的设计选择。
原则一:注解式增强,而非替代
ICP 不替代自然语言,而是在自然语言之上叠加结构化注解。移除所有注解后,原始文本仍然完整可读。
这一原则源于章节 3 中"针对表述信息做标记"的方法论——我们参考 Markdown 使用特殊字符表示特定含义,参考 Java 注解原理解释和触发辅助功能。ICP 的注解是对自然语言的"圈点批注",而非对自然语言的改写或编码。
例如,用户说"帮我 !!今天下班前!! 把 项目周报 发给 @张三"。去掉所有注解标记后,这句话仍然是通顺的自然语言:"帮我今天下班前把项目周报发给张三"。但有了注解,系统可以识别出截止时间(优先级标记)、关键内容(强调标记)和接收人(人物引用标记),从而生成一个带有截止时间、附件和发送按钮的操作卡片。
这意味着:ICP 文档的最低降级形态就是纯文本,任何不支持 ICP 的系统都可以安全地忽略注解,只展示原始文字。
原则二:终端无关性
协议本身不假设任何特定终端的能力。ICP 只描述"是什么"(语义内容),不规定"怎么展示"(渲染方式)。
这一原则直接回应章节 3 中"不同终端人机界面差异很大"的问题。既然我们无法预知信息最终会在什么设备上呈现,协议就不应该绑定任何特定的展示形式。终端根据自身能力选择最佳呈现方式,不支持的注解可以安全忽略。
例如,同一份包含"报销单审核"语义的 ICP 文档:桌面端渲染为带有表格和附件预览的大屏界面;手机端只展示关键信息和两个按钮(通过/退回);智能音箱用语音念出摘要并等待语音确认;AR 眼镜在用户视野中浮现审批提示。四种终端,四种呈现,但语义完全一致。
原则三:语境显式化
所有影响理解的语境信息都应该被显式地附加到消息中。协议不依赖 AI 的"察言观色"能力来推断隐含意义。
这一原则源于章节 3 中"增加语境信息"的方法论,以及"中间语言是否必要"论证中的核心观点——AI 对环境的掌控力有限,AI 跟人可能没那么亲近。因此,我们选择稳妥的做法:宁可冗余,不可遗漏。
例如,用户说"在附近订一家 Marry 喜欢的餐厅"。如果只传递这句话,AI 不知道"附近"是哪里、Marry 是谁、预算多少。通过 ICP 的语境显式化,位置坐标、Marry 的用餐偏好、历史订单记录、预算范围等信息都被显式附加到消息中,AI 无需猜测即可精准理解。
原则四:渐进增强
最简单的 ICP 文档就是一条纯文本消息。注解、语境、渲染提示都是可选的增强层,实现者可以从最简单的支持开始,逐步增加能力。
这意味着入门门槛极低,天花板极高。一个只支持纯文本的系统已经是一个合法的 ICP 实现;随着能力增长,它可以逐步支持注解解析、语境管理、动态界面组装、跨终端协调等高级特性。
例如,一个 ICP 文档的渐进增强过程:
- 第一层(纯文本):
"帮我订明天下午的会议室"- 第二层(加注解):
"帮我订 [明天下午] 的 **会议室**"— 系统识别出时间和关键对象- 第三层(加语境):附加用户的日历信息、常用会议室偏好、参会人数
- 第四层(加渲染提示):指定以表单卡片形式展示可选会议室列表,按距离排序
原则五:向后兼容
新版本的协议必须能够处理旧版本的文档。未知的注解类型应该被安全忽略而不是导致错误。
协议的演进不会破坏已有的生态。这对于一个志在成为基础设施的协议至关重要——采用者需要确信,今天基于 ICP v1 构建的系统不会因为 v2 的发布而失效。
例如,一个 v2 解析器遇到 v1 文档时:v1 文档中不包含 v2 新增的
rendering_hint字段,解析器正常处理,使用默认渲染策略。反过来,一个 v1 解析器遇到 v2 文档时:v2 文档中包含 v1 不认识的visibility_marker注解类型,解析器保留原始文本内容,忽略未知注解,不中断处理流程。
原则六:开放互操作
ICP 不绑定任何特定的 AI 模型、平台或厂商。通过 skills 机制,ICP 与 MCP(Model Context Protocol)、A2A(Agent-to-Agent)、OpenAPI 等现有协议桥接互通。
ICP 是一个连接层,不是一个封闭生态。它的价值在于提供统一的人机交互语义描述,而具体的 AI 推理、工具调用、代理间通信则交给各自擅长的协议处理。
例如,一个 ICP 文档中可以通过
skills注册表声明:调用天气查询服务(通过 OpenAPI 绑定)、执行文件操作(通过 MCP 工具绑定)、请求另一个 AI 代理协助(通过 A2A 绑定)。ICP 负责描述交互语义和用户语境,具体的服务调用由对应的协议完成。
