• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
编写人生
写写代码,写写人生
博客园    首页    新随笔    联系   管理    订阅  订阅

面向 AI Agent 的能力模型与多协议生成架构设计思考

面向 AI Agent 的能力模型与多协议生成架构设计思考

1. 问题背景

随着 AI Agent 技术的发展,越来越多的业务系统开始面临一个新的问题:如何以统一且可持续的方式向 Agent 暴露自身能力。过去的软件系统主要面向人类开发者,因此通常通过 SDK、REST API、RPC 接口或命令行工具对外提供能力。然而在 Agent 时代,仅仅提供调用入口已经不足够,系统还需要让 Agent 理解自己具备哪些能力、这些能力适用于什么场景以及如何正确使用这些能力。

近年来,MCP(Model Context Protocol)的出现为 Agent 提供了一种标准化的能力发现机制。与此同时,OpenAI Tool Calling、A2A、LangChain Tool、Claude Skill 等方案也在不断发展。面对层出不穷的新标准,一个非常现实的问题开始出现:企业是否应该围绕某一种协议进行建设?如果今天全面拥抱 MCP,那么未来出现新的标准时是否又需要重新建设一套体系?

从长期维护角度来看,这种以协议为中心的设计存在明显风险。协议会演进,框架会迭代,Agent 产品也会不断变化,而企业真正需要保护的资产并不是这些协议本身,而是业务能力。因此,如何让业务能力脱离具体协议而独立存在,成为整个设计思考的出发点。

2. 从协议中心到能力中心

在许多系统中,架构设计往往从协议开始。例如系统首先决定提供 REST API,然后围绕 REST API 组织代码;或者首先决定建设 MCP Server,然后围绕 MCP Tool 构建能力。这种设计方式在系统规模较小时并没有明显问题,但随着能力数量增加,会逐渐暴露出耦合问题。

以日历系统为例,无论用户通过 MCP 创建会议、通过 CLI 创建会议、通过 SDK 创建会议,还是通过 Web 页面创建会议,其本质上调用的都是同一个业务能力——创建日历事件。协议不同,但业务能力并没有发生变化。如果系统内部始终围绕协议组织代码,那么每增加一种协议,就需要重复构建一套映射关系,最终导致系统维护成本不断上升。

因此,更合理的思路是将“能力”而非“协议”作为架构中心。对于日历系统而言,创建事件、查询事件、搜索事件、修改事件和删除事件等能力应当独立于任何具体协议存在。各种协议仅仅是能力的不同暴露方式,而不是能力本身。只有当能力模型成为系统唯一事实来源时,系统才能真正获得长期稳定性。

3. 对 MCP 的重新认识

在整个讨论过程中,一个重要认识是:MCP 的核心价值并不在于远程调用,而在于能力发现。

CLI、SDK、REST API 本质上都能够完成调用动作,但它们并不天然具备能力发现能力。对于 Agent 而言,仅仅知道某个命令存在并不足以理解其用途、参数以及适用场景。因此,传统 CLI 往往需要配套 Help 文档、Skill 文件或者示例代码。而 MCP 则通过标准化 Schema 将这些信息结构化表达出来,使 Agent 能够自动理解系统提供的能力。

然而这并不意味着 MCP 应当成为系统的核心。MCP 本质上仍然是一种协议,它解决的是能力如何被发现的问题,而不是能力如何被建模的问题。从这个角度来看,MCP 更像是一种能力出口,而不是能力模型本身。如果未来出现新的 Agent 标准,企业不应当因为协议变化而被迫重构业务系统。因此,MCP 应当被视为适配层,而不是架构中心。

4. 为什么 Protobuf 不应成为系统中心

在寻找统一能力模型的过程中,Protobuf 是一个非常自然的候选方案。它拥有成熟的生态、广泛的行业应用以及优秀的跨语言代码生成能力。通过 Protobuf 可以自动生成 Java、TypeScript、Python 等多种语言的客户端和服务端代码,同时还具备良好的版本兼容性管理能力。从工程角度来看,它几乎满足一个统一模型所需要的大部分条件。

然而进一步分析后可以发现,Protobuf 更适合作为工程契约,而不是能力模型。Protobuf 擅长表达的是接口、参数、返回值以及服务调用关系,它回答的是“如何调用”的问题。但 Agent 更关心的是“什么时候调用”“为什么调用”以及“调用是否安全”等问题。例如某个能力是否属于高风险操作、是否支持 Dry Run、是否需要用户确认、Agent 在什么场景下应当优先选择该能力,这些内容虽然可以通过扩展机制进行表达,但并不是 Protobuf 的设计目标。

因此,将 Protobuf 作为整个系统的中心会导致一个问题:越来越多与 Agent 相关的语义被强行塞入工程契约之中。随着时间推移,Proto 文件将逐渐承担过多职责。因此更合理的定位是将 Protobuf 视为能力模型生成出来的结果,而不是能力模型本身。

5. Capability DSL 的定位

既然能力模型不应直接建立在协议之上,也不应完全建立在 Protobuf 之上,那么系统需要一个更高层次的抽象来描述能力本身。经过讨论后,我们认为引入 Capability DSL 是一种合理的选择。

