New release of LLM adds support for reasoning traces, OpenAI Responses, server-side tools, and smarter logging

Simon Willison

LLMの新バージョン、思考過程の表示やOpenAI Responses、サーバーサイドツール、よりスマートなログに対応

原文は Simon Willison により に公開されました。 このブログを購読する

今朝、LLM 0.32をリリースしました。プロジェクト開始以来、最も大きなアップデートです。新バージョンでは、思考過程(reasoning traces)の可視化、プロバイダー側で実行されるサーバーサイドツール、コンテンツアドレス方式に再設計されたSQLiteログ、新モデル、そしてOpenAI Responses APIによって実現した新機能に対応しました。あわせて、大幅なアップデートを含むllm-anthropicプラグインの新バージョンもリリースしています。

LLM CLIユーザー向けの主な新機能

推論モデルに対してLLMを実行すると、現在は思考過程が標準エラー出力に表示されるようになりました。これにより、別のツールにパイプする可能性のある標準出力に含めることなく、モデルが何を「考えている」かを確認できます。この表示をオフにするには-R/--hide-reasoningを追加してください。

macOSのターミナルウィンドウで llm 'think about the best thing about pelicans' を実行している様子 - 灰色のテキストで Exploring pelican qualities という思考過程が表示された後、白いテキストで次の回答が出力される:The best thing about pelicans is their wonderfully oversized, practical design: that enormous bill and pouch look comical, but they make pelicans remarkably skilled fishers. Even better, many species cooperate—working together to herd fish before scooping them up. They’re a great mix of goofy, graceful, and surprisingly clever.

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プラグインは、WebSearchWebFetchCodeExecution、そして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のインストール不要)経由で、ローカルホストのLM Studio APIで動作しているGemma 4 12Bに対して、このコマンドでプロンプトを実行する例です。ついでに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 The result of 3434 * 2434 is 8,358,356. と表示されている。

Python APIの新機能

LLMのPython APIでは、これまで会話を作成してからメッセージを1つずつ送信する必要がありました。これは、各リクエストがそれ以前のメッセージの完全な履歴を運ぶという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 logsllm logs --jsonの両コマンドは、この形式を再び扱いやすい形に変換するようにアップグレードされています。

その他の変更点

今回のリリースには、他にもたくさんの変更が含まれています。0.32のリリースノートはかなり網羅的で、0.32rc20.32rc0.32a30.32a2、そして0.32a0のノートを合わせれば、不足はないはずです。

既存のLLMプラグインはすべて引き続き動作するはずですが、追加のモデルを提供するプラグインは、新しいストリーミングイベントシステムに完全に参加するために0.32へのアップグレードが必要になります。ドキュメントには、構造化メッセージとストリーミングイベントを使ったプラグインの実装ガイドがあります。

私自身のプラグインもいくつか更新しました:

  • llm-anthropic 0.26はClaude 5ファミリーのモデルに対応し、さらにWebSearchWebFetchCodeExecutionAnthropicMCPのサーバーサイドツールを追加しています。
  • llm-geminillm-openrouter、そしてllm-mistralもほぼ対応完了で、近日中にリリース予定です。

LLMもいつの間にかエージェントフレームワークに

今回のリリースにおける低レベルなツール周りの変更の多くは、Datasette Agentのニーズによって推進されました。LLMの開発を始めた当初、「エージェント」という言葉の定義があまりに曖昧だったため、あえて使わないようにしていました。2025年9月に、「LLMエージェントは目標を達成するためにループ内でツールを実行する」という定義が十分に定着したと考えるようになり、この言葉を避けるのをやめました。

ツールチェーンは、人間の承認のために一時停止したり、保存されたメッセージ履歴から再開したりできるようになりました — いずれもDatasette Agentに必要な機能です。

今のLLMを見ると、かなりエージェントらしくなってきたと感じます。異なる提供元の異なるツールを異なるモデルとワンライナーで自由に組み合わせられるCLIユーティリティがあり、さらにDatasette Agentllm-coding-agentのようなシステムを構築できるほど強力なPythonライブラリを備えているのは、なかなか面白いことです。

LLMの次のバージョンでは、「エージェント」という概念をコアライブラリに組み込むかもしれません。まだどのような形になるか模索中です。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント