ホームへ戻る

GitHub Repo

Ollama 0.34.4、思考モデルの構造化出力を1回の生成に変更

新版ではフォーマット制約の適用を遅らせ、思考と回答の間に発生していた2回目のプリフィルを省く。ツール呼び出しとの組み合わせやストリーミングの解析は引き続き検証が必要で、公式のエンドツーエンドの高速化数値はまだ公表されていない。

Mattruffoni · CC BY-SA 4.0 · Image source
zh-Hant

Ollamaは9月23日に0.34.4をリリースし、思考モデルの構造化出力を1回の生成で処理する方式に変更した。対象はMLXとllama-serverの両実行経路。この更新は、ローカルでのデータ抽出やエージェントのワークフローに直接影響する。アプリケーションには解析可能なJSONが必要であり、推論エンジンも思考と回答を正しく分離する必要がある。[リリースノート](https://github.com/ollama/ollama/releases/tag/v0.34.4)

従来の処理では、まずモデルに自由に生成させ、パーサーが回答内容を検知すると生成をキャンセル。その後、思考結果をプロンプトに戻し、フォーマット制約をかけて再生成していた。メンテナーによると、この再開始によって2回目のプリフィルが発生し、境界をまたぐ出力断片が破棄される。MLXでは余分な文字がJSONに混入する可能性もあった。実際に、思考を有効にすると回答の前にピリオドが入り、厳密な解析に失敗するというユーザー報告が出ていた。[実装の説明](https://github.com/ollama/ollama/pull/18479)、[問題報告](https://github.com/ollama/ollama/issues/18441)

新版では、パーサーが思考の終了を示す文字列を提供し、実行エンジンが同じ生成処理の中で、境界を越えてからフォーマット制約を適用する。MLXは構造タグを使用し、llama-serverはスキーマから変換した文法に終了文字列を組み込む。プロンプトのプリフィルは1回で済み、2つのリクエストにまたがる計測値を結合する処理も不要になる。[マージされた変更](https://github.com/ollama/ollama/pull/18479)

開発者は引き続き`format`でJSON Schemaを渡し、PydanticやZodで返却データを検証できる。公式ドキュメントには現在、Ollama Cloudは構造化出力をまだサポートしていないと明記されている。今回のローカルエンジンの更新を、そのままクラウドサービスにも当てはめることはできない。[インターフェースのドキュメント](https://docs.ollama.com/capabilities/structured-outputs)

ストリーミングを組み込む際は、引き続き思考の断片と回答内容を分離する必要がある。公式インターフェースは両者を別々に返すため、フロントエンドは回答が始まった時点で表示を切り替えられる。後段のパーサーには回答フィールドだけを渡すべきだ。また、今回の処理変更の効果を把握するには、技術的なテストで思考にかかる時間と実際の回答生成にかかる時間を分けて測定する必要がある。[思考出力のドキュメント](https://docs.ollama.com/capabilities/thinking)

1回の生成にも制約はある。モデルが思考段階で終了し、フォーマットに従った回答を生成しない場合がある。フォーマット制約が有効になった後は、通常、ツール呼び出しで回答を置き換えることはできないが、Harmony形式には例外がある。思考、ツール、固定スキーマを同時に使うチームは、これらの組み合わせをアップグレード時のテストに含めるべきだ。[実装の説明](https://github.com/ollama/ollama/pull/18479)

リリースノートには、比較可能なエンドツーエンドの速度測定結果は示されていない。技術面で追跡すべき指標は、完全なJSONの検証通過率、回答開始までのレイテンシ、再試行回数だ。モデル、プロンプト、出力上限を固定して新旧バージョンを比較する必要がある。処理の変更から推測すると、2回目のプリフィルを省くことは長いプロンプトで有利に働く可能性があるが、実際の効果はワークロードに左右される。また、フォーマットが正しくても、各フィールドの内容が業務要件を満たしているかどうかの検証は依然として必要だ。

出典

  1. Ollama v0.34.4 發布說明
  2. PR #18479:思考模型的單次生成結構化輸出
  3. Issue #18441:MLX 思考輸出在 JSON 前加入多餘句點
  4. Structured Outputs
  5. Thinking