LLM 0.32 发布:支持推理轨迹、OpenAI Responses 与服务器端工具
2026年8月4日
今日上午,我发布了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通用标准兼容的服务执行一次性指令。
我通过以下方式,在本地LM StudioAPI运行的Gemma 4 12B模型上执行指令——使用uvx(无需安装LLM),同时搭配llm-tools-quickjs工具插件:
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本质的抽象——实际上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聊天补全API。我已将其作为llm-chat-completions-server插件发布:
llm install llm-chat-completions-server
llm chat-completions-server --port 9000
# 服务器已在 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核心库——不过具体该如何实现,我还在思考。