LLM 发布新版本,新增推理轨迹、OpenAI Responses、服务端工具及更智能的日志功能
原文由 Simon Willison 于 发布,订阅该博客
今天早上我发布了 LLM 0.32,这是该项目自最初发布以来最重要的一次更新。新版本支持可视化推理轨迹、服务提供商的服务端工具、重新设计的内容寻址 SQLite 日志、新模型,以及由 OpenAI Responses API 驱动的新功能。我还发布了 llm-anthropic 插件的新版本,也包含了大量更新。
面向 LLM 命令行用户的亮点功能
现在对推理模型运行 LLM 时,会将推理轨迹显示到标准错误输出,这样你就能看到模型在“思考”什么,而这些信息不会包含在你可能会管道给其他工具的标准输出中。添加 -R/--hide-reasoning 即可关闭此功能。

LLM 已开箱支持 GPT-5.6 模型家族,而使用 llm "prompt" 时的新默认模型是价格低廉但能力不俗的 GPT-5.6 Luna。
现在 LLM 调用可以使用来自各家提供商的服务端工具。OpenAI 将代码执行环境作为服务端工具提供;LLM 现在可以像这样运行需要该能力的提示:
llm --tool CodeInterpreter 'Show current python and SQLite versions'
OpenAI 还提供了一个 WebSearch 工具。
llm-anthropic 插件则新增了 WebSearch、WebFetch、CodeExecution 和 AnthropicMCP,用法如下:
llm -m claude-sonnet-5 -T 'AnthropicMCP("https://datasette.simonwillison.net/-/mcp")' \
'how many rows in the blog_blogmark table?'这会让 Anthropic 在与 API 的单次请求/响应交互中,针对我的新 datasette-mcp 插件执行 MCP 调用。
新的 llm openai endpoint 命令提供了一个工具,用于通过一行命令对任意兼容 OpenAI 的端点执行提示。这些调用不会被记录,因此很适合用来对任何使用 LLM API 世界通用语言的服务运行一次性提示。
以下是我如何通过 uvx(无需安装 LLM)并搭配 llm-tools-quickjs 工具插件,在本地 LM Studio API 中运行的 Gemma 4 12B 上执行提示的示例:
uvx --with llm-tools-quickjs \ llm openai endpoint http://localhost:1234/v1 -m google/gemma-4-12b \ -T QuickJS 'Use QuickJS to multiply 3434 * 2434' --td

Python API 的新功能
LLM 的 Python API 过去要求你先创建一个对话,然后逐条向其发送消息。这是对 LLM 真实工作方式的一种抽象,实际上每次请求都会携带之前所有消息的完整历史。这种抽象在一些更高级的场景下开始显得碍事,因此新版本引入了 model.prompt(messages=[]) 参数,用法如下:
import llm
from llm import user, assistant, system
model = llm.get_model("gpt-5.6-luna")
response = model.prompt(messages=[
system("You are a helpful pirate."),
user("What is the capital of France?"),
assistant("Paris, matey."),
user("And Germany?"),
])
print(response.text())过去 LLM 对每次提示都会返回一个可迭代的字符串序列。当模型只返回字符串响应时这很好用,但无法预见模型后来演变出的复杂形态。如今许多模型会返回推理文本、输出字符串、工具调用甚至图片附件的混合体。在 LLM 0.32 中,你可以改用这种方式:
for event in model.prompt("Explain cats").stream_events():
if event.type == "reasoning":
print(f"[thinking] {event.chunk}", end="", flush=True)
elif event.type == "text":
print(event.chunk, end="", flush=True)
else:
print(f"Other event: {event}")将这些功能结合起来,我们终于可以为半标准的 OpenAI Chat Completions API 提供一个稳健的实现,我已将其作为 llm-chat-completions-server 插件发布:
llm install llm-chat-completions-server llm chat-completions-server --port 9000 # Server is now running on http://127.0.0.1:9000/v1
现在你就可以通过该服务器,使用新的 llm openai endpoint 命令对 LLM 运行提示了!
llm openai endpoint http://127.0.0.1:9000/v1 'hello' -m gpt-5.4-mini
这类 API 更大的挑战在于日志记录。如果要支持每次请求都追加消息序列的模式,理想情况下我们应该避免为每一轮都记录那些重复的 JSON。
解决方案是新的内容寻址消息存储,它借鉴了 Git 的设计。你可以在文档中查看其新结构,不过 llm logs 和 llm logs --json 命令都已升级,会将这种格式转换回易于使用的形式。
其他更新
这个版本还有很多其他内容。0.32 版本说明已经相当全面,而 0.32rc2、0.32rc、0.32a3、0.32a2 和 0.32a0 的说明则可以补充其余细节。
现有的 LLM 插件应该都能继续正常工作,但提供额外模型的插件需要升级到 0.32 才能完整参与新的流式事件系统。文档中提供了关于如何使用结构化消息与流式事件实现插件的指南。
我已经更新了自己的一些插件:
- llm-anthropic 0.26 新增了对 Claude 5 系列模型的支持,以及
WebSearch、WebFetch、CodeExecution和AnthropicMCP服务端工具。 - llm-gemini、llm-openrouter 和 llm-mistral 也快完成了,新版本即将发布。
看来 LLM 现在也算是个智能体框架了
本版本中不少底层工具的改动是由 Datasette Agent 的需求驱动的。当我开始开发 LLM 时,“智能体(agent)”这个词的定义还非常模糊,所以我拒绝使用它。在2025 年 9 月,我开始认同“LLM 智能体通过循环调用工具来实现目标”这一定义已经足够确立,我可以不再刻意回避这个词了。
工具链现在可以暂停以等待人工审批,并从已存储的消息历史中恢复——这两项都是 Datasette Agent 所需要的。
如今再看 LLM,它在我眼里已经越来越像一个智能体框架了。能用一个命令行工具、以一行命令的形式随心组合来自不同来源、搭配不同模型的各种工具,本身就很酷,而它所包含的 Python 库也已强大到足以构建像 Datasette Agent 和 llm-coding-agent 这样的系统。
也许下一版 LLM 会把“智能体”这一概念直接内置到核心库中。我仍在思考它会是什么样子。
随机一篇博客
评论
登录后参与讨论