这里所说的 DSL 并不是新的编程语言,而是一种统一的能力描述模型。它负责描述能力名称、输入输出结构、权限要求、风险等级、示例用法以及各种协议映射关系。其核心目标是成为系统内部唯一的能力元数据来源。

采用这种设计后,业务开发人员关注的是能力本身,而不是各种协议细节。无论未来需要生成 MCP Tool、CLI 命令、REST API 还是 SDK,这些产物都来自同一个能力定义。这样既避免了重复维护多套描述信息,也为未来支持新的协议提供了扩展空间。

需要特别说明的是,Capability DSL 并不负责实现业务逻辑。业务逻辑仍然由开发人员通过正常代码完成。DSL 的职责仅仅是描述能力,而生成器则根据这些描述自动创建各种协议适配层和工程契约。

6. Contract First 的实现思路

在能力模型确定之后,下一个问题是如何组织业务代码。结合个人开发习惯以及企业级系统的长期维护需求,Contract First 是一种非常值得采用的模式。

在这种模式下,系统首先生成稳定的服务契约接口,然后由业务实现完成这些接口。例如对于日历能力,可以生成 CalendarService 接口,接口中定义创建事件、搜索事件和删除事件等方法。业务代码只需要关注接口实现,而不需要感知 MCP、REST 或 CLI 的存在。

这种设计最大的价值在于形成稳定边界。协议层、业务层以及部署方式都可以围绕这个边界独立演进。当系统需要新增一种协议时,只需要增加新的适配器即可;当业务实现需要重构时,只要保持契约不变,上层协议也无需修改。契约成为整个系统最重要的稳定点。

7. 自动生成的适配层架构

在传统系统中,协议适配层通常由开发人员手工编写。然而随着能力数量增加,这种方式会迅速变得难以维护。因此,一个重要设计原则是尽可能自动生成适配层。

以 MCP 为例,生成出来的 MCP Adapter 并不包含业务逻辑。它仅负责接收 MCP 请求、完成参数转换、调用服务契约接口并返回结果。从设计模式角度来看,这本质上是一个标准的 Adapter Pattern 实现。同样的思想也适用于 CLI、REST 以及未来可能出现的其他 Agent 协议。

由于所有适配层都来自同一个 Capability DSL,因此整个系统实际上只维护一套能力定义。当新增协议时,开发工作主要集中在生成器层,而不是业务层。这种模式能够显著降低系统长期演进成本。

8. 本地实现与远程实现的统一抽象

进一步思考后可以发现,即使契约已经稳定,能力的实现位置仍然可能发生变化。有些能力可能直接运行在当前进程中,而另一些能力则可能来自远程微服务、第三方系统甚至云平台。

因此,契约接口不应假设能力一定来自本地实现。更合理的方式是将契约视为能力访问抽象,而将具体实现隐藏在实现层内部。同一个接口既可以由本地实现完成,也可以由 RPC 客户端、REST 客户端甚至消息队列消费者实现。

这种设计带来的好处是协议与部署方式实现了彻底解耦。MCP Adapter、CLI Adapter 或 SDK 并不关心能力究竟运行在哪里,它们只依赖契约接口。对于调用方而言,本地能力与远程能力具有一致的使用方式,从而降低系统复杂度。

9. 推荐架构

综合上述分析,推荐采用以 Capability DSL 为中心的架构模型。开发人员首先通过代码注解或 DSL 描述业务能力,然后由代码生成器自动生成契约接口、工程契约以及各种协议适配层。生成出来的 Java Interface 成为业务层与协议层之间的稳定边界,而 Protobuf、OpenAPI 等则作为工程契约存在,为 SDK 生成和远程通信提供支持。

在该架构中,Capability DSL 是系统唯一事实来源;Contract Interface 是业务边界;Protobuf 和 OpenAPI 是工程契约;MCP、CLI、REST 以及未来的 Agent 协议都是自动生成的适配层。业务实现只依赖契约,而各种协议适配器也只依赖契约,从而形成清晰且稳定的架构层次。

对于 Java 生态而言,一个更加自然的落地方式是:首先根据 Capability DSL 生成 Java Interface,然后由业务系统实现这些接口;随后根据同一份 DSL 自动生成 MCP Adapter、CLI Adapter、Proto 文件以及其他工程契约。这样既符合 Contract First 的开发习惯,也能够充分利用现有生态提供的代码生成能力。

10. 总结与演进方向

整个设计思考最终指向一个核心结论:企业不应围绕 MCP、CLI 或 Protobuf 构建系统,而应围绕业务能力构建系统。协议会变化,框架会变化,Agent 标准也会变化,但业务能力本身通常具有更长的生命周期。因此,能力模型才是最值得长期投资和保护的资产。

从演进路线来看,一个较为现实的方案是以代码注解作为能力定义入口,以 Capability DSL 作为统一元模型,以 Contract Interface 作为业务边界,并通过自动代码生成构建 MCP、CLI、SDK、Proto 等各种适配层和工程契约。这样既能够充分利用现有成熟生态,又能够避免被某一种具体协议长期绑定。

从长期视角看,这种架构的真正价值并不在于今天支持了多少协议,而在于未来当新的 Agent 标准出现时,企业能够以最低成本接入新的生态,而无需重新设计自己的业务系统。

posted on 2026-06-09 08:57  编写人生  阅读(11)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3