deepseek-reasoner是由DeepSeek推出的推理模型。在輸出最終回答之前,模型會先給出思維鏈內(nèi)容,以幫助提升最終答案的準確性。DeepSeek API開放了deepseek-reasoner思維鏈內(nèi)容,用戶可以查看、展示或蒸餾該思維鏈信息。
在使用 deepseek-reasoner 時,請確保先升級 OpenAI SDK,以支持新參數(shù):
pip3 install -U openai
一、DeepSeek API參數(shù)
1、輸入?yún)?shù)
max_tokens:指定最終回答的最大長度(不包括思維鏈內(nèi)容)。默認為 4K,最大支持 8K。請注意,思維鏈的輸出最多可達 32K tokens,控制思維鏈長度的參數(shù)(reasoning_effort)將于近期推出。
2、輸出字段
- reasoning_content:思維鏈內(nèi)容,位于 content 字段同級,可以訪問該內(nèi)容進行查看;
- content:最終回答內(nèi)容。
3、上下文長度
API 支持最大 64K 的上下文,注意思維鏈內(nèi)容的長度不計入 64K 的上下文限制。
4、支持功能
對話補全
對話前綴續(xù)寫(Beta)
5、不支持功能
- Function Call
- Json Output
- FIM 補全(Beta)
6、不支持的參數(shù)
temperature、top_p、presence_penalty、frequency_penalty、logprobs、top_logprobs。雖然為了兼容現(xiàn)有軟件,設置這些參數(shù)不會報錯,但它們不會生效。若設置了 logprobs 或 top_logprobs,會導致報錯。
二、上下文拼接
在每一輪對話過程中,模型會輸出思維鏈內(nèi)容(reasoning_content)和最終回答(content)。但是,在下一輪對話中,前一輪輸出的思維鏈內(nèi)容不會拼接到上下文中。如下所示:
請注意,若在輸入的 messages 序列中傳入了 reasoning_content,API 將返回 400 錯誤。因此,請確保在進行下一次請求時,刪除前輪輸出中的 reasoning_content 字段。以下是具體的操作方式。
三、訪問示例
以下是使用 Python 語言進行 API 調用的示例,展示了如何訪問思維鏈內(nèi)容和最終回答,并在多輪對話中拼接上下文。
1、非流式調用
from openai import OpenAI client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com") # 第 1 輪對話 messages = [{"role": "user", "content": "9.11 和 9.8,哪個更大?"}] response = client.chat.completions.create( model="deepseek-reasoner", messages=messages ) reasoning_content = response.choices[0].message.reasoning_content content = response.choices[0].message.content # 第 2 輪對話 messages.append({'role': 'assistant', 'content': content}) messages.append({'role': 'user', 'content': "‘strawberry’ 這個詞里有幾個字母 R?"}) response = client.chat.completions.create( model="deepseek-reasoner", messages=messages ) # ...
2、流式調用
from openai import OpenAI client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com") # 第 1 輪對話 messages = [{"role": "user", "content": "9.11 和 9.8,哪個更大?"}] response = client.chat.completions.create( model="deepseek-reasoner", messages=messages, stream=True ) reasoning_content = "" content = "" # 處理流式返回的數(shù)據(jù) for chunk in response: if chunk.choices[0]..reasoning_content: reasoning_content += chunk.choices[0]..reasoning_content else: content += chunk.choices[0]..content # 第 2 輪對話 messages.append({"role": "assistant", "content": content}) messages.append({'role': 'user', 'content': "‘strawberry’ 這個詞里有幾個字母 R?"}) response = client.chat.completions.create( model="deepseek-reasoner", messages=messages, stream=True ) # ...