LLM CLI 0.32 大版本:推理追踪 + Responses API + 内容寻址日志 · 干货攻略
- 链接:https://x.com/simonw/status/2084792341572001871
- 分类:x-tips
- 来源:X @simonw
- 作者:Jay
- 更新:2026-08-31
- 仓库:simonw/llm
这是什么
LLM CLI 是 Simon Willison 用 Python 写的命令行工具,同时也是一个 Python 库,用于对接 OpenAI、Anthropic、Google Gemini、Qwen、Gemma、Mistral 等数十家模型厂商的 API,并支持本地模型(通过 Ollama、LM Studio 等兼容端点)。8 月 4 日发布的 0.32 是该项目自诞生以来最大的一次版本更新——Simon 本人在博客标题里直接写了「LLM is an agent framework now」。
为什么值得关注
谁分享的,解决什么问题
@simonw(Simon Willison)是 AI 工具链领域最有影响力的独立开发者之一,著有 Datasette、Datasette Agent 等项目。他在 X 上发帖称这是「自项目发布以来最重要版本」,核心动机是:
- 推理模型普及后,原有架构不够用了——旧版把模型输出当成纯字符串处理,但带推理能力的模型会返回推理片段(reasoning chunks)、工具调用、图片附件等多种内容类型,结构变了
- 日志系统成了瓶颈——长对话每轮都要把历史 JSON 重新序列化写入数据库,浪费存储且难以追踪
- Agent 场景需要更精细的工具控制——暂停等人工批准、从断点恢复等能力成为必须
这次更新解决了什么问题
- 推理模型的思考过程终于可见(输出到 stderr,不污染标准输出)
- 服务端工具(模型供应商原生提供的工具,如 OpenAI CodeInterpreter)从 CLI 直接可用
- SQLite 日志改为类 Git 的内容寻址存储,彻底消除重复序列化
- Python API 支持完整消息历史传递,是构建复杂 Agent 的基础
核验过程
官方来源
| 来源 | 读取内容 | 关键确认 |
|---|---|---|
| GitHub Release 0.32 | 完整 Release Note | 推理追踪输出到 stderr、Responses API 切换、Content-addressed 存储、默认模型变更为 GPT-5.6 Luna |
| Simon 博客文章 | 详细解读(2026-08-04) | 「most significant new version since the initial launch」说法一致;确认服务端工具列表(OpenAI WebSearch、CodeInterpreter;Anthropic WebSearch、WebFetch、CodeExecution、AnthropicMCP) |
| llm.datasette.io changelog | 完整变更日志 | API 方法名:stream_events()、messages=[]、hide_reasoning=True;llm.PauseChain 机制;service_tier 选项 |
| GitHub README | 项目定位与快速上手 | 覆盖厂商列表(OpenAI/Anthropic/Gemini/Qwen/Gemma/Mistral/Ollama) |
交叉验证
- AI Weekly 报道确认:GPT-5.6 Luna 替代 GPT-4o mini 成为新默认模型;日志存储重新设计为「modeled after Git」
- daily.dev 报道确认:
llm openai endpoint单行命令、Content-addressable SQLite schema 去重机制 - GitHub Release 评论中 Simon 确认:Plugins 需升级至 0.32 方可参与新 streaming events 系统
与原帖说法对照
| 原帖关键词 | 官方确认 | 备注 |
|---|---|---|
| 「visible reasoning traces」 | ✅ 确认,输出到 stderr,-R 隐藏 |
CLI 用户可直观看到模型思考过程 |
| 「OpenAI Responses API」 | ✅ 确认,Responses API 接管 reasoning 模型 | -o chat_completions 1 可回退到旧路径 |
| 「server-side tools」 | ✅ 确认,含 OpenAI CodeInterpreter(memory_limit="4g") 与 WebSearch | 通过 -T 参数调用 |
| 「content-addressing SQLite logs」 | ✅ 确认,类 Git 设计,解决长对话 JSON 重复序列化 | AI Weekly 明确报道 |
| 「most significant version」 | ✅ Simon 博客标题直接确认 | 非夸大措辞 |
| 「服务端工具」具体是哪些 | 补充:原帖未列,官方文档显示 OpenAI 和 Anthropic 各有多种 | 原帖说法基本准确但未详述 |
上手步骤
安装与基础配置
# pipx 安装
pipx install llm
# 或 uvx 免安装运行(无需预先安装)
uvx llm "Hello world"
# 配置 OpenAI API Key
llm keys set openai
# 按提示粘贴 API Key
推理追踪(Reasoning Traces)
模型思考过程实时输出到 stderr,可配合管道使用而不被污染:
# 默认显示推理追踪
llm "解释为什么天是蓝色的"
# 隐藏推理追踪
llm "解释为什么天是蓝色的" -R
# Python API 中隐藏
model.prompt("...", hide_reasoning=True)
服务端工具(Server-side Tools)
无需本地安装依赖,模型供应商的服务端环境直接跑工具:
# OpenAI WebSearch
llm "查一下今天有什么 AI 新闻" -T WebSearch
# OpenAI CodeInterpreter(4GB 内存限制)
llm "Show current python and SQLite versions" -T 'CodeInterpreter(memory_limit="4g")'
# Anthropic 服务端工具(需安装 llm-anthropic)
llm install llm-anthropic
llm -m claude-sonnet-5 -T 'AnthropicMCP("https://datasette.simonwillison.net/-/mcp")' \
'how many rows in the blog_blogmark table?'
OpenAI 兼容端点单行调用
# 针对任意 OpenAI 兼容端点发请求,无需提前配置
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
托管 Chat Completions API(LLM → OpenAI 兼容服务端)
llm install llm-chat-completions-server
llm chat-completions-server --port 9000
# 服务启动于 http://127.0.0.1:9000/v1
# 再用 llm openai endpoint 消费这个服务
llm openai endpoint http://127.0.0.1:9000/v1 'hello' -m gpt-5.4-mini
Python API 新写法
import llm
from llm import user, assistant, system
model = llm.get_model("gpt-5.6-luna")
# 完整消息历史传递(0.32 新 API)
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())
# 混合流事件(reasoning + text + tool_calls)
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}")
# 暂停工具链等人工批准
# 工具中 raise llm.PauseChain() 即可暂停
# 之后用 model.prompt(messages=...) 从同一对话历史恢复
工具循环暂停与恢复
import llm
def my_tool(input_text, llm_tool_call):
tool_call_id = llm_tool_call.tool_call_id
# 人工审批后可恢复
raise llm.PauseChain(
tool_call_id=tool_call_id,
message="Waiting for human approval"
)
# 恢复时传入同一 conversation 消息历史即可继续
坑与适用边界
坑
- 推理追踪不是管道的一部分——输出到 stderr 而非 stdout,所以
| grep不会拿到推理内容;第一次用可能误以为模型没在思考 - 旧版插件不兼容——0.32 改了 streaming events 系统,提供自定义模型的插件需升级才能完整参与;现有插件兼容性可用但功能受限
- Responses API 与 Chat Completions 不完全等价——虽然 0.32 默认对 reasoning 模型使用 Responses API,但
-o chat_completions 1可逐条切换;行为差异需实测确认 - Content-addressed 日志需要迁移——之前用旧版 SQLite schema 的日志不自动迁移,首次运行会看到数据库 schema 变更提示
- 服务端工具的内存限制——OpenAI CodeInterpreter 默认 memory_limit="4g",Simon 原帖未说明这个默认值,大文件处理时可能 OOM
适用边界
| 场景 | 是否适合用 LLM 0.32 |
|---|---|
| 需要调试/审计模型推理过程 | ✅ 推理追踪最直接 |
| 多模型统一管理(本地+云端) | ✅ 一套 CLI 对接数十家 |
| 构建 Agent 并需要人工审批节点 | ✅ PauseChain 原生支持 |
| 生产环境日志存储(对话量大) | ✅ Content-addressed 解决重复序列化 |
| 单纯调用单个模型 API | ⚠️ 可能比直接 SDK 重一些 |
| 完全离线环境 | ⚠️ 云端模型仍需网络;本地模型需 Ollama/LM Studio |
一句话结论
LLM CLI 0.32 让推理模型的思考过程终于可见,同时通过 OpenAI Responses API 和类 Git 的内容寻址日志,把「统一接入多模型」这件事推进到了能正经做 Agent 的水准——Simon 说「LLM is an agent framework now」并非夸张。