如何适配外部 Agent 的接口、事件和工具调用差异?

考查重点:协议适配与能力映射。定义内部消息、事件与工具状态模型,用适配器转换外部协议;保留原始字段,对无法映射的能力明确降级

本题目录

参考答案

核心回答

外部Agent适配不只是换模型接口,还要统一会话生命周期、消息内容、事件流、工具状态、权限交互和产物交付。一种可落地设计是定义内部Agent接口和事件模型,每个外部系统实现适配器:向外转换请求,向内归一化结果,同时保留无法无损映射的原始字段与能力差异。

以接入OpenCode等编码Agent为设计示例,业务层发起任务、订阅进度、取消或恢复会话;适配器负责对应SDK、进程或协议。业务层不需要到处判断某家事件名,也不能假定每家都支持相同的工具与恢复能力。

适配接口与能力

会话接口要区分创建、继续、取消和关闭;映射外部session与内部task/run,绑定工作目录、模型配置和权限。能力表说明是否支持流式、附件、恢复、工具审批和并发,缺少的能力显式降级,不能用空实现假装成功。

消息适配处理文本、图片、文件引用和结构化产物,保留角色与关联关系。长文件不要塞进每个事件,使用受控产物引用;错误则区分参数、认证、限流、运行失败和结果未知,以便上层决定重试或终止。

事件与工具怎样映射

内部可以区分文本增量、工具提案、工具开始、进度、结果、权限请求、任务结束和错误。每条事件携带会话、run、调用ID和顺序信息,不能把每个文本分片误认为完整消息。

ACP v1用session/update报告工具调用与增量状态,工具有独立调用ID;OpenCode SDK提供SSE事件订阅。这些是可参考的实际差异:一个终态快照、一个文本delta、一个权限请求有不同语义,不能统一成“打印字符串”。流式参数应在完整解析和校验后交给真正执行方。

还要明确谁执行工具。外部Agent若已在自己的Runtime执行,适配层只观察回执,不能再执行一次;若由本地宿主执行,就要完成校验、权限与结果回传。权限请求和拒绝需要原样保持含义,不能把“等待批准”映射成“失败后自动重试”。

怎样验证适配器

用固定事件序列测试分片、乱序、重复、断线、取消后迟到和部分失败;再跑一条读文件、修改、测试、产物返回的实际任务。保留原事件到内部事件的关联,方便定位外部成功但内部未结束等问题。协议升级时按版本维护映射,未知事件可记录,不能静默丢掉可能影响状态的内容。

对应教程

参考资料

  • 国内:zero2Agent:服务发现、协议适配与治理:借鉴服务发现与语义转换的设计,说明正文中外部 Agent 适配为何还要统一事件与任务语义,而不只是重命名 JSON 字段。
  • 国内:WeThinkIn:函数调用与协议边界:依据工具提案、宿主执行与调用 ID 的分工,说明正文中跨接口转发时如何确定实际执行方与调用归属。
  • 国内:JavaGuide:多Agent协作系统设计:采用任务、状态与产物交付的契约,说明正文中跨 Agent 接口需要保留的信息。
  • 国外:ACP:Tool Calls:依据 v1 工具调用事件、调用 ID、权限和状态规范,解释正文中适配层保留的事件语义与关联信息。
  • 国外:OpenCode:SDK:依据 SDK 会话与 SSE 事件订阅,说明正文中外部编码 Agent 的接入方式及执行事件来源。

相关面经

2 篇

快手

AI 全栈开发工程师
一面
查看原面经 →
Agent 适配是否只是模型适配? > - 除了模型以外,不同 Agent 之间真正有哪些差异?

硅心科技

智能软件工程师
实习
查看原面经 →
你主要负责的模块这里适配器是怎么做的,对于几个外部Agent做了哪些适配?
对于像几个Agent的不同事件是怎么做适配的?(我刚刚没讲清楚,又问了一遍)
不同的Agent的工具调用有不同吗,怎么实现的?

收录题集

1 个来源,共1 份题集

工程化踩坑:死循环、状态丢失与成本控制

Onefly · zero2Agent · 1 条原题

查看题集 →

相关题目

4 题