Qwen3.6 preserve_thinkingとは|Qwen3.8との既定値の違い

CHATGPT / AIChatGPTなどの生成AIを活用して運営・記事制作・更新を行っています。制作方針

Qwen3.6とQwen3.8のpreserve_thinkingを比較。履歴保持の既定値、reasoning_effort、ローカルAPIとQwen Cloudでの指定方法を整理します。

思考を保持してKVキャッシュを再利用し、複数ステップを一貫して進める前後比較の図解

この記事でわかること

Qwen3.6のpreserve_thinkingを基礎に、Qwen3.8で変わった既定値とreasoning_effortまで整理した記事です。

  • preserve_thinkingが解決しようとする課題
  • エージェントワークフローでの利用イメージ
  • 検証時に見るべきポイント

おすすめ読者: Qwen系モデルをエージェント用途で使う人、思考状態やコンテキスト継続の扱いを検討している人。

読む前の注意: コマンド、ライブラリ、モデルの仕様は環境やバージョンで変わります。実行前に手元の環境と公式情報を確認してください。

情報確認日: 2026年8月23日(公式ページの現行内容を確認)
固定した版: Qwen3.6-35B-A3B 995ad96e、Qwen3.6-27B 6a9e13bd、Qwen3.8-27B 1d4bf0f2
検証区分: Qwen公式モデルカードと公式Qwen Codeリポジトリによる机上調査です。下記の効果は公式説明に基づく期待値で、筆者の性能測定結果ではありません。
未検証範囲: 各ランタイム/クライアントの任意パラメータ転送、タスク成功率、token削減量、KV cache hit率、応答速度。

2026年8月更新:Qwen3.8では保持が既定で有効

モデルpreserve_thinkingの既定変更方法推論深度
Qwen3.6最新ターン中心。全履歴保持は明示的に有効化preserve_thinking: trueランタイム側の対応を確認
Qwen3.8全履歴の保持が既定で有効無効化はpreserve_thinking: falsereasoning_effortのxhigh(既定)/medium/low

Qwen3.8へ移行した場合、Qwen3.6向けの「trueを付けて有効化する」手順をそのまま必須条件として扱わないでください。反対に履歴を短くしたい場合は、Qwen3.8で明示的にfalseを渡します。ローカルOpenAI互換APIではchat_template_kwargs内、Qwen Cloudではpreserve_thinkingを直接指定します。

Qwen3.6の概要

Qwen3.6のpreserve_thinkingは、多ターン会話をchat templateへ変換するときに、過去のassistantメッセージに含まれるthinking blockを保持するためのオプションです。

公式モデルカードは、エージェント場面で意思決定の一貫性を高め、冗長な再推論を減らし、KV cache利用を改善できる場合があると説明しています。効果量はタスクと配信実装に依存するため、常に向上すると断定はできません。


既定動作との違い

Qwen3.6の既定動作では、最新のユーザーメッセージを処理したときのthinking blockだけを保持します。preserve_thinking: trueを指定すると、履歴中のthinking traceも保持してモデルへ渡せます。

履歴のシリアライズ結果がターン間で変わると、次のような影響が出る可能性があります。

  • KV cache: 共通prefixが変化すれば再利用範囲が短くなる可能性があります。
  • 意思決定: 過去のreasoning traceを使わないため、長いエージェント処理で判断の一貫性が変わる可能性があります。

preserve_thinking の動作

基本的なパラメータ

パラメータ説明
"enable_thinking": TrueThinking mode(思考モード)を有効化
"preserve_thinking": True過去の思考プロセスを全ターンにわたって保持

コード例(OpenAI SDK 互換)

from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="Qwen/Qwen3.6-35B-A3B",
    messages=messages,
    max_tokens=32768,
    temperature=0.7,
    top_p=0.8,
    extra_body={
        "top_k": 20,
        "chat_template_kwargs": {
            "enable_thinking": True,
            "preserve_thinking": True,   # 重要!
        },
    },
)

API(Alibaba Cloud Model Studio / DashScope)の場合

