"high"を指定したのに変わらない?Ollama新APIでthinkingレベルを検出してもQwen3.8では罠がある

"high"を指定したのに変わらない?Ollama新APIでthinkingレベルを検出してもQwen3.8では罠がある

AI実用ラボ

AI実用ラボ

Ollamaで複数のモデルを切り替えるエージェントを作っていて、モデルごとに「思考の深さ(thinkingレベル)」を自動で切り替えたいと思ったことはないだろうか。2026年9月19日公開のOllama v0.34.3で、まさにそれを可能にする新機能が/api/showに追加された。

ところが、Qwen3.8ではこの仕組みを素直に使うと、"high"や"max"を指定してもエラーが出ないまま何も変わらない、という罠が報告されている。実測データとあわせて中身を見ていく。

Ollama v0.34.3から/api/showがモデルごとの対応thinkingレベルと既定値を返すようになった。ただしQwen3.8:27bでは"high"/"max"/存在しない文字列を指定してもエラーにならず、静かに既定の"medium"が使われる(GitHub Issue #18632、2026-09-25時点でopen)。回避策は、/api/showが返すthinking.valuesの文字列をそのまま渡すこと(Qwen3.8なら"xhigh")。TL;DR
ユウ

Ollamaの新しいAPIでモデルごとに使えるthinkingレベルが分かるようになったって聞いたので、さっそくthink: "high"を送ってみたんですけど…エラーは出ないのに、なんだか結果が変わってない気がするんです。

ラボ長

それ、Qwen3.8で報告されている罠かもしれません。エラーが出ないぶん気づきにくいんですが、順番に見ていきましょう。

この記事でできること

  • Ollama v0.34.3で追加された/api/showのthinking自動検出機能の使い方が分かる
  • thinkパラメータに指定できる値の種類と、それぞれの意味が分かる
  • Qwen3.8で"high"/"max"を指定しても効かない具体的な症状と実測データが分かる
  • 今すぐ使える回避策と、この問題の現状(2026-09-25時点で未解決)が分かる

対象読者

【中級者向け】Ollamaで複数モデルを切り替えて動かすエージェントやクライアントを実装している方を想定している。APIレベルでthinking(推論)の深さを制御しようとしている方向けのため、curlでのAPI呼び出しに抵抗がない中級者向けとした。

確認環境・確認日

  • 確認日: 2026-09-25
  • 対象: Ollama v0.34.3(2026-09-19公開)、Qwen3.8:27bのthinkingレベル自動検出機能
  • 本記事は公式GitHubリリースノート、実装・ドキュメント追加PR、公式ドキュメント、GitHub Issueの原文を直接確認して作成。GitHub Issue内の実測データ(報告者の環境: Windows 11、NVIDIA CUDA、Ollama 0.34.4)はそのまま引用している

背景:なぜ「thinkingレベルの自動検出」が必要になったのか

Ollamaではgpt-ossやgemma4、qwen3.8のように、思考過程(thinking)を出力できるモデルが増えている。ただしモデルによって対応しているthinkingレベルの名称や段階数はバラバラだ。あるモデルはtrue/falseの2択、別のモデルは"low"/"medium"/"high"のような複数段階、というように仕様が統一されていない。

これまでは、クライアント側(エージェントやデスクトップアプリ)がどのモデルにどのレベルが使えるかを知る手段がなく、決め打ちで実装するしかなかった。この状況を解消するために追加されたのが、/api/showでモデルごとの対応レベルと既定値を返す機能である。実装したOllama開発者は、Pull Request本文で次のように述べている。

Expose supported thinking values and defaults through /api/show and ollama show, so clients can offer controls that match each model. Codex CLI and desktop configuration use this metadata to populate available reasoning levels.PR #18473 本文より

「クライアントがモデルごとに合った操作を提供できるように、対応するthinking値と既定値を/api/showとollama showから公開する。Codex CLIやデスクトップ設定は、このメタデータを使って選べる推論レベルを表示する」という趣旨だ。実際にCodex CLIのようなクライアントが、モデルを切り替えるたびに「このモデルはどのレベルまで選べるか」を表示するために、このメタデータを使っている。

この機能は2026-09-18にPR #18473としてマージされ、翌週2026-09-23にはドキュメント追加のPR #18501もマージされた。9月19日公開のv0.34.3リリースノートには、次のサンプルが載っている。

curl http://localhost:11434/api/show -d '{"model": "glm-5.3-flash:cloud"}'

{
  "thinking": {
    "values": ["low", "high", "max"],
    "default": "max"
  }
}

使ってみる:/api/showの呼び出し方とthinkパラメータの仕様

/api/showにモデル名を渡すと、レスポンスのthinkingフィールドに、そのモデルが対応する値の配列(values)と既定値(default)が入って返ってくる。

curl http://localhost:11434/api/show -d '{"model": "gpt-oss"}'

レスポンス例(公式ドキュメントより)。

{
  "thinking": {
    "values": ["low", "medium", "high"],
    "default": "medium"
  }
}

このvaluesに含まれる文字列を、/api/chatや/api/generateを呼ぶときのthinkパラメータへそのまま渡す。公式ドキュメントではthinkパラメータの意味を次の4通りに整理している。

  • true:thinking(思考過程)の出力をリクエストする
  • false:thinking出力をリクエストしない(モデルが許可する場合)
  • 未指定(null):モデルの既定値(/api/showのdefault)を使う
  • 文字列:thinking.valuesに含まれるサポート対象レベルの中から1つを選ぶ

推論内容と回答は別フィールドで返る。/api/chatならmessage.thinkingとmessage.content、/api/generateならthinkingとresponseだ。ここまでが「仕様どおりに動けば」の話である。次の節で、Qwen3.8ではこの仕様どおりに動かない具体例を見ていく。

罠:Qwen3.8では"high"/"max"を指定しても"medium"のまま

2026-09-25(本記事作成の数時間前)に報告されたGitHub Issue #18632は、Qwen3.8:27bで/api/showが返すthinking.valuesと、実際に/api/chatが受け付ける値が食い違っていることを指摘している。2026-09-25時点でこのIssueはopenのまま、Ollama側の修正は行われていない。

報告によると、qwen3.8:27bに対して/api/showを呼ぶと、thinkingレベルは次のように返ってくる。

{"thinking": {"values": [false, "low", "medium", "xhigh"], "default": "medium"}}

つまり、Qwen3.8で公式に対応しているのはfalse・"low"・"medium"・"xhigh"の4つだけで、"high"や"max"はこのモデルの対応リストに含まれていない。ところが、他の多くのモデルでは"high"や"max"が一般的な段階名として使われているため、クライアント側はつい"high"や"max"を送ってしまう。報告者の検証によると、Qwen3.8でこれらの値を送ってもエラーにはならず、HTTP 200が返り、中身は既定値"medium"を指定した場合と完全に同じだった。存在しない文字列(報告では"banana"という値でテストしている)を送った場合も同様に、エラーにならず"medium"と同じ結果になったとされている。

実測比較表で見る:出力が完全に同じになる証拠

報告者は同一プロンプト・temperature: 0・seed: 1という条件を固定した上で、thinkパラメータだけを変えて5パターンを比較している。HTTPステータス、thinking部分の文字数、evalトークン数、thinking内容のSHA-1ハッシュ値を並べたものが次の表だ(GitHub Issue #18632の実測値をそのまま引用)。

think値HTTPステータスthinking文字数evalトークン数thinking内容のSHA-1
"medium"20013,2524,585dc2c173362
"high"20013,2524,585dc2c173362
"max"20013,2524,585dc2c173362
"banana"20013,2524,585dc2c173362
"xhigh"20045,36712,1854d06ef4288

この表の読み解き方はシンプルだ。"medium"・"high"・"max"・"banana"の4行は、文字数もトークン数もSHA-1ハッシュ値も一字一句まで完全に一致している。つまりOllamaは"high"や"max"、意味のない"banana"という文字列を受け取っても、内部では黙って"medium"として処理しているということだ。一方"xhigh"だけは、thinking文字数が3倍以上(45,367字)、evalトークン数も倍以上(12,185)に増え、SHA-1ハッシュ値も別の値になっている。Qwen3.8の最上位レベルである"xhigh"を実際に引き出せるのは、この表の中では"xhigh"という文字列を直接指定した場合だけだった、ということになる。

ユウ

HTTPステータスが200のままなんですね…エラーになってくれた方が、まだ気づけたのに。

ラボ長

そうなんです。エラーなら実装のどこかで気づけますが、成功扱いで既定値にすり替わるので、出力の中身まで比較しないと分かりません。次の実例を見てください。

気づけない実害:OpenClawの例

この問題が厄介なのは、クライアント側が気づく手段がないことだ。HTTPステータスは200(成功)のままで、エラーメッセージも出ない。報告では、別のOSSプロジェクトであるOpenClawの実例が挙げられている(openclaw/openclaw#157762として報告)。OpenClawは「High」設定と「Maximum」設定の両方でthink: "high"を送信する実装になっていたが、Qwen3.8に対しては両方とも実質的に"medium"のまま動いており、設定を変えても何も変わっていないことに開発者が気づけていなかった、という内容だ。汎用的な段階名(low/medium/high/max)に頼ったクライアント実装が増えている中、Qwen3.8は"high"という段階名を持たない最初の主要モデルであるため、同じ落とし穴に気づかずにいるクライアントが他にもある可能性がある。

今すぐできる回避策

Ollama側の修正を待たずに今すぐできる対処は、汎用的な段階名を決め打ちで送るのではなく、/api/showが返すthinking.valuesに含まれる文字列をそのまま使うことだ。Qwen3.8の場合は次の手順になる。

  • 対象モデルに対して/api/showを呼び、thinking.valuesを取得する(Qwen3.8なら[false, "low", "medium", "xhigh"])
  • 最上位のthinkingレベルが欲しい場合は、"high"や"max"ではなく、取得した配列の中の最後の文字列(Qwen3.8では"xhigh")をそのままthinkパラメータに渡す
  • "low"/"medium"などの中間レベルも、配列に含まれる文字列だけを使い、含まれない段階名を推測で送らない

つまり、モデルをまたいでlow/medium/high/maxという固定の4段階を決め打ちにするのではなく、モデルごとに/api/showで対応レベルを確認してから値を組み立てる実装にすることが、現時点での確実な回避策になる。

この問題は直っているのか

GitHub Issue #18632は、本記事の確認時点(2026-09-25)で「open」のまま、Ollama側の修正はまだ行われていない。報告者は解決案として、(1)Qwen3.8用のレンダラー内で"high"/"max"を"xhigh"へ変換して対応させる、(2)thinking.valuesにない文字列は400エラーで拒否し、対応する値の一覧を返す、という2つの案を提示しているが、どちらを採用するかはまだ決まっていない。

なお、Qwen3.8の"xhigh"をどう指定すればよいかという疑問自体は、今回のIssueより1か月近く前の2026-08-28に報告されたIssue #18091(「Does Ollama Qwen3.8-27B uses reasoning "xhigh"?」)から存在していた。thinkingレベルを外部から確認できる仕組みがなかった当時から、Qwen3.8の"xhigh"にどうアクセスすればよいのか分かりにくい状態が続いていたことになる。

早見表

thinkに渡す値Qwen3.8での実際の挙動(2026-09-25時点)
"xhigh"対応。最上位のthinkingレベルで動作する
"medium"対応。既定値と同じ動作
"low"対応(thinking.valuesに含まれる)
false対応(thinking.valuesに含まれる。thinking出力なし)
"high"非対応の文字列。エラーにならず"medium"と同じ結果になる
"max"非対応の文字列。エラーにならず"medium"と同じ結果になる
thinking.valuesに無い任意の文字列エラーにならず"medium"と同じ結果になる
ユウ

分かりました、これからは決め打ちのhigh/maxじゃなくて、必ず/api/showで確認してから値を組み立てるようにします。

ラボ長

それが確実です。Issueはまだopenなので、修正されたら早見表も更新しますね。

まとめ

  • Ollama v0.34.3(2026-09-19公開)から、/api/showがモデルごとの対応thinkingレベルと既定値を返すようになった
  • Qwen3.8:27bではthinking.valuesが[false, "low", "medium", "xhigh"]で、"high"/"max"はこの中に含まれない
  • "high"/"max"や存在しない文字列をthinkに渡してもエラーにならず、静かに"medium"が適用される(GitHub Issue #18632、2026-09-25時点でopen)
  • 実測データでは"high"/"max"/"banana"/"medium"の出力が完全に一致し、"xhigh"だけが別の結果になっていた
  • 回避策は、汎用的な段階名を決め打ちにせず、/api/showが返すthinking.valuesの文字列をそのまま使うこと

参考にした公式情報


あなたも記事の投稿・販売を
始めてみませんか?

Tipsなら簡単に記事を販売できます!
登録無料で始められます!

Tipsなら、無料ですぐに記事の販売をはじめることができます Tipsの詳細はこちら
 

この記事の販売者

AI実用ラボ

最新情報から、仕事や暮らしの面倒な作業を、AIで少し楽にする方法を紹介します。専門知識がない方にも分かるよう、準備・操作・完成例・確認方法を順番に説明。必要な道具や費用、つまずいた時の対処もまとめます。難しい言葉はできるだけ使わず、必要な用語はその場で説明します。まずは身近な作業から、無理なくAIを試したい方に向けた情報をお届けします。

この販売者が書いた他の記事

  • Claudeの教科書:初めての人のための使い方ガイド(全11章)

    ¥1,480
    1 %獲得
    (14 円相当)
  • Claude Code Auto Modeの分類器課金が変わった:claude -pには関係ない理由

  • Claude CodeのMCPツール説明文に2,048字上限、実際のサーバーで測ってみた

関連のおすすめ記事

  • ゼロから3日で始動|AIコンサル大全

    ¥124,800
    1 %獲得
    (1,248 円相当)
    水口一星

    水口一星

  • 【AI自動化・マネタイズ実例書】たった2週間〜機械オンチなママでもできた全作業過程

    ¥38,300
    1 %獲得
    (383 円相当)
    みお

    みお

  • 【5年更新型コンテンツ】AIを最大活用するためのリテラシー強化バイブル

    ¥59,800
    1 %獲得
    (598 円相当)
    こはく

    こはく