思考模式
DeepSeek 模型支持思考模式:在输出最终回答之前,模型会先输出一段思维链内容,以提升最终答案的准确性。您可以通过以下任意一种方式,开启思考模式:
-
设置
model参数:"model": "deepseek-reasoner" -
设置
thinking参数:"thinking": {"type": "enabled"}
如果您使用的是 OpenAI SDK,在设置 thinking 参数时,需要将 thinking 参数传入 extra_body 中:
response = client.chat.completions.create(
model="deepseek-chat",
# ...
extra_body={"thinking": {"type": "enabled"}}
)
API 参数
-
输入参数:
max_tokens:模型单次回答的最大长度(含思维链输出),默认为 32K,最大为 64K。
-
输出字段:
reasoning_content:思维链内容,与content同级,访问方法见样例代码。content:最终回答内容。tool_calls: 模型工具调用。
-
不支持的功能:FIM 补全 (Beta)
-
不支持的参数:
temperature、top_p、presence_penalty、frequency_penalty、logprobs、top_logprobs。请注意,为了兼容已有软件,设置temperature、top_p、presence_penalty、frequency_penalty参数不会报错,但也不会生效。设置logprobs、top_logprobs会报错。
多轮对话拼接
在每一轮对话过程中,模型会输出思维链内容(reasoning_content)和最终回答(content)。在下一轮对话中,之前轮输出的思维链内容不会被拼接到上下文中,如下图所示:

样例代码
下面的代码以 Python 语言为例,展示了如何访问思维链和最终回答,以及如何在多轮对话中进行上下文拼接。注意代码中在新一轮对话里,只传入了上一轮输出的 content,而忽略了 reasoning_content。
- 非流式
- 流式
from openai import OpenAI
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")
# Turn 1
messages = [{"role": "user", "content": "9.11 and 9.8, which is greater?"}]
response = client.chat.completions.create(
model="deepseek-reasoner",
messages=messages
)
reasoning_content = response.choices[0].message.reasoning_content
content = response.choices[0].message.content
# Turn 2
messages.append({'role': 'assistant', 'content': content})
messages.append({'role': 'user', 'content': "How many Rs are there in the word 'strawberry'?"})
response = client.chat.completions.create(
model="deepseek-reasoner",
messages=messages
)
# ...
from openai import OpenAI
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")
# Turn 1
messages = [{"role": "user", "content": "9.11 and 9.8, which is greater?"}]
response = client.chat.completions.create(
model="deepseek-reasoner",
messages=messages,
stream=True
)
reasoning_content = ""
content = ""
for chunk in response:
if chunk.choices[0].delta.reasoning_content:
reasoning_content += chunk.choices[0].delta.reasoning_content
else:
content += chunk.choices[0].delta.content
# Turn 2
messages.append({"role": "assistant", "content": content})
messages.append({'role': 'user', 'content': "How many Rs are there in the word 'strawberry'?"})
response = client.chat.completions.create(
model="deepseek-reasoner",
messages=messages,
stream=True
)
# ...
工具调用
我们为 DeepSeek 模型的思考模式增加了工具调用功能。模型在输出最终答案之前,可以进行多轮的思考与工具调用,以提升答案的质量。其调用模式如下图所示:

- 在回答问题 1 过程中(请求 1.1 - 1.3),模型进行了多次思考 + 工具调用后给出答案。在这个过程中,用户需回传思维链内容(reasoning_content)给 API,以让模型继续思考。
- 在下一个用户问题开始时(请求 2.1),需删除之前的
reasoning_content,并保留其它内容发送给 API。如果保留了reasoning_content并发送给 API,API 将会忽略它们。
兼容性提示
因思考模式下的工具调用过程中要求用户回传 reasoning_content 给 API,若您的代码中未正确回传 reasoning_content,API 会返回 400 报错。正确回传方法请您参考下面的样例代码。