← 文章 / 开源项目
Simon Willison 7小时前 · 2026-08-05 12:22:58 · 0 阅读

LLM 新版发布:支持推理过程展示、OpenAI Responses、服务端工具与智能日志

LLM 新版本发布:支持推理过程展示、OpenAI Responses、服务端工具与更智能的日志记录

2026 年 8 月 4 日

今天上午我发布了 LLM 0.32,这是自项目最初发布以来最重要的一次更新。新版本带来了可见的推理过程、服务端供应商工具、重新设计的内容寻址 SQLite 日志、全新的模型,以及由 OpenAI Responses API 带来的新功能。同时,我也发布了 llm-anthropic 插件的新版本,其中包含不少重要更新。

LLM CLI 用户最值得关注的新特性

在使用推理模型(reasoning models)运行时,LLM 现在会将模型的推理过程输出到标准错误流,这样你既能看到模型的"思考"过程,又不会让这些信息混入可能被管道传递给其他工具的标准输出。使用 -R/--hide-reasoning 参数可以关闭该功能。

在 macOS 终端中运行 llm "think about the best thing about pelicans",灰色文字先输出 Exploring pelican qualities 等推理内容,随后以白色文本输出最终回答:鹈鹕最棒的地方在于它们那大得夸张又实用的造型——巨大的喙和喉囊看起来滑稽,但让鹈鹕成为了极为高效的捕鱼高手。更妙的是,许多品种还会协同合作,把鱼群赶在一起后再一口兜起。它们集呆萌、优雅与意外的聪明于一身。

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 插件新增了 WebSearchWebFetchCodeExecutionAnthropicMCP,用法如下:

llm -m claude-sonnet-5 -T 'AnthropicMCP("https://datasette.simonwillison.net/-/mcp")' \
  'how many rows in the blog_blogmark table?'

这样会让 Anthropic 在单次请求/响应交互中,对我新的 datasette-mcp 插件执行 MCP 调用。

新的 llm openai endpoint 命令可以对任意 OpenAI 兼容端点执行 prompt,只需一行命令。这些调用不会被记录,因此非常适合用来对任何支持 LLM API 通用协议的服务跑一次性 prompt。

下面是我通过 uvx(无需安装 LLM)调用本地 LM Studio 中的 Gemma 4 12B API 来跑 prompt 的例子,顺便混用了 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

输出显示:Tool call: QuickJS_execute_javascript({'javascript': '3434 * 2434'})  8358356 3434 * 2434 的结果是 8,358,356。

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 每次 prompt 返回的都是一串可迭代的字符串。在模型只返回纯文本时这挺好用,但完全没料到模型后来会演进出各种奇形怪状的输出。如今很多模型返回的内容是推理文本、输出字符串、工具调用甚至图片附件的混合体。借助 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 命令,针对那个服务器来运行 prompt 了!

llm openai endpoint http://127.0.0.1:9000/v1 'hello' -m gpt-5.4-mini

这类 API 更大的挑战在于日志。理想情况下,每一轮请求都把整条消息序列追加上去,我们就要尽量避免把那些重复的 JSON 每轮都原样写一遍。

解决方案就是这个新的内容寻址消息存储,其设计借鉴了 Git。新的 schema 可以在文档中查看,同时 llm logsllm logs --json 命令都已升级,能够把存储格式还原回易于消费的形式。

其他更新

这次发布的内容远不止这些。0.32 版本更新日志已经相当全面,0.32rc20.32rc0.32a30.32a20.32a0 的说明可以补上任何遗漏的细节。

现有的 LLM 插件都可以继续使用,但提供额外模型的插件需要升级到 0.32 才能完整对接新的流式事件系统。文档中有一份关于实现结构化消息与流式事件插件的指南。

我已经更新了自己的一些插件:

看来 LLM 现在也算是一个智能体框架了

这次发布中不少底层工具方面的改动,都是为了满足 Datasette Agent 的需求。我刚开始做 LLM 的时候,"agent"这个词的定义实在太模糊,所以我一直拒绝使用它。到了 2025 年 9 月,我逐渐接受了这样一个说法:"LLM 智能体通过循环调用工具来达成目标",这个定义已经足够成熟,我也没必要再刻意回避这个词了。

工具链现在可以暂停等待人工审批,也可以从已存储的消息历史中恢复执行——这两个能力都是 Datasette Agent 所需要的。

回头看看 LLM 如今的模样,它已经开始很有"智能体"的味道了。让人惊喜的是,这个命令行工具能在一行命令里把来自不同来源的工具和不同模型随意混搭,同时它附带的 Python 库又足够强大,足以支撑起 Datasette Agentllm-coding-agent 这类系统的构建。

也许 LLM 的下一个版本会把"智能体"这一概念直接融入核心库。我还在琢磨它具体应该是什么样子。

原始来源: Simon Willison

评论 (0)