DeepSeek Thinking Mode: Toggle, reasoning_effort & Tools 400
📑 Table of Contents
Introduction
Search DeepSeek thinking mode, and many people assume you need a separate “reasoner” model ID. You do not.
On the DeepSeek API, both deepseek-v4-pro and deepseek-v4-flash support thinking mode: the model emits a chain of thought (reasoning_content) before the final answer (content). It is on by default, with effort defaulting to high. This site is an independent community; treat the official Thinking Mode guide as source of truth for parameters, and the pricing page for billing and peak windows.

I. What DeepSeek Thinking Mode Is — vs the Web App
| Surface | How you control thinking |
|---|---|
| DeepSeek web app | In-product think / non-think switch (labels may change by version) |
| DeepSeek API Chat Completions | thinking + reasoning_effort |
| Anthropic-compatible endpoint | thinking + output_config.effort |
| Responses API / Codex | reasoning.effort (none turns thinking off) |
In short: V4 Pro / Flash are the models; thinking mode is a call switch — not a third model name. Pick the model by task hardness; use parameters for whether it should “think longer.” Flagship selection: What is DeepSeek V4 Pro. Codex model_reasoning_effort: DeepSeek Codex setup.
II. On / Off: Minimal Chat Completions Example
With the OpenAI Python SDK, put thinking in extra_body; reasoning_effort can stay top-level:
from openai import OpenAI
client = OpenAI(
api_key="YOUR_KEY",
base_url="https://api.deepseek.com",
)
response = client.chat.completions.create(
model="deepseek-v4-pro",
messages=[{"role": "user", "content": "Which is greater, 9.11 or 9.8?"}],
reasoning_effort="high",
extra_body={"thinking": {"type": "enabled"}},
)
print(response.choices[0].message.reasoning_content)
print(response.choices[0].message.content)
Turn thinking off by setting thinking.type to disabled. On the Responses API, use reasoning.effort = "none". Do not mix Chat Completions and Responses field shapes.
In thinking mode, temperature, top_p, presence_penalty, and frequency_penalty have no effect (setting them does not error, for compatibility). Control “how long it thinks” with reasoning_effort, not sampling knobs.
III. Choosing reasoning_effort: low / high / max
Official mapping (same for Flash and Pro):
| Value you send | Mapped effort |
|---|---|
low | low |
medium / high / xhigh | high |
max | max |
Practical picks:
- Everyday Q&A, short rewrites, simple classify: turn thinking off, or keep default
highbut capmax_tokensso the chain of thought does not exhaust the budget. - Coding, math, multi-step reasoning:
highis usually enough. - Long agent chains, hard bugs, complex tool orchestration: raise to
max(some agent clients auto-bump to max). - Billing: thinking tokens count toward output usage; higher effort and longer chains cost more. Off-peak and cache: DeepSeek API price change.

IV. Must You Echo reasoning_content? Tools Are the Split
- No
toolsin the request: you do not need to resend priorreasoning_content; if you do, the API ignores it and it does not enter context. - Request includes
tools: every later turn must resend full historicalreasoning_content— even when that turn made no tool call. Missing it returns HTTP 400. Choosing ools vs JSON Output: DeepSeek API Function Calling.
Safest pattern: append the whole assistant message:
messages.append(response.choices[0].message)
That is equivalent to manually carrying content, reasoning_content, and tool_calls. If your agent framework only stores final content, verify this path before production.
V. Four Surfaces — Avoid Mixing Configs
| You use | Thinking controls | Common pitfall |
|---|---|---|
| Custom Chat Completions | extra_body.thinking + reasoning_effort | Top-level thinking may be dropped by the SDK |
Anthropic-compatible /anthropic | thinking + output_config.effort | budget_tokens is ignored |
| Codex | model_reasoning_effort | First ensure wire_api = "responses" |
| DeepSeek Harness | Model adapter / client settings | Harness is the runtime — not “another thinking model” |
Use the web app to feel quality differences; pin parameters on the API for reproducibility. Keys and model IDs: 2026 DeepSeek beginner guide.
VI. FAQ
Is thinking billed separately?
No separate “thinking switch” fee. You pay for longer output tokens (including the chain of thought). Turning thinking off is usually cheaper and faster; hard tasks may lose quality.
finish_reason: length with empty content?
Often max_tokens was consumed by the chain of thought. Raise the limit, or probe with lower reasoning_effort / thinking off.
Relation to deepseek-reasoner / deepseek-chat?
Legacy aliases are in a retirement window. New integrations should call deepseek-v4-pro / deepseek-v4-flash and control behavior with thinking parameters — not old model names.
Summary
Shortest DeepSeek thinking mode checklist: on by default → toggle with thinking → pick intensity with reasoning_effort → with tools, always echo reasoning_content. Official docs own the field contract; this page is a practical pitfall list.
Further reading
DeepSeek V4 Pro Team
DeepSeek V4 Pro technical team
Ready to experience DeepSeek V4?
Start chatting now and feel the power of 1M-token context.
🚀 Start ChattingFree · No sign-up required
🧭 In this series
Explore related guides and hub pages in this topic cluster.
Category hub
Tutorial →