DeepSeek API流式输出与多轮对话示例
一、相关信息
deepseek api包含两个模型版本:deepseek-chat和deepseek-reasoner,分别是不带深度思考和深度思考的,前者更为轻量,输出字数与全面性不如后者,不带深度思考,但价格更为便宜,输出简洁。后者带深度思考,输出字数更多,意味着用户问一个问题需要等待的时间更长,价格更贵,但也更全面详细。
模型(1) | deepseek-chat | deepseek-reasoner | |
上下文长度 | 64K | 64K | |
输出长度(2) | 默认 4K,最大 8K | 默认 32K,最大 64K | |
功能 | Json Output | 支持 | 支持 |
Function Calling | 支持 | 支持 | |
对话前缀续写(Beta) | 支持 | 支持 | |
FIM 补全(Beta) | 支持 | 不支持 | |
标准时段价格 (北京时间 08:30-00:30) | 百万tokens输入(缓存命中)(3) | 0.5元 | 1元 |
百万tokens输入(缓存未命中) | 2元 | 4元 | |
百万tokens输出 (4) | 8元 | 16元 | |
优惠时段价格(5) (北京时间 00:30-08:30) | 百万tokens输入(缓存命中) | 0.25元(5折) | 0.25元(2.5折) |
百万tokens输入(缓存未命中) | 1元(5折) | 1元(2.5折) | |
百万tokens输出 | 4元(5折) | 4元(2.5折) |
deepseek-chat
模型对应 DeepSeek-V3-0324;deepseek-reasoner
模型对应 DeepSeek-R1-0528。deepseek-reasoner
的max_tokens
参数限制了模型单次输出的最大长度(思维链输出)。- 关于上下文缓存的细节,请参考 DeepSeek 硬盘缓存。
deepseek-reasoner
的输出 token 数包含了思维链和最终答案的所有 token,其计价相同。- DeepSeek API 现实行错峰优惠定价,每日优惠时段为北京时间 00:30-08:30,其余时间按照标准价格计费。请求的计价时间为该请求完成的时间。
下面我写了两个流式输出版本、支持多轮对话的例子,只需要填写apio key即可运行。
二、非深度思考版
from openai import OpenAI
from colorama import init, Fore, Styleinit(autoreset=True)client = OpenAI(api_key="你的key", base_url="https://api.deepseek.com")
messages = [{"role": "system", "content": "回答用户任何问题"}]while True:print('-------------------------------------')sendMS = input(Fore.YELLOW+'\n\n请输入内容(按q退出对话):')messages.append({"role": "user", "content": f"{sendMS}"}) # 拼接用户对话历史,实现多轮对话if sendMS == 'q':breakstream_response = client.chat.completions.create(model="deepseek-chat",messages=messages,stream=True # 启用流式传输)# 流式响应输出print(Fore.GREEN+"\n\n--- 正式回答开始 ---\n")full_res = ''for chunk in stream_response:if chunk.choices[0].delta.content is not None:text_chunk = chunk.choices[0].delta.contentfull_res += text_chunkprint(text_chunk, end="", flush=True)messages.append({"role": "assistant", "content": full_res})print('-------------------------------------\n')
print('对话已退出......')
三、深度思考版
from openai import OpenAI
from colorama import init, Fore, Styleinit(autoreset=True) client = OpenAI(api_key="你的key", base_url="https://api.deepseek.com")
messages = [{"role": "system", "content": "回答用户任何问题"}]while True:print('-------------------------------------')flag = FalsesendMS = input(Fore.YELLOW+'\n\n请输入内容(按q退出对话):')messages.append({"role": "user", "content": f"{sendMS}"}) # 拼接用户对话历史,实现多轮对话if sendMS == 'q':break# 如果你需要流式响应(适合长内容)stream_response = client.chat.completions.create(model="deepseek-reasoner",messages=messages,stream=True # 启用流式传输)# 流式响应输出full_res = ''print(Fore.CYAN+"\n\n思考过程开始:\n")for chunk in stream_response:if chunk.choices[0].delta.reasoning_content is not None:text_chunk = chunk.choices[0].delta.reasoning_contentprint(text_chunk, end="", flush=True)if chunk.choices[0].delta.content is not None:if not flag:print(Fore.GREEN+"\n\n--- 正式回答开始 ---\n")flag = Truetext_chunk = chunk.choices[0].delta.contentfull_res += text_chunkprint(text_chunk, end="", flush=True)messages.append({"role": "assistant", "content": full_res})print('-------------------------------------\n\n')
print('对话已退出......')