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 上发帖称这是「自项目发布以来最重要版本」,核心动机是:

  1. 推理模型普及后,原有架构不够用了——旧版把模型输出当成纯字符串处理,但带推理能力的模型会返回推理片段(reasoning chunks)、工具调用、图片附件等多种内容类型,结构变了
  2. 日志系统成了瓶颈——长对话每轮都要把历史 JSON 重新序列化写入数据库,浪费存储且难以追踪
  3. 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=Truellm.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 消息历史即可继续

坑与适用边界

  1. 推理追踪不是管道的一部分——输出到 stderr 而非 stdout,所以 | grep 不会拿到推理内容;第一次用可能误以为模型没在思考
  2. 旧版插件不兼容——0.32 改了 streaming events 系统,提供自定义模型的插件需升级才能完整参与;现有插件兼容性可用但功能受限
  3. Responses API 与 Chat Completions 不完全等价——虽然 0.32 默认对 reasoning 模型使用 Responses API,但 -o chat_completions 1 可逐条切换;行为差异需实测确认
  4. Content-addressed 日志需要迁移——之前用旧版 SQLite schema 的日志不自动迁移,首次运行会看到数据库 schema 变更提示
  5. 服务端工具的内存限制——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」并非夸张。