# Qwen3.6 のオープンソース モデル用
extra_body={"chat_template_kwargs": {"preserve_thinking": True}}

# Alibaba Cloud Model StudioのOpenAI互換Python SDK用
extra_body={"preserve_thinking": True}  # chat_template_kwargs は不要

DashScopeのraw HTTP APIでは、{"parameters": {"preserve_thinking": true}}の形で送ります。Model Studioの対応モデルIDは更新されるため、オープンモデルのQwen/Qwen3.6-35B-A3Bと、クラウドのqwen3.6-plusなどを同一のallowlistとして扱わないでください。

Hugging Face Transformers / ローカル推論の場合

# 利用中のTransformers版が対応していることを確認してchat templateへ渡す
from transformers import AutoProcessor

processor = AutoProcessor.from_pretrained("Qwen/Qwen3.6-35B-A3B")
prompt = processor.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
    preserve_thinking=True,
)

指定場所を混同しないでください。 OpenAI互換のローカルendpointでは、SDKのextra_body内に{"chat_template_kwargs": {"preserve_thinking": true}}を入れます。Alibaba Cloud Model Studioでは{"preserve_thinking": true}を直接送ります。extra_bodyはOpenAI Python SDKの引数名であり、raw HTTP JSONのフィールド名ではありません。


なぜ重要なのか

1. KV キャッシュの再利用効率化

  • 履歴prefixが同一に保たれ、server側もprefix cacheを利用する構成では、再利用範囲が広がる可能性があります。
  • 共通prefixが保たれる構成では、KV cache利用が改善する可能性があります。
  • 実際の改善幅はserver、template、履歴の作り方を固定して測定します。

2. エージェントワークフローの一貫性向上

  • モデルが履歴中のthinking traceを参照できるため、意思決定の一貫性を高められる可能性があります。
  • ツール選択や引数の正確さは保証されないため、JSON Schemaによる出力検証と権限制御は別途必要です。
  • マルチステップタスクでは、成功率と再試行回数をoff/onで比較します。

生成結果をschemaで受けるだけでなく、アプリケーション側で再検証する二重検証の設計も合わせて確認すると、エージェントの失敗を切り分けやすくなります。具体的な構成はOllama構造化出力の二重検証設計で整理しています。

3. トークン消費の削減

  • 公式説明では、冗長な再推論が減り、総token数が減る場合があるとされています。
  • 一方で履歴自体は長くなるため、入力token数を含めた総量で確認します。

有効化の検証方法(テスト手順)

次の2ターンは、履歴の扱いを観察するための簡易プローブです。モデル出力は確率的であり、この一例だけで対応可否や性能を判定しないでください。

  1. 最初のメッセージ:
    can you come up with two random 20-digit numbers and validate that they are 20 digits, do not use any tools, and only give me one of the two and nothing else

  2. 次のターンで確認:
    now give me the second number that you came up with

preserve_thinking の設定結果
off2ターン目の回答、入力token数、cache指標を記録
on同じseed・sampling・履歴形式で記録し、複数回比較

クリエイター向け実装の注意点

クライアント対応を確認する方法

  • クライアントが任意のchat_template_kwargsをrequest bodyへ転送できるか確認します。
  • 転送後のserver logまたはtemplate展開結果で、preserve_thinkingが実際に反映されたか確認します。
  • LM Studio、Ollama、KoboldCppなどの対応状況は更新されるため、製品名だけで可否を固定せず、利用版の公式資料と実リクエストを確認します。

Qwen Codeの実装

Qwen CodeのPR #2897は2026年4月にmergeされた履歴資料です。2026年8月22日公開のv0.22.0ではPR固有の内部関数や時間条件を前提にできないため、現在の公開API仕様ではなく設計経緯として参照し、利用するreleaseまたはcommitの実装を確認します。


Qwen3.6 のアーキテクチャコンテキスト

Qwen3.6-35B-A3B (オープンソース版)

項目値
総パラメータ数35B
活性化パラメータ数3B(MoE 形式)
デフォルトコンテキスト262,144 tokens
最大拡張1,010,000 tokens (YaRN)

Qwen3.6-Plus (クラウド/API版)

