LLM 新版本支援推理軌跡、OpenAI Responses、伺服器端工具與更智慧的日誌功能
原文由 Simon Willison 于 發布,訂閱此部落格
今天早上我發布了LLM 0.32,這是自專案最初發布以來最重要的一次改版。新版支援可視化的推理軌跡、由供應商提供的伺服器端工具、重新設計的內容定址 SQLite 日誌、新模型,以及透過 OpenAI Responses API 帶來的新功能。我也同步發布了llm-anthropic 外掛的新版本,本身也有大幅更新。
給 LLM CLI 使用者的亮點功能
現在用 LLM 執行推理模型時,會將其推理軌跡顯示到 standard error,讓你能看到模型在「思考」什麼,而這些資訊不會混入你可能會導向(pipe)到其他工具的標準輸出。加上 -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 現在也算是一個 Agent 框架了
這次版本中不少底層工具的變更,都是為了滿足 Datasette Agent 的需求。當初開始開發 LLM 時,「agent」這個詞的定義還非常模糊,所以我刻意避免使用。在2025 年 9 月,我逐漸接受了「An LLM agent runs tools in a loop to achieve a goal」(LLM Agent 會在迴圈中執行工具以達成目標)這個說法已經足夠普及,讓我可以不再迴避這個詞彙。
工具鏈現在可以暫停以等待人工核准,並從已儲存的訊息歷史中恢復——這兩項都是 Datasette Agent 所需要的。
以今天的 LLM 來看,它在我眼中已經越來越像一個 Agent 框架了。能有一個 CLI 工具,用一行指令就能混合搭配來自不同來源、不同模型的多種工具,同時還包含一個強大到足以打造 Datasette Agent 和 llm-coding-agent 這類系統的 Python 函式庫,確實很有意思。
或許下一個版本的 LLM 會直接把「agent」的概念內建到核心函式庫中。我還在思考那會是什麼樣子。
隨機一篇部落格
留言
登入後參與討論