7月9日,Simon Willison发布命令行大模型工具llm的0.31.1版本,修复了一个边界bug:OpenAI Chat Completion接口收到一个参数为空的tool call时,部分供应商会直接抛出JSON报错,导致调用链中断。这是一次纯粹的bugfix release,没有新功能,也没有性能提升。
它值得记一笔的原因很简单:这个bug暴露了"OpenAI兼容"背后藏着的实现落差。接口格式统一了,边界行为没有统一。
发生了什么:空参数怎么让接口报错
Willison是在测试自己维护的插件llm-meta-ai时撞见这个问题的。这个插件用来让llm接入Meta的模型,走的是OpenAI兼容的Chat Completion接口。
某次工具调用没有携带任何参数,按理说该被当成正常的空调用处理。结果部分供应商的接口把它判定为格式异常,直接返回JSON报错,而不是把空值当成合法输入放行。
| 项目 | 内容 |
|---|---|
| 版本 | llm 0.31.1 |
| 发布时间 | 2026年7月9日 |
| 关联issue | GitHub #1521 |
| 触发场景 | OpenAI Chat Completion接口,tool call参数为空 |
| 发现渠道 | 测试llm-meta-ai插件时暴露 |
OpenAI兼容不等于行为一致
OpenAI原生接口对空参数tool call的容忍度比较高,一般能正常走完调用流程。但一部分打着"OpenAI-compatible"旗号的供应商,在实现自己的Chat Completion端点时,边界输入的处理逻辑没有照搬OpenAI的做法。同一个字段留空,不同供应商可能给出完全不同的结果。
原文只说"部分供应商"(some providers),没有点名具体是谁。这不是OpenAI的问题,也不能说成某一家的系统性故障。但这恰恰是风险所在:开发者很难提前判断自己接的那家供应商属不属于"部分"之列,往往要等实际调用时才踩坑。
谁该跟着改,接下来看什么
普通用户在终端敲一句问答,感觉不到这次更新的存在。真正需要关注的是用llm CLI编排多家模型、搭建Agent或tool calling流程的开发者,尤其是像llm-meta-ai这样把非OpenAI模型接入OpenAI兼容接口的插件维护者——他们最先撞见这类边界差异。
升级方式很简单:pip install -U llm。如果你的工具链里接了多家供应商,建议现在就把"参数为空"这类边界case加进tool calling的测试用例,而不是等线上报错才发现。
接下来值得盯的是两件事:一是llm-meta-ai什么时候从测试插件转为正式发布,二是Willison会不会在后续release里点名哪些供应商在边界行为上不一致。目前这两件事都还没有明确时间表。
