Simon Willison 这次发的不是新模型,是一个版本号还停在 0.1a0 的小插件——llm-chat-completions-server。装上以后,你本地用 LLM 管理的所有模型,不管来自哪个插件,统统会被包进一个和 OpenAI Chat Completions 长得一样的接口里,挂在你指定的端口上。

这插件的写法更扎眼:全部代码由 GPT-5.6 Sol 生成,Simon 自己的评价是它"确实很懂 OpenAI 这套接口的形状"。但插件真正要验证的,不是模型好不好用,是 LLM 自己刚上线的日志去重机制——扛不扛得住越聊越长的多轮对话。

装了什么,怎么用

用法很直接:先装预发布版的 LLM(uv tool install llm --pre),再装这个插件(llm install llm-chat-completions-server),跑一句 llm chat-completions-server -p 9001,本地就起了一个服务。

它暴露的不是新模型,是你通过各种插件已经装好的全部模型——统一包在 OpenAI Chat Completions 格式的接口后面。认这套消息格式的客户端,理论上都能直接把请求打过来,背后跑的其实是本地模型。

开发者省了一层活:不用自己写适配代码去兼容不同模型的调用方式,直接用现成的 OpenAI SDK 或客户端连过来就行。流式输出、鉴权、多用户隔离——这些生产环境绕不开的问题,发布信息里都没提。插件版本号还停在 0.1a0,这本身就是个提醒:别急着拿去跑生产。

本地模型接入 OpenAI 接口 已装 LLM 模型 各插件提供 本地兼容服务器 端口 9001 0.1a0 早期版本 OpenAI 兼容客户端 复用现有生态 所有模型,统一走 OpenAI 消息格式

为什么真正的测试对象是日志

Chat Completions 这套接口有个特点:对话状态由客户端自己维护,每一轮请求都要把完整历史重新发一遍。聊得越久,请求体越长,服务端日志里的重复内容也越堆越多。

LLM 0.32rc1 给这个问题开了一刀:给消息的每个片段算哈希,内容一样就不重复落盘,这是一套内容寻址的日志设计。这个新插件,就是拿真实的多轮对话流量去检验这套设计管不管用。

发布信息没有给出具体的存储节省比例,也没有延迟数据。去重解决的是日志侧的重复存储问题,不改变模型本身的回答质量或速度。目前只能说这是一次设计意图的验证,不是已经跑出来的性能结论。

对话变长,日志怎么办 无去重 内容寻址去重 轮1 轮2 轮3 含重复 轮1 轮2 轮3 请求体持续增长 重复片段按哈希只存一次 去重解决的是存储侧重复,不改变模型本身的能力

兼容接口不新鲜,新意在哪

LLM 本身跟 OpenAI 没有从属关系,是 Simon 维护的独立工具,底下接了一堆不同厂商的模型插件。给这些模型加一层兼容接口,他选的是 OpenAI 的消息格式,不是自己另发明一套——这个选择本身不算新鲜。

Ollama、LiteLLM、vLLM 这类本地或自托管推理工具,早就自带 OpenAI 兼容接口,而且已经被主流客户端广泛对接。放在这个背景下看,llm-chat-completions-server 的位置更清楚:

项目定位成熟度典型场景
Ollama / LiteLLM / vLLM 等本地或自托管推理服务,原生带 OpenAI 兼容接口相对成熟,主流客户端已广泛对接日常调用、生产部署
llm-chat-completions-serverLLM 工具的测试插件,顺带包一层兼容接口0.1a0,刚发布的早期版本验证内容寻址日志的去重设计

这插件的新意不在兼容 OpenAI,而在给日志去重找了一个真实的高强度测试场——多轮对话,不断变长的请求体。

本地及多模型应用开发者可以先在测试环境接现成的 OpenAI 客户端,验证自己的模型能不能跑通这套接口。生产环境要用,认证、限流、多用户隔离得自己补,插件目前都没交代。

关注接口标准化的读者更适合把这当一个个案观察。OpenAI 兼容接口早就是本地推理生态的常见外壳,这个插件只是又添了一个,不构成"标准之战已经结束"的证据。

接下来值得看的:0.1a0 到正式版之间会不会补上流式响应和鉴权;LLM 0.32 正式发布后,去重设计有没有公开的存储和延迟数据;其他本地推理框架要不要跟进这套按内容哈希去重的日志思路。

0.1a0 这个版本号说明得很清楚:测试还没做完,别急着把这次兼容当成终点。