面向 Agent 开发:构建统一 AI Agent 运行时的工程实践

课程 ID: 19373

描述:
话题概述: 我们的产品是一款桌面 AI IDE,需要将多种 AI 编程助手(如 Claude Code、Codex)深度嵌入到产品中,让用户在一个界面里就能使用不同厂商的 AI 能力。但在落地过程中遇到了两个核心挑战: ▎ ▎ 1. 协议碎片化——每个 AI 助手都有自己的通信方式、进程管理方式和输出格式。如果逐个对接,相当于每个助手写一套完整的适配代码,维护成本随助手数量线性增长。 ▎ 2. Agent 复用无标准——团队内做了一个好用的代码审查助手,另一个团队想用,得读文档、抄配置、写胶水代码、调环境。AI Agent 的现状就像没有 npm 的年代——没有统一的打包规范,没有注册中心,没有“安装即可用”的体验。每个 Agent 都是一次性产物,无法像软件包一样发布、搜索、安装和版本管理。 演讲题纲: 话题亮点: 我们设计并实现了一套“Agent Runtime”体系,同时解决运行和分发两个问题: ▎ ▎ 针对协议碎片化——构建统一运行时 ▎ ▎ 1. 一层抽象屏蔽所有底层差异——我们在产品和 AI 助手之间加了一个“运行时”层。它向下对接各种 Agent 的私有协议,向上只暴露一个极简的统一接口:“发送指令”和“接收事件流”。上层开发者完全不需要知道底层是 Claude Code 还是 Codex,交互方式完全一致。 ▎ 2. 归一化事件流——不同 Agent 的输出五花八门,我们设计了一套标准化的事件分类:文本输出、思考过程、工具调用、文件修改、资源消耗。特别是“文件修改”——有的 Agent 用结构化命令改文件,有的走命令行操作,运行时自动将这些差异抹平为统一格式,UI 层只需写一次就能适配所有 Agent。 ▎ 3. 可插拔的工具扩展机制——基于 MCP 开放协议,支持在运行时动态给任何 Agent 增加能力(数据库查询、API 调用、文件系统操作等),无需修改 Agent 本身的代码。工具和 Agent 彻底解耦。 ▎ ▎ 针对 Agent 复用无标准——设计包化分发体系 ▎ ▎ 4. 定义 Agent 包标准——我们规定了一个 Agent 包必须声明什么:能力清单、运行环境要求、接口版本、启动方式。就像每个软件包都有一份描述文件说明“我是什么、怎么用”,Agent 包也有统一的清单格式。 ▎ 5. Agent 注册中心 + 自动装载——开发者按标准打包后发布到注册中心,其他人通过名称即可安装。运行时读取包的声明后,自动完成进程启动、协议握手、能力注册——装好就能用,不需要任何胶水代码。 内置 Agent 和团队自研 Agent 对使用者完全无差别。 踩坑经验: ▎ ▎ - 包标准定义最难的是“宽窄平衡”:定太严格会限制 Agent 的多样性,定太宽松又无法真正统一。我们迭代了多版,最终用“必选字段 + 可选扩展”的方式,既保证互操作性又不卡创新 ▎ - Agent 进程的调试信息与正式通信数据混在同一通道导致解析崩溃,最终设计了结构化帧协议将两者彻底分离