事件经过

Simon Willison, 热门 llm Python CLI 和库的创建者,已开始对该工具的抽象层进行重大架构重构。这个标记为 research- llm-apis 2026-04-04 的新公开仓库记录了这一项目,是一个准备性研究阶段,旨在处理当前抽象层无法支持的供应商特性——最显著的是服务端工具执行。

llm 库目前通过插件系统为数以百计的模型提供统一的接口,涵盖数十家供应商。过去一年,随着 Anthropic、OpenAI、Google (Gemini) 和 Mistral 等提供商添加了新功能,现有抽象层已开始 显现其局限性。

技术深度解析

为了理解各提供商之间的原始 API 表面,Willison 利用 Claude Code 阅读了四家提供商的官方 Python 客户端库,并生成了直接访问底层 JSON API 的 curl 命令。目标是捕获各种场景下的流式和非流式响应结构。

这项研究的成果——包括生成的脚本和捕获的 JSON 响应——现在存放在一个专门的 GitHub 仓库中。这种方法在方法论上值得注意:与阅读文档( 通常滞后于实现)不同,Claude Code 分析了实际的客户端库源代码,以推断 API 在实践中的行为。

为什么服务端工具执行会打破现有模型

当前 llm 抽象假设了一个请求-响应循环,其中工具调用由客户端处理。现在 Anthropic 和 OpenAI 的 API 支持服务端工具执行,提供商的基础设施可以直接调用工具并返回结果,无需客户端管理循环。这从根本上改变了 调用签名、流式事件类型和客户端需要实现的状态机。

例如,带有服务端工具使用的流式响应可能发出以下事件类型:

  • Anthropic API 中流中段的 tool_use
  • OpenAI 流式块中的 tool_calls delta
  • Gemini GenerateContent Response 中的函数调用部分

每个提供商使用不同的字段名称、不同的分块策略,以及不同的工具完成信号约定 。当前的 llm 插件接口没有为插件作者暴露足够的表面区域来正确处理这些差异。

研究 产物

仓库包含针对每个提供商的 curl 命令和原始 JSON 捕获,分别在流式(text/event-stream)和非 流式模式下。这为项目提供了每个 API 今天实际返回的具体、版本化的参考点——这将 指导 Willison 接下来设计的新抽象基类和插件协议。

工具使用场景的典型非流式捕获将包括完整的 stop_reasontool_use 内容块,以及模型决定传递给工具的输入 JSON。流式等效版本显示这些相同 字段如何通过带 index 偏移量的增量 delta 事件到达。

谁应该 关注

LLM 插件作者应该密切关注。任何当前包装已添加工具执行功能的提供 商的插件,很可能需要在新抽象层发布时进行更新。Willison 的研究阶段表明,插件协议即将迎来破坏性或 至少是附加性的变更。

使用 llm CLI 进行脚本编写或自动化工作流程的 Python 开发者应该知道底层插件 API 正在变动。当前的插件接口——以 ModelResponse Conversation 类为中心——可能会添加新的可选方法或抽象属性。

AI 供应商的工具团队可能会 发现这个研究仓库作为其流式和非流式 API 实际行为的一个独立第三方快照很有用,可 与竞争对手进行比较。

本周行动建议

  • Star 或 watch GitHub 上的 research-llm-apis 仓库,以跟踪 Willison 何时开始将研究转化为实际的接口提案。
  • 如果你维护 llm 插件,审计你的提供商现在是否支持服务端工具执行,并记录你的当前实现默默丢弃的任何流式事件类型。
  • 使用 llm -- no-stream 与流式模式运行现有的 llm CLI 来对比你的提供商,以了解你的插件当前暴露与 丢弃了什么。
  • 直接在 GitHub 上查看 Anthropic、OpenAI 和 Gemini Python SDK 源代码——这是 Willison 使用 Claude Code 自动化的相同练习——以识别 过去六个月中添加的你的集成未处理的新响应字段。

这个研究阶段的直接 交付物是一个版本化的 JSON 参考语料库。抽象重构本身尚未提出,但拥有每个 API 返回内容的干净经验数据 是设计一个不掩盖重要差异的接口的正确前提条件。