跳到主要内容

语义坍塌:为什么微服务架构会让 AI Agent 困惑以及如何修复

· 阅读需 8 分钟

引言

过去十年,为了帮助团队规模化协作,我们将单体应用拆解为微服务。现在,当我们试图将 AI Agent(智能体)部署到同样的基础设施上时,它们却遭遇了滑铁卢。

对于人类架构师而言,微服务架构图代表了清晰的关注点分离(Separation of Concerns)——支付服务处理交易,用户服务处理个人资料。然而,对于通过 API 消费这些服务的 AI Agent 来说,这种架构往往看起来像是一袋没有说明书的散乱工具。

这种现象被称为语义坍塌(Semantic Collapse):当系统被碎片化为纯技术接口时,高层业务意图随之丢失。人类可以通过文档、部落知识(Tribal Knowledge)和架构图来填补这些空白,但 AI Agent 只能面对着列有 500 个端点的扁平列表,无法领悟到必须先成功执行 GET /inventory 检查,才能发起 POST /order

本文将探讨为什么传统的接口设计阻碍了 AI 理解业务全貌,以及从模型上下文协议(MCP)到 JitAI 的 JAAP 等新范式,正如何尝试为 AI 时代重建“系统结构”。

问题所在:AI 看到的是语法,而非语义

在典型的企业环境中,业务逻辑是隐含的。它存在于前端应用的“胶水代码(Glue Code)”中,或者后端服务前端(BFF)的编排逻辑里。微服务本身往往是无状态且“哑”的。

当你要求一个 AI Agent “如果上一笔订单未发货,则为用户退款”时,AI 必须:

  1. 在向量数据库中搜索相关工具。
  2. 检索庞大的 OpenAPI 规范。
  3. 猜测调用顺序(GET /ordersGET /shipping-statusPOST /refund)。

为什么微服务会困扰 Agent

  • 上下文碎片化(Context Fragmentation):“客户”实体被分割在认证服务(凭证)、计费服务(信用卡)和 CRM 服务(历史记录)中。AI 必须通过 API 调用在“脑中”对这些表进行“Join”操作,这极易导致幻觉。
  • 无状态失忆(Stateless Amnesia):API 设计初衷是无状态的。然而,Agent 需要状态来进行推理。如果没有一个关于“当前事务”的持久化模型,Agent 很容易在复杂的多步工作流中丢失线索。
  • 扁平工具列表(Flat Tool Lists):Agent 通常有“上下文窗口”限制。向 Agent 投喂 200 个 API 定义通常会导致性能下降。这被称为“迷失中间(Lost in the Middle)”现象,即大语言模型(LLM)难以从冗长的扁平列表中选择正确的工具。

语义坍塌的概念

当技术实现完全遮蔽了业务结构时,“语义坍塌”就发生了。

在“代码优先(Code-First)”的开发模式中,架构是隐含的。它只存在于程序员的脑海中或 Git 仓库的文件夹结构里。一旦编译部署,这种结构就蒸发了。AI 操作的是编译后的产物(端点),而这些产物已经丢失了语义关系。

正如系统工程理论所述:系统 = 结构 + 过程。传统微服务暴露了过程(函数),却隐藏了结构(关系)。

后果:AI 沦为“局外人”

由于这种坍塌,如今大多数 AI 集成都是“嵌入式”或“外挂式”的。AI 是一个调用公共 API 的外部插件。它不知道数据库中的 UserType 与权限系统中的 User 是同一个东西。它缺乏一个统一的对象模型。

特性传统微服务AI 原生架构
逻辑位置埋藏在代码/控制器中显式存在于元数据/Schema 中
AI 访问方式通过外部 API (OpenAPI)内部结构化访问
上下文按服务碎片化统一对象模型 (Unified Object Model)
关系隐含 (外键, ID 引用)显式 (图/链接)
Agent 角色工具使用者 (猜测)系统操作者 (理解)

重建结构:MCP 与行业转型

行业正在觉醒。我们看到一种向新协议的转变,旨在帮助 AI 理解系统的“地图”,而不仅仅是工具。

模型上下文协议 (MCP)

Anthropic 推出的模型上下文协议(Model Context Protocol, MCP) 是一个旨在解决这一连接问题的开放标准。它为 AI 助理连接数据源(如 Google Drive、Slack 或内部数据库)提供了一种标准化方式。

MCP 允许开发者以保留部分上下文的方式暴露资源和工具。MCP 服务器不仅仅是一个 API,它会告诉 LLM:“这是一个你可以读取的资源,这是你可以配合使用的提示词。”它创建了一个标准化的上下文交换契约。

