生产级 Agent 框架的护城河之一,模型适配与协议兼容
用 Go 写生产级 Agent 框架 Covonaut 以来,我愈发觉得对于一个 Agent 框架来说,对外兼容的能力是非常非常重要的。
这里所说的“对外兼容”,核心是指两个维度:模型厂商适配与 Agent 通信协议。经过反复打磨,我想把 Covonaut 目前在这两个维度上的覆盖程度与设计思考,做一次系统性的梳理。
模型适配抹平差异框架最底层的能力是将各家模型迥异的 API 映射为 Covonaut 内部统一的请求与响应范式。目前应实现七类主流 Provider 协议:
OpenAI 兼容系:这是覆盖面最广的一层。DeepSeek、Qwen、Moonshot、Grok 等均可无缝接入。同时实现了 Chat Completions (/v1/chat/completions) 与新版 Responses (/v1/responses) 两套协议,通过配置项一键切换,且两者的流式输出与工具调用均已完整适配。原生协议系:包括 Anthropic、Gemini、AWS Bedrock、GCP Vertex、GitHub Copilot 及 Mistral 等协议。所有 Provider 均统一了 SSE 流式输出格式与 Token 用量上报机制,业务层代码与具体模型彻底解耦,更换模型厂商时,只需替换 Provider 实例,上层逻辑无需任何改动。
这背后的工程量远超想象,Gemini 的原生 generateContent、Anthropic 的 adaptive thinking 模式、Bedrock 的 Converse API,不仅字段命名各异,连数据结构的语义都对不上。要将它们规整为同一套内部表示,无法靠简单的条件分支取巧,每一个 Provider 都是一份独立的、深度的适配工作。
Agent 协议适配如果说模型适配解决了“调谁”的问题,那么通信协议解决的就是“Agent 如何与外界对话”。Covonaut 特意实现了四种协议,分别对应四种截然不同的交互场景:
A2A(Agent-to-Agent)是 Agent 之间互相调用的标准,支持与 Google ADK 的 Agent 互操作,涵盖了 Agent Card 发现、任务生命周期管理、同步与流式通信以及 WebSocket 传输,解决的是跨 Agent 协作的问题。ACP(Agent Client Protocol,Zed 提出的、编辑器与 Agent 之间的 JSON-RPC 标准),主要做 session 维度的 Agent 生命周期管理,比如加载会话、发起一轮 prompt、取消执行。AG-UI(Agent-User Interaction Protocol,开源事件协议,基于 SSE,把 Agent 的执行过程实时推到 Web 前端。A2UI(Agent-to-UI)负责让 Agent 直接生成界面,是一个声明式 UI 协议,支持表单、仪表盘、实时流的客户端渲染,包含数据绑定与校验,解决的是“界面长什么样”的问题。之所以要实现这四种协议,是因为 Agent 不应是封闭在进程内的孤岛。它既要能被外部服务灵活调度,也要能直接向用户呈现交互界面。A2A、ACP、AG-UI、A2UI 各司其职,共同补齐了 Agent 从后端协作到前端渲染的完整链路。
写在最后做了生产级框架 Covonaut 后,我越来越觉得对外兼容能力本身就是护城河。模型厂商和 Agent 协议都还在剧烈演进中,能接得全、接得稳、接得优雅是非常重要的。
生产级 Agent 框架的护城河之一,模型适配与协议兼容
生产级 Agent 框架的护城河之一,模型适配与协议兼容
用 Go 写生产级 Agent 框架 Covonaut 以来,
阅读:12
点赞:0