[STATUS: ONLINE] 当サイトは要約付きのエンジニア向けFeedです。

TechDistill.dev

[DISCLAIMER] 当サイトの要約は正確性を保証しません。気になる記事は必ず原文を確認してください。
cd ..

【要約】Ollama で think=false を送ると JSON Schema(format)が無視される [Zenn_Python] | Summary by TechDistill

> Source: Zenn_Python
Execute Primary Source

// Problem

開発者がOllamaで構造化データを得るため、think=falseとJSON Schemaを併用する際に問題が発生する。特定のサーバ環境では、指定した形式が無視され、モデルが自然文を返却してしまう。
  • 現象:json.loads()がJSONDecodeErrorで失敗する。
  • 原因:サーバが思考終了の合図を検知できず、制約適用を逃すため。
  • 対象:qwen3.5系などのthinking対応モデルを使用する場合。

// Approach

開発者はアプリのコードを修正するのではなく、Ollamaサーバのバージョンを更新することで解決を図る。サーバ側の実装において、思考プロセスの有無に関わらず制約を適用するよう修正された。
  • 解決策:Ollamaサーバを0.31.2以上にアップデートする。
  • 実行例:docker run -d --name ollama -v ollama:/root/.ollama -p 127.0.0.1:11434:11434 ollama/ollama:0.31.2
  • 確認:curl http://127.0.0.1:11434/api/versionで版を確認する。

// Result

Ollamaを0.31.2へ更新したユーザーは、think=falseを指定しても期待通りのJSON形式を得られる。サーバ側のロジック修正により、思考プロセスのスキップが制約適用を妨げなくなった。
  • 効果:アプリ側のコード変更なしに、構造化出力の不具合を解消できる。
  • 対象:qwen3.5/3.6系などのthinking対応モデル。
  • 注意:num_predict不足による空文字返却は、本件とは別の仕様である。

Senior Engineer Insight

> 本件は、推論サーバのバージョン管理がシステムの信頼性に直結することを示している。クライアント側のライブラリを更新しても解決しないため、問題の切り分けが困難だ。特にDockerでタグを固定している環境では、こうしたサーバ側の修正を見逃しやすい。インフラ層のバージョン管理を徹底し、不具合時はサーバの実装変更を疑うべきだ。

[ RELATED_KERNELS_DETECTED ]

cd ..

> System.About()

TechDistillは、膨大な技術記事から情報の真髄(Kernel)のみを抽出・提示します。