JitAI 如何解决语义坍塌

如果说 MCP 标准化了“连接”,那么 JitAI 则试图标准化“应用结构”本身,从源头上防止语义坍塌。

JitAI 基于一个根本不同的前提:应用结构应该是一等公民。JitAI 不再从代码中推断结构,而是使用 JAAP (JitAi Ai Application Protocol) 显式定义应用。

Loading...

1. 解释型架构 (The Interpretive Architecture)

JitAI 采用解释型系统架构。应用由元数据(Meta, Type, Instance)定义,这些元数据对运行时引擎和 AI 都是显式可读的。

  • 自描述元素 (Self-Describing Elements):JitAI 中的 AI Agent 不仅仅看到一个名为 updateUser 的函数。它能看到 UserModel,包括其字段、权限以及与 DepartmentModel 的关系。
  • 无“胶水代码”隐藏:页面、服务和数据模型之间的关系定义在 JAAP 结构中,而不是隐藏在命令式代码里。AI 可以“阅读”应用蓝图。

2. 原生的 AI-系统协作

由于结构是显式的,JitAI Agent 不需要臆测模块之间如何组装。

  • 全栈工具 (Full-Stack Tools):Agent 可以配置跨越前端页面、后端服务和数据模型的工具,实现无缝调用。
  • 统一模型 (Unified Model):AI 与人类开发者使用的是同一套 Type/Instance 结构模型。这使得 AI 不仅能调用 API,还能在受控前提下参与修改应用结构本身(例如:“在客户表中添加一个字段”)。

实施指南:设计 AI 友好的架构

无论你使用 JitAI 还是标准微服务,都必须将系统设计为“机器可读”。

步骤 1:显式定义业务实体

不要让你的数据模式(Schema)仅仅是 Postgres 表的实现细节。

  • 行动:发布统一的“数据字典”或“知识图谱”,将技术 ID(如 user_id)映射到业务概念(如 Account Owner)。
  • JitAI 方法:使用数据模型(常规或聚合表)定义 AI 可以原生查询的业务对象。

步骤 2:按意图分组工具

避免将所有 50 个 API 端点一股脑丢进 Agent 的上下文中。

  • 行动:使用“工具路由”或“分层 Agent”模式。创建一个仅能访问客户相关 API 的“客户服务 Agent”,以及一个负责支付的“计费 Agent”。
  • JitAI 方法:使用 AI 助理 (AI Assistant) 组件,通过智能路由编排多个专用 Agent。

步骤 3:将“系统提示词”作为架构文档

文档不再是写给人看的,而是写给系统提示词(System Prompt)看的。

  • 行动:你的提示词应解释服务之间的关系。“要退款订单,必须先检查服务 A 中的状态,然后调用服务 B。”
  • JitAI 方法:使用通用提示词模板 (Universal prompt template) 来定义精确的角色和工具约束。

结论

微服务的“语义坍塌”是 AI 采用的主要瓶颈。当我们为了人类协作的便利性而剥离结构上下文、将系统模块化时,我们也让系统变得对 AI 不可理解。

要解决这个问题,我们必须停止将 API 仅仅视为端点,而开始将其视为语义图谱的一部分。MCP 等技术有助于弥合外部数据的鸿沟,而像 JitAI 这样的平台则通过 JAAP 重建应用基础,确保结构从一开始就不会丢失。

你现在就可以开始做的是:

  • 审计你的 API:它们是自描述的吗?
  • 探索 JAAP:阅读 JitAI 产品介绍,了解结构化协议的工作原理。
  • 下载 JitAI:尝试构建一个结构显式的 AI 原生应用。

FAQ

Q: 使用 GraphQL 能解决语义坍塌吗?

A: 部分解决。GraphQL 使数据之间的关系显式化(图),这对 AI 来说比 REST 好得多。然而,它通常只覆盖数据读写,而不包含业务逻辑过程或工作流。

Q: JitAI 与 LangChain 或典型的 Agent 框架有何不同?

A: LangChain 是一个用于调用工具的编排库。JitAI 是一个全栈应用平台,应用本身就是为了被 AI 理解而构建的。JitAI Agent 运行在应用上下文内部,而不是作为外部脚本运行。

Q: 我可以在现有的传统微服务中使用 JitAI 吗?

A: 可以。你可以使用外部 API 元素 (External API Elements) 包装现有 API,或通过服务元素 (Service Elements) 进行集成,实际上是给你的遗留系统加了一层 JitAI Agent 可以理解的“语义包装”。