1. OpenAI/Anthropic 函数调用(tool use)
OpenAI 与 Anthropic 的函数调用(tool use)在协议与实现上有什么差异?前端如何统一处理?
- 两家工具调用协议的差异(并行 tool_calls vs tool_use 内容块)
- 参数 JSON 的流式增量与完整性判断
- 统一抽象层的设计(执行、回传、多轮)
OpenAI 的 function calling 在流式响应中以 tool_calls 增量块出现(index 标识多个并行调用),参数是 JSON 字符串增量,需累积解析;Anthropic 的 tool use 以 content block 形式出现(tool_use 块含 id、name、input 增量),一次响应中可含多个块,input 同样是部分 JSON。差异:OpenAI 原生支持同轮并行多工具调用,Anthropic 同样支持并行工具调用(一次响应多个 tool_use 块),差异在事件结构与块化形态(OpenAI 的 delta 扁平、Anthropic 的块类型化)。前端统一处理:抽象出 ToolCall{ id, name, args(部分), status },按厂商解析器把各自增量归一化;参数 JSON 用"累积 + 完整校验"(schema 校验通过才执行);执行后统一构造 tool 角色消息回传。工程上建议封装 provider-agnostic 的 tool executor,管理"参数就绪 → 执行 → 结果回传 → 下一轮"的循环与并发限制。
答出两家协议的核心差异(并行 vs 块化、事件结构)与统一抽象层设计,体现"一次实现、多厂商接入"的工程思路。