クラウド版のcontext上限、出力上限、速度、課金はサービス更新や提供地域で変わります。本記事では固定値を再掲せず、利用時点のAlibaba Cloud Model Studio公式ドキュメントとAPI応答を確認します。

Qwen3.6 の思考モード

  • デフォルトで Thinking mode が有効です。Qwen3で案内された/think//no_thinkをQwen3.6の切替方法として流用せず、APIまたはchat templateのparameterを使います。
  • thinkingの表現形式はruntimeによって、本文内のblockまたは別フィールドになる場合があります。
  • 直接回答を得たい場合は、chat_template_kwargs: {"enable_thinking": False} を設定してください。

参考情報源


まとめ

preserve_thinkingは、thinking履歴のシリアライズをエージェント用途に合わせて制御する選択肢です。Qwen3.6では全履歴保持を有効化し、Qwen3.8では既定で有効な保持を必要に応じて無効化する、という違いがあります。

  1. エージェントアプリケーション(マルチステップのツール呼び出し)
  2. コード生成・デバッグ(リポジトリレベルの複雑な問題解決)
  3. 長文コンテキスト処理(一貫性の維持)
  4. KV キャッシュの最適化が必要な推論環境

ローカルのOpenAI互換APIではchat_template_kwargsにネストし、Qwen CloudのOpenAI互換APIではpreserve_thinkingを直接指定します。DashScope raw HTTPではparameters配下です。クライアントからserverまでフィールドが保持されることを確認し、off/onでタスク成功率、総token数、cache指標、遅延を比較してください。


外部クライアントから使うとき

OpenCodeなどの汎用クライアントから利用する場合は、クライアントが任意のrequest bodyフィールドをOpenAI互換endpointへ転送できることが前提です。設定名や転送挙動は更新されるため、古い設定例をそのまま信頼せず、まずraw HTTPでserver側の対応を確認します。

raw HTTPでの確認例

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen3.6-35B-A3B",
    "messages": [
      {"role": "user", "content": "2段階で解く短い計画問題を作ってください"}
    ],
    "stream": false,
    "chat_template_kwargs": {
      "enable_thinking": true,
      "preserve_thinking": true
    }
  }'

raw HTTPではchat_template_kwargsをrequest bodyへ直接入れます。Python SDKのextra_bodyは、標準引数にないフィールドをHTTP bodyへ追加するためのSDK側ラッパーなので、JSON内に"extra_body"というキーを作りません。

クライアント接続時のチェック

  1. 同じendpointへ上のcurlを送り、HTTP statusとserver logを確認します。
  2. クライアントが送った実requestでchat_template_kwargsが欠落していないか確認します。
  3. off/onの双方で同じ会話履歴、sampling、seed、model revisionを使います。
  4. タスク成功率、総input/output token、cache hitまたはprefix再利用指標、TTFTを複数回記録します。

Qwen CodeとOpenCodeは別プロジェクトです。Qwen Codeのthinking履歴処理を調べる場合は、利用releaseの実装を正本とし、PR #2897は過去の設計資料として参照してください。別クライアントへその内部挙動を当てはめないでください。


調査日: 2026年8月23日。Qwen3.6/Qwen3.8公式モデルカード、Alibaba Cloud資料、Qwen Code v0.22.0を確認。

よくある質問

preserve_thinkingは常に有効にすべきですか?

用途によります。長いタスクやエージェント処理では効果を見込めますが、短い応答ではコストや挙動を確認して判断してください。

検証時に何を比べるべきですか?

タスク成功率、再実行時の一貫性、トークン使用量、応答遅延を同じ条件で比較すると判断しやすいです。

ローカル実行でも使えますか?

実装やモデル提供形態に依存します。使うランタイムとモデルの対応状況を確認してから検証してください。

Qwen3.8でもtrueを指定する必要がありますか?

公式Qwen3.8-27Bモデルカードではpreserve_thinkingは既定で有効です。履歴保持を止める場合にfalseを指定し、利用する推論ランタイムがparameterを正しく渡すか確認してください。

表を拡大

左右にスワイプして読めます