DeepSeek API输出解析

2025-02-19 73
DeepSeek

类型:人工智能

简介:一款基于深度学习和自然语言处理技术的产品,人气赶超ChatGPT。

根据给定的代码和数据,我们可以详细了解DeepSeek API输出的各个字段及其功能。以下是对代码输出的逐步解读。

print(completion.model_dump()) 的输出并不适合阅读,使用 Pretty Print 进行打印:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# 结构化打印
from pprint import pprint
pprint(completion.model_dump())
# 下方代码作用和 pprint 一样
# import json
# print(json.dumps(completion.model_dump(), indent=4, ensure_ascii=False))
# 结构化打印 from pprint import pprint pprint(completion.model_dump()) # 下方代码作用和 pprint 一样 # import json # print(json.dumps(completion.model_dump(), indent=4, ensure_ascii=False))
# 结构化打印
from pprint import pprint
pprint(completion.model_dump())
# 下方代码作用和 pprint 一样
# import json
# print(json.dumps(completion.model_dump(), indent=4, ensure_ascii=False))

下面以 DeepSeek API 的聊天模型和推理模型为例进行解读,涉及的知识对于使用了 OpenAI SDK 的平台是通用的:

一、DeepSeek-Chat

输出:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{'choices': [{'finish_reason': 'stop',
'index': 0,
'logprobs': None,
'message': {'content': '您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-V3。如您有任何任何问题,我会尽我所能为您提供帮助。',
'function_call': None,
'refusal': None,
'role': 'assistant',
'tool_calls': None}}],
'created': 1739002836,
'id': '897844a1-65d9-4e74-bdd3-4d966c8c1710',
'model': 'deepseek-chat',
'object': 'chat.completion',
'service_tier': None,
'system_fingerprint': 'fp_3a5770e1b4',
'usage': {'completion_tokens': 37,
'prompt_cache_hit_tokens': 0,
'prompt_cache_miss_tokens': 11,
'prompt_tokens': 11,
'prompt_tokens_details': {'cached_tokens': 0},
'total_tokens': 48}}
{'choices': [{'finish_reason': 'stop', 'index': 0, 'logprobs': None, 'message': {'content': '您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-V3。如您有任何任何问题,我会尽我所能为您提供帮助。', 'function_call': None, 'refusal': None, 'role': 'assistant', 'tool_calls': None}}], 'created': 1739002836, 'id': '897844a1-65d9-4e74-bdd3-4d966c8c1710', 'model': 'deepseek-chat', 'object': 'chat.completion', 'service_tier': None, 'system_fingerprint': 'fp_3a5770e1b4', 'usage': {'completion_tokens': 37, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 11, 'prompt_tokens': 11, 'prompt_tokens_details': {'cached_tokens': 0}, 'total_tokens': 48}}
{'choices': [{'finish_reason': 'stop',
'index': 0,
'logprobs': None,
'message': {'content': '您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-V3。如您有任何任何问题,我会尽我所能为您提供帮助。',
'function_call': None,
'refusal': None,
'role': 'assistant',
'tool_calls': None}}],
'created': 1739002836,
'id': '897844a1-65d9-4e74-bdd3-4d966c8c1710',
'model': 'deepseek-chat',
'object': 'chat.completion',
'service_tier': None,
'system_fingerprint': 'fp_3a5770e1b4',
'usage': {'completion_tokens': 37,
'prompt_cache_hit_tokens': 0,
'prompt_cache_miss_tokens': 11,
'prompt_tokens': 11,
'prompt_tokens_details': {'cached_tokens': 0},
'total_tokens': 48}}

通过输出的字段我们能做些什么?

1、获取模型回复(choices)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
print(completion.choices[0].message.content)
print(completion.choices[0].message.content)
print(completion.choices[0].message.content)

输出:

您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-V3。如您有任何任何问题,我会尽我所能为您提供帮助。

2、获取用量信息(usage)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def print_chat_usage(completion):
stats = completion.usage
hit = stats.prompt_cache_hit_tokens
miss = stats.prompt_cache_miss_tokens
print(f"===== TOKEN 消耗明细 =====")
print(f"输入: {stats.prompt_tokens} tokens [缓存命中: {hit} | 未命中: {miss}]")
print(f"输出: {stats.completion_tokens} tokens")
print(f"总消耗: {stats.total_tokens} tokens")
# 按 DeepSeek 定价计算成本(单位:元)
# - 输入: 2元/百万 Tokens(缓存命中 0.5元/百万 Tokens)
# - 输出: 8元/百万 Tokens
# 官方价格文档:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/
input_cost = (hit * 0.5 + miss * 2) / 1_000_000
output_cost = stats.completion_tokens * 8 / 1_000_000
total_cost = input_cost + output_cost
print(f"\n===== 成本明细 =====")
print(f"输入成本: ¥{input_cost:.4f} 元")
print(f"输出成本: ¥{output_cost:.4f} 元")
print(f"预估总成本: ¥{total_cost:.4f} 元")
print_chat_usage(completion)
def print_chat_usage(completion): stats = completion.usage hit = stats.prompt_cache_hit_tokens miss = stats.prompt_cache_miss_tokens print(f"===== TOKEN 消耗明细 =====") print(f"输入: {stats.prompt_tokens} tokens [缓存命中: {hit} | 未命中: {miss}]") print(f"输出: {stats.completion_tokens} tokens") print(f"总消耗: {stats.total_tokens} tokens") # 按 DeepSeek 定价计算成本(单位:元) # - 输入: 2元/百万 Tokens(缓存命中 0.5元/百万 Tokens) # - 输出: 8元/百万 Tokens # 官方价格文档:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/ input_cost = (hit * 0.5 + miss * 2) / 1_000_000 output_cost = stats.completion_tokens * 8 / 1_000_000 total_cost = input_cost + output_cost print(f"\n===== 成本明细 =====") print(f"输入成本: ¥{input_cost:.4f} 元") print(f"输出成本: ¥{output_cost:.4f} 元") print(f"预估总成本: ¥{total_cost:.4f} 元") print_chat_usage(completion)
def print_chat_usage(completion):
stats = completion.usage
hit = stats.prompt_cache_hit_tokens
miss = stats.prompt_cache_miss_tokens
print(f"===== TOKEN 消耗明细 =====")
print(f"输入: {stats.prompt_tokens} tokens [缓存命中: {hit} | 未命中: {miss}]")
print(f"输出: {stats.completion_tokens} tokens")
print(f"总消耗: {stats.total_tokens} tokens")
# 按 DeepSeek 定价计算成本(单位:元)
# - 输入: 2元/百万 Tokens(缓存命中 0.5元/百万 Tokens)
# - 输出: 8元/百万 Tokens
# 官方价格文档:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/
input_cost = (hit * 0.5 + miss * 2) / 1_000_000
output_cost = stats.completion_tokens * 8 / 1_000_000
total_cost = input_cost + output_cost
print(f"\n===== 成本明细 =====")
print(f"输入成本: ¥{input_cost:.4f} 元")
print(f"输出成本: ¥{output_cost:.4f} 元")
print(f"预估总成本: ¥{total_cost:.4f} 元")
print_chat_usage(completion)

输出:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
===== TOKEN 消耗明细 =====
输入: 11 tokens [缓存命中: 0 | 未命中: 11]
输出: 37 tokens
总消耗: 48 tokens
===== 成本明细 =====
输入成本: ¥0.0000
输出成本: ¥0.0003
预估总成本: ¥0.0003
[!important]
===== TOKEN 消耗明细 ===== 输入: 11 tokens [缓存命中: 0 | 未命中: 11] 输出: 37 tokens 总消耗: 48 tokens ===== 成本明细 ===== 输入成本: ¥0.0000 元 输出成本: ¥0.0003 元 预估总成本: ¥0.0003 元 [!important]
===== TOKEN 消耗明细 =====
输入: 11 tokens [缓存命中: 0 | 未命中: 11]
输出: 37 tokens
总消耗: 48 tokens
===== 成本明细 =====
输入成本: ¥0.0000 元
输出成本: ¥0.0003 元
预估总成本: ¥0.0003 元
[!important]

非 DeepSeek 官方平台不存在一些特殊字段(比如:usage.prompt_cache_hit_tokens),一个更兼容的版本:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def print_chat_usage(completion, input_cost=2.0, output_cost=8.0, cache_hit_cost=0.5):
"""
参数:
- input_cost: 输入价格(元/百万 Tokens)
- output_cost: 输出价格(元/百万 Tokens)
- cache_hit_cost: 缓存命中价格(当平台不支持时自动退化到全价模式)
按 DeepSeek 聊天模型定价设定默认成本(单位:元):
- 输入: 2元/百万 Tokens(缓存命中 0.5元/百万 Tokens)
- 输出: 8元/百万 Tokens
官方价格文档:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/
"""
stats = completion.usage
# 尝试获取字段(兼容其他平台)
hit = getattr(stats, 'prompt_cache_hit_tokens', 0)
miss = getattr(stats, 'prompt_cache_miss_tokens',
stats.prompt_tokens - hit if hasattr(stats, 'prompt_tokens') else 0)
print(f"===== TOKEN 消耗明细 =====")
# 仅在存在缓存机制时显示细节
if hit + miss > 0:
print(f"输入: {stats.prompt_tokens} tokens [缓存命中: {hit} | 未命中: {miss}]")
else:
print(f"输入: {stats.prompt_tokens} tokens")
print(f"输出: {stats.completion_tokens} tokens")
print(f"总消耗: {stats.total_tokens} tokens")
# 动态成本计算
input_cost = (hit * cache_hit_cost + miss * input_cost) / 1_000_000
output_cost = stats.completion_tokens * output_cost / 1_000_000
total_cost = input_cost + output_cost
print(f"\n===== 成本明细 =====")
print(f"输入成本: ¥{input_cost:.4f} 元")
print(f"输出成本: ¥{output_cost:.4f} 元")
print(f"预估总成本: ¥{total_cost:.4f} 元")
print_chat_usage(completion)
def print_chat_usage(completion, input_cost=2.0, output_cost=8.0, cache_hit_cost=0.5): """ 参数: - input_cost: 输入价格(元/百万 Tokens) - output_cost: 输出价格(元/百万 Tokens) - cache_hit_cost: 缓存命中价格(当平台不支持时自动退化到全价模式) 按 DeepSeek 聊天模型定价设定默认成本(单位:元): - 输入: 2元/百万 Tokens(缓存命中 0.5元/百万 Tokens) - 输出: 8元/百万 Tokens 官方价格文档:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/ """ stats = completion.usage # 尝试获取字段(兼容其他平台) hit = getattr(stats, 'prompt_cache_hit_tokens', 0) miss = getattr(stats, 'prompt_cache_miss_tokens', stats.prompt_tokens - hit if hasattr(stats, 'prompt_tokens') else 0) print(f"===== TOKEN 消耗明细 =====") # 仅在存在缓存机制时显示细节 if hit + miss > 0: print(f"输入: {stats.prompt_tokens} tokens [缓存命中: {hit} | 未命中: {miss}]") else: print(f"输入: {stats.prompt_tokens} tokens") print(f"输出: {stats.completion_tokens} tokens") print(f"总消耗: {stats.total_tokens} tokens") # 动态成本计算 input_cost = (hit * cache_hit_cost + miss * input_cost) / 1_000_000 output_cost = stats.completion_tokens * output_cost / 1_000_000 total_cost = input_cost + output_cost print(f"\n===== 成本明细 =====") print(f"输入成本: ¥{input_cost:.4f} 元") print(f"输出成本: ¥{output_cost:.4f} 元") print(f"预估总成本: ¥{total_cost:.4f} 元") print_chat_usage(completion)
def print_chat_usage(completion, input_cost=2.0, output_cost=8.0, cache_hit_cost=0.5):
"""
参数:
- input_cost: 输入价格(元/百万 Tokens)
- output_cost: 输出价格(元/百万 Tokens)
- cache_hit_cost: 缓存命中价格(当平台不支持时自动退化到全价模式)
按 DeepSeek 聊天模型定价设定默认成本(单位:元):
- 输入: 2元/百万 Tokens(缓存命中 0.5元/百万 Tokens)
- 输出: 8元/百万 Tokens
官方价格文档:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/
"""
stats = completion.usage
# 尝试获取字段(兼容其他平台)
hit = getattr(stats, 'prompt_cache_hit_tokens', 0)
miss = getattr(stats, 'prompt_cache_miss_tokens', 
stats.prompt_tokens - hit if hasattr(stats, 'prompt_tokens') else 0)
print(f"===== TOKEN 消耗明细 =====")
# 仅在存在缓存机制时显示细节
if hit + miss > 0:
print(f"输入: {stats.prompt_tokens} tokens [缓存命中: {hit} | 未命中: {miss}]")
else:
print(f"输入: {stats.prompt_tokens} tokens")
print(f"输出: {stats.completion_tokens} tokens")
print(f"总消耗: {stats.total_tokens} tokens")
# 动态成本计算
input_cost = (hit * cache_hit_cost + miss * input_cost) / 1_000_000
output_cost = stats.completion_tokens * output_cost / 1_000_000
total_cost = input_cost + output_cost
print(f"\n===== 成本明细 =====")
print(f"输入成本: ¥{input_cost:.4f} 元")
print(f"输出成本: ¥{output_cost:.4f} 元")
print(f"预估总成本: ¥{total_cost:.4f} 元")
print_chat_usage(completion)

二、DeepSeek-Reasoner

修改代码中的 model 参数即可切换模型(以 DeepSeek 官方平台为例):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
- completion = client.chat.completions.create(
- model="deepseek-chat", # 3
+ completion = client.chat.completions.create(
+ model="deepseek-reasoner", # 3
- completion = client.chat.completions.create( - model="deepseek-chat", # 3 + completion = client.chat.completions.create( + model="deepseek-reasoner", # 3
- completion = client.chat.completions.create(
- model="deepseek-chat", # 3
+ completion = client.chat.completions.create(
+ model="deepseek-reasoner", # 3

其他平台参考下表1,对应 reasoner_model_id 列:

base_url chat_model_id reasoner_model_id
DeepSeek “https://api.deepseek.com” “deepseek-chat” “deepseek-reasoner”
硅基流动 “https://api.siliconflow.cn/v1” “deepseek-ai/DeepSeek-V3” “deepseek-ai/DeepSeek-R1”
阿里云百炼 “https://dashscope.aliyuncs.com/compatible-mode/v1” “deepseek-v3” “deepseek-r1”
百度智能云 “https://qianfan.baidubce.com/v2” “deepseek-v3” “deepseek-r1”
字节火山引擎 https://ark.cn-beijing.volces.com/api/v3 / /

修改后运行代码:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from openai import OpenAI
import os
client = OpenAI(
api_key="your-api-key", # 1:替换成对应的 API_Key
base_url="https://api.siliconflow.cn/v1", # 2
)
# 单轮对话示例
completion = client.chat.completions.create(
model="deepseek-ai/DeepSeek-R1", # 3:换成推理模型
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '你是谁?'}
]
)
from pprint import pprint
pprint(completion.model_dump())
from openai import OpenAI import os client = OpenAI( api_key="your-api-key", # 1:替换成对应的 API_Key base_url="https://api.siliconflow.cn/v1", # 2 ) # 单轮对话示例 completion = client.chat.completions.create( model="deepseek-ai/DeepSeek-R1", # 3:换成推理模型 messages=[ {'role': 'system', 'content': 'You are a helpful assistant.'}, {'role': 'user', 'content': '你是谁?'} ] ) from pprint import pprint pprint(completion.model_dump())
from openai import OpenAI
import os
client = OpenAI(
api_key="your-api-key", # 1:替换成对应的 API_Key
base_url="https://api.siliconflow.cn/v1", # 2
)
# 单轮对话示例
completion = client.chat.completions.create(
model="deepseek-ai/DeepSeek-R1", # 3:换成推理模型
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '你是谁?'}
]
)
from pprint import pprint
pprint(completion.model_dump())

输出:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
{'choices': [{'finish_reason': 'stop',
'index': 0,
'logprobs': None,
'message': {'content': '您好!我是DeepSeek-R1,一个由深度求索(DeepSeek)公司开发的智能助手,擅长通过思考来帮您解答复杂的数学,代码和逻辑推理等理工类问题。我会始终保持专业和诚实,如果您有任何问题,我会尽力为您提供帮助。',
'function_call': None,
'reasoning_content': '嗯,用户问“你是谁?”,我需要用中文回答。首先,我要明确我的身份是一个AI助手,由中国的深度求索公司开发,名字叫DeepSeek-R1。然后,要说明我的功能是帮助用户解答问题、提供信息。可能还需要提到我擅长多个领域,比如科技、科学、教育等等,以及使用场景,比如学习、工作、生活。还要保持友好和简洁,避免技术术语,让用户容易理解。\n'
'\n'
'接下来,我需要检查是否符合公司的指导方针,有没有需要强调的部分,比如安全性或隐私保护。可能还要提到持续学习优化,但不需要太详细。确保回答结构清晰,先自我介绍,再讲功能,最后表达愿意帮助的态度。要避免任何格式错误,用自然的口语化中文,不用markdown。然后组织语言,确保流畅自然,没有生硬的部分。最后通读一遍,确认准确性和友好性。',
'refusal': None,
'role': 'assistant',
'tool_calls': None}}],
'created': 1739030062,
'id': 'f8dfbdb0-6884-40db-bcd2-d411da96e1a7',
'model': 'deepseek-reasoner',
'object': 'chat.completion',
'service_tier': None,
'system_fingerprint': 'fp_7e73fd9a08',
'usage': {'completion_tokens': 248,
'completion_tokens_details': {'reasoning_tokens': 187},
'prompt_cache_hit_tokens': 0,
'prompt_cache_miss_tokens': 13,
'prompt_tokens': 13,
'prompt_tokens_details': {'cached_tokens': 0},
'total_tokens': 261}}
{'choices': [{'finish_reason': 'stop', 'index': 0, 'logprobs': None, 'message': {'content': '您好!我是DeepSeek-R1,一个由深度求索(DeepSeek)公司开发的智能助手,擅长通过思考来帮您解答复杂的数学,代码和逻辑推理等理工类问题。我会始终保持专业和诚实,如果您有任何问题,我会尽力为您提供帮助。', 'function_call': None, 'reasoning_content': '嗯,用户问“你是谁?”,我需要用中文回答。首先,我要明确我的身份是一个AI助手,由中国的深度求索公司开发,名字叫DeepSeek-R1。然后,要说明我的功能是帮助用户解答问题、提供信息。可能还需要提到我擅长多个领域,比如科技、科学、教育等等,以及使用场景,比如学习、工作、生活。还要保持友好和简洁,避免技术术语,让用户容易理解。\n' '\n' '接下来,我需要检查是否符合公司的指导方针,有没有需要强调的部分,比如安全性或隐私保护。可能还要提到持续学习优化,但不需要太详细。确保回答结构清晰,先自我介绍,再讲功能,最后表达愿意帮助的态度。要避免任何格式错误,用自然的口语化中文,不用markdown。然后组织语言,确保流畅自然,没有生硬的部分。最后通读一遍,确认准确性和友好性。', 'refusal': None, 'role': 'assistant', 'tool_calls': None}}], 'created': 1739030062, 'id': 'f8dfbdb0-6884-40db-bcd2-d411da96e1a7', 'model': 'deepseek-reasoner', 'object': 'chat.completion', 'service_tier': None, 'system_fingerprint': 'fp_7e73fd9a08', 'usage': {'completion_tokens': 248, 'completion_tokens_details': {'reasoning_tokens': 187}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 13, 'prompt_tokens': 13, 'prompt_tokens_details': {'cached_tokens': 0}, 'total_tokens': 261}}
{'choices': [{'finish_reason': 'stop',
'index': 0,
'logprobs': None,
'message': {'content': '您好!我是DeepSeek-R1,一个由深度求索(DeepSeek)公司开发的智能助手,擅长通过思考来帮您解答复杂的数学,代码和逻辑推理等理工类问题。我会始终保持专业和诚实,如果您有任何问题,我会尽力为您提供帮助。',
'function_call': None,
'reasoning_content': '嗯,用户问“你是谁?”,我需要用中文回答。首先,我要明确我的身份是一个AI助手,由中国的深度求索公司开发,名字叫DeepSeek-R1。然后,要说明我的功能是帮助用户解答问题、提供信息。可能还需要提到我擅长多个领域,比如科技、科学、教育等等,以及使用场景,比如学习、工作、生活。还要保持友好和简洁,避免技术术语,让用户容易理解。\n'
'\n'
'接下来,我需要检查是否符合公司的指导方针,有没有需要强调的部分,比如安全性或隐私保护。可能还要提到持续学习优化,但不需要太详细。确保回答结构清晰,先自我介绍,再讲功能,最后表达愿意帮助的态度。要避免任何格式错误,用自然的口语化中文,不用markdown。然后组织语言,确保流畅自然,没有生硬的部分。最后通读一遍,确认准确性和友好性。',
'refusal': None,
'role': 'assistant',
'tool_calls': None}}],
'created': 1739030062,
'id': 'f8dfbdb0-6884-40db-bcd2-d411da96e1a7',
'model': 'deepseek-reasoner',
'object': 'chat.completion',
'service_tier': None,
'system_fingerprint': 'fp_7e73fd9a08',
'usage': {'completion_tokens': 248,
'completion_tokens_details': {'reasoning_tokens': 187},
'prompt_cache_hit_tokens': 0,
'prompt_cache_miss_tokens': 13,
'prompt_tokens': 13,
'prompt_tokens_details': {'cached_tokens': 0},
'total_tokens': 261}}

1、获取模型回复(choices)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# 获取推理思考过程(Reasoner特有字段)
reasoning_content = completion.choices[0].message.reasoning_content
print(f"===== 模型推理过程 =====\n{reasoning_content}")
# 获取模型回复内容(与之前相同)
content = completion.choices[0].message.content
print(f"===== 模型回复 =====\n{content}")
# 获取推理思考过程(Reasoner特有字段) reasoning_content = completion.choices[0].message.reasoning_content print(f"===== 模型推理过程 =====\n{reasoning_content}") # 获取模型回复内容(与之前相同) content = completion.choices[0].message.content print(f"===== 模型回复 =====\n{content}")
# 获取推理思考过程(Reasoner特有字段)
reasoning_content = completion.choices[0].message.reasoning_content
print(f"===== 模型推理过程 =====\n{reasoning_content}")
# 获取模型回复内容(与之前相同)
content = completion.choices[0].message.content
print(f"===== 模型回复 =====\n{content}")

输出:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
===== 模型推理过程 =====
嗯,用户问“你是谁?”,我需要用中文回答。首先,我要明确我的身份是一个AI助手,由中国的深度求索公司开发,名字叫DeepSeek-R1。然后,要说明我的功能是帮助用户解答问题、提供信息。可能还需要提到我擅长多个领域,比如科技、科学、教育等等,以及使用场景,比如学习、工作、生活。还要保持友好和简洁,避免技术术语,让用户容易理解。
接下来,我需要检查是否符合公司的指导方针,有没有需要强调的部分,比如安全性或隐私保护。可能还要提到持续学习优化,但不需要太详细。确保回答结构清晰,先自我介绍,再讲功能,最后表达愿意帮助的态度。要避免任何格式错误,用自然的口语化中文,不用markdown。然后组织语言,确保流畅自然,没有生硬的部分。最后通读一遍,确认准确性和友好性。
===== 模型回复 =====
您好!我是DeepSeek-R1,一个由深度求索(DeepSeek)公司开发的智能助手,擅长通过思考来帮您解答复杂的数学,代码和逻辑推理等理工类问题。我会始终保持专业和诚实,如果您有任何问题,我会尽力为您提供帮助。
===== 模型推理过程 ===== 嗯,用户问“你是谁?”,我需要用中文回答。首先,我要明确我的身份是一个AI助手,由中国的深度求索公司开发,名字叫DeepSeek-R1。然后,要说明我的功能是帮助用户解答问题、提供信息。可能还需要提到我擅长多个领域,比如科技、科学、教育等等,以及使用场景,比如学习、工作、生活。还要保持友好和简洁,避免技术术语,让用户容易理解。 接下来,我需要检查是否符合公司的指导方针,有没有需要强调的部分,比如安全性或隐私保护。可能还要提到持续学习优化,但不需要太详细。确保回答结构清晰,先自我介绍,再讲功能,最后表达愿意帮助的态度。要避免任何格式错误,用自然的口语化中文,不用markdown。然后组织语言,确保流畅自然,没有生硬的部分。最后通读一遍,确认准确性和友好性。 ===== 模型回复 ===== 您好!我是DeepSeek-R1,一个由深度求索(DeepSeek)公司开发的智能助手,擅长通过思考来帮您解答复杂的数学,代码和逻辑推理等理工类问题。我会始终保持专业和诚实,如果您有任何问题,我会尽力为您提供帮助。
===== 模型推理过程 =====
嗯,用户问“你是谁?”,我需要用中文回答。首先,我要明确我的身份是一个AI助手,由中国的深度求索公司开发,名字叫DeepSeek-R1。然后,要说明我的功能是帮助用户解答问题、提供信息。可能还需要提到我擅长多个领域,比如科技、科学、教育等等,以及使用场景,比如学习、工作、生活。还要保持友好和简洁,避免技术术语,让用户容易理解。
接下来,我需要检查是否符合公司的指导方针,有没有需要强调的部分,比如安全性或隐私保护。可能还要提到持续学习优化,但不需要太详细。确保回答结构清晰,先自我介绍,再讲功能,最后表达愿意帮助的态度。要避免任何格式错误,用自然的口语化中文,不用markdown。然后组织语言,确保流畅自然,没有生硬的部分。最后通读一遍,确认准确性和友好性。
===== 模型回复 =====
您好!我是DeepSeek-R1,一个由深度求索(DeepSeek)公司开发的智能助手,擅长通过思考来帮您解答复杂的数学,代码和逻辑推理等理工类问题。我会始终保持专业和诚实,如果您有任何问题,我会尽力为您提供帮助。

部分部署了 DeepSeek-R1 的平台并没有解析 <think> 标签,此时访问message.reasoning_content 会报错 AttributeError,这里手动进行处理:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import re
def parse_reasoner_response(completion):
"""
参数:
- completion (object): API 返回的对象
返回:
- (reasoning_content, reply_content)
处理两种平台格式:
1. 有独立 reasoning_content 字段的平台:DeepSeek 官方,硅基流动,百度智能云...
2. 可能需要从 content 解析 <think> 标签的平台:阿里云百炼(偶尔会没有 reasoning_content)...
"""
message = completion.choices[0].message
# 尝试直接获取 reasoning_content 字段
reasoning = getattr(message, 'reasoning_content', None)
# 有 reasoning_content 时直接获取最终回复
if reasoning:
final_content = getattr(message, 'content', '')
else:
# 如果没有,则尝试从 content 解析
content = getattr(message, 'content', '')
# 使用非贪婪模式匹配 <think> 标签
reasoning_match = re.search(
r'<think>(.*?)</think>',
content,
re.DOTALL # 允许跨行匹配
)
if reasoning_match:
reasoning = reasoning_match.group(1).strip()
# 从原始内容移除推理部分
final_content = re.sub(
r'<think>.*?</think>',
'',
content,
flags=re.DOTALL
).strip()
else:
reasoning = ''
final_content = content
return reasoning, final_content
reasoning_content, content = parse_reasoner_response(completion)
print(f"===== 模型推理过程 =====\n{reasoning_content}")
print(f"\n===== 最终回复 =====\n{content}")
import re def parse_reasoner_response(completion): """ 参数: - completion (object): API 返回的对象 返回: - (reasoning_content, reply_content) 处理两种平台格式: 1. 有独立 reasoning_content 字段的平台:DeepSeek 官方,硅基流动,百度智能云... 2. 可能需要从 content 解析 <think> 标签的平台:阿里云百炼(偶尔会没有 reasoning_content)... """ message = completion.choices[0].message # 尝试直接获取 reasoning_content 字段 reasoning = getattr(message, 'reasoning_content', None) # 有 reasoning_content 时直接获取最终回复 if reasoning: final_content = getattr(message, 'content', '') else: # 如果没有,则尝试从 content 解析 content = getattr(message, 'content', '') # 使用非贪婪模式匹配 <think> 标签 reasoning_match = re.search( r'<think>(.*?)</think>', content, re.DOTALL # 允许跨行匹配 ) if reasoning_match: reasoning = reasoning_match.group(1).strip() # 从原始内容移除推理部分 final_content = re.sub( r'<think>.*?</think>', '', content, flags=re.DOTALL ).strip() else: reasoning = '' final_content = content return reasoning, final_content reasoning_content, content = parse_reasoner_response(completion) print(f"===== 模型推理过程 =====\n{reasoning_content}") print(f"\n===== 最终回复 =====\n{content}")
import re
def parse_reasoner_response(completion):
"""
参数:
- completion (object): API 返回的对象
返回:
- (reasoning_content, reply_content)
处理两种平台格式:
1. 有独立 reasoning_content 字段的平台:DeepSeek 官方,硅基流动,百度智能云...
2. 可能需要从 content 解析 <think> 标签的平台:阿里云百炼(偶尔会没有 reasoning_content)...
"""
message = completion.choices[0].message
# 尝试直接获取 reasoning_content 字段
reasoning = getattr(message, 'reasoning_content', None)
# 有 reasoning_content 时直接获取最终回复
if reasoning:
final_content = getattr(message, 'content', '')
else:
# 如果没有,则尝试从 content 解析
content = getattr(message, 'content', '')
# 使用非贪婪模式匹配 <think> 标签
reasoning_match = re.search(
r'<think>(.*?)</think>', 
content, 
re.DOTALL # 允许跨行匹配
)
if reasoning_match:
reasoning = reasoning_match.group(1).strip()
# 从原始内容移除推理部分
final_content = re.sub(
r'<think>.*?</think>', 
'', 
content, 
flags=re.DOTALL
).strip()
else:
reasoning = ''
final_content = content
return reasoning, final_content
reasoning_content, content = parse_reasoner_response(completion)
print(f"===== 模型推理过程 =====\n{reasoning_content}")
print(f"\n===== 最终回复 =====\n{content}")

2、获取用量信息(usage)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def print_reasoner_usage(completion):
stats = completion.usage
hit = stats.prompt_cache_hit_tokens
miss = stats.prompt_cache_miss_tokens
print(f"===== TOKEN 消耗明细 =====")
print(f"输入: {stats.prompt_tokens} tokens [缓存命中: {hit} | 未命中: {miss}]")
print(f"输出: {stats.completion_tokens} tokens")
# 推理模型的token分解
if details := stats.completion_tokens_details:
reasoning = details['reasoning_tokens']
final = stats.completion_tokens - reasoning
print(f"├─ 推理过程: {reasoning} tokens")
print(f"└─ 最终回答: {final} tokens")
print(f"总消耗: {stats.total_tokens} tokens")
# 按 DeepSeek 定价计算成本(单位:元)
# - 输入Token: 4元/百万Tokens(未命中缓存 1元/百万Tokens)
# - 输出Token: 16元/百万Tokens
# 官方价格文档:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/
input_cost = (hit * 1 + miss * 4) / 1_000_000
output_cost = stats.completion_tokens * 16 / 1_000_000
total_cost = input_cost + output_cost
print(f"\n===== 成本明细 =====")
print(f"输入成本: ¥{input_cost:.4f} 元")
print(f"输出成本: ¥{output_cost:.4f} 元")
print(f"预估总成本: ¥{total_cost:.4f} 元")
print_reasoner_usage(completion)
def print_reasoner_usage(completion): stats = completion.usage hit = stats.prompt_cache_hit_tokens miss = stats.prompt_cache_miss_tokens print(f"===== TOKEN 消耗明细 =====") print(f"输入: {stats.prompt_tokens} tokens [缓存命中: {hit} | 未命中: {miss}]") print(f"输出: {stats.completion_tokens} tokens") # 推理模型的token分解 if details := stats.completion_tokens_details: reasoning = details['reasoning_tokens'] final = stats.completion_tokens - reasoning print(f"├─ 推理过程: {reasoning} tokens") print(f"└─ 最终回答: {final} tokens") print(f"总消耗: {stats.total_tokens} tokens") # 按 DeepSeek 定价计算成本(单位:元) # - 输入Token: 4元/百万Tokens(未命中缓存 1元/百万Tokens) # - 输出Token: 16元/百万Tokens # 官方价格文档:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/ input_cost = (hit * 1 + miss * 4) / 1_000_000 output_cost = stats.completion_tokens * 16 / 1_000_000 total_cost = input_cost + output_cost print(f"\n===== 成本明细 =====") print(f"输入成本: ¥{input_cost:.4f} 元") print(f"输出成本: ¥{output_cost:.4f} 元") print(f"预估总成本: ¥{total_cost:.4f} 元") print_reasoner_usage(completion)
def print_reasoner_usage(completion):
stats = completion.usage
hit = stats.prompt_cache_hit_tokens
miss = stats.prompt_cache_miss_tokens
print(f"===== TOKEN 消耗明细 =====")
print(f"输入: {stats.prompt_tokens} tokens [缓存命中: {hit} | 未命中: {miss}]")
print(f"输出: {stats.completion_tokens} tokens")
# 推理模型的token分解
if details := stats.completion_tokens_details:
reasoning = details['reasoning_tokens']
final = stats.completion_tokens - reasoning
print(f"├─ 推理过程: {reasoning} tokens")
print(f"└─ 最终回答: {final} tokens")
print(f"总消耗: {stats.total_tokens} tokens")
# 按 DeepSeek 定价计算成本(单位:元)
# - 输入Token: 4元/百万Tokens(未命中缓存 1元/百万Tokens)
# - 输出Token: 16元/百万Tokens
# 官方价格文档:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/
input_cost = (hit * 1 + miss * 4) / 1_000_000
output_cost = stats.completion_tokens * 16 / 1_000_000
total_cost = input_cost + output_cost
print(f"\n===== 成本明细 =====")
print(f"输入成本: ¥{input_cost:.4f} 元")
print(f"输出成本: ¥{output_cost:.4f} 元")
print(f"预估总成本: ¥{total_cost:.4f} 元")
print_reasoner_usage(completion)

输出:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
===== TOKEN 消耗明细 =====
输入: 13 tokens [缓存命中: 0 | 未命中: 13]
输出: 248 tokens
├─ 推理过程: 187 tokens
└─ 最终回答: 61 tokens
总消耗: 261 tokens
===== 成本明细 =====
输入成本: ¥0.0001
输出成本: ¥0.0040
预估总成本: ¥0.0040
[!important]
===== TOKEN 消耗明细 ===== 输入: 13 tokens [缓存命中: 0 | 未命中: 13] 输出: 248 tokens ├─ 推理过程: 187 tokens └─ 最终回答: 61 tokens 总消耗: 261 tokens ===== 成本明细 ===== 输入成本: ¥0.0001 元 输出成本: ¥0.0040 元 预估总成本: ¥0.0040 元 [!important]
===== TOKEN 消耗明细 =====
输入: 13 tokens [缓存命中: 0 | 未命中: 13]
输出: 248 tokens
├─ 推理过程: 187 tokens
└─ 最终回答: 61 tokens
总消耗: 261 tokens
===== 成本明细 =====
输入成本: ¥0.0001 元
输出成本: ¥0.0040 元
预估总成本: ¥0.0040 元
[!important]

非 DeepSeek 官方的部分平台(但百度智能云存在)不存在一些特殊字段(比如reasoning_tokens),一个更兼容的版本:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def print_reasoner_usage(completion, input_cost=4.0, output_cost=16.0, cache_hit_cost=1.0):
"""
参数:
- input_cost: 输入价格(元/百万 Tokens)
- output_cost: 输出价格(元/百万 Tokens)
- cache_hit_cost: 缓存命中价格(当平台不支持时自动退化到全价模式)
按 DeepSeek 推理模型定价设定默认成本(单位:元):
- 输入: 4元/百万 Tokens(缓存命中 1元/百万 Tokens)
- 输出: 16元/百万 Tokens
官方价格文档:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/
"""
stats = completion.usage
# 尝试获取字段(兼容其他平台)
hit = getattr(stats, 'prompt_cache_hit_tokens', 0)
miss = getattr(stats, 'prompt_cache_miss_tokens',
stats.prompt_tokens - hit if hasattr(stats, 'prompt_tokens') else 0)
print(f"===== TOKEN 消耗明细 =====")
# 仅在存在缓存机制时显示细节
if hit + miss > 0:
print(f"输入: {stats.prompt_tokens} tokens [缓存命中: {hit} | 未命中: {miss}]")
else:
print(f"输入: {stats.prompt_tokens} tokens")
print(f"输出: {stats.completion_tokens} tokens")
# 尝试获取推理过程详情
details = getattr(stats, 'completion_tokens_details', None)
reasoning = 0
if details:
if not isinstance(details, dict):
details = getattr(details, 'dict', lambda: {})()
# 尝试获取 reasoning_tokens
reasoning = details.get('reasoning_tokens', 0)
# 仅在存在推理tokens数量字段时处理
if reasoning > 0:
final = stats.completion_tokens - reasoning
print(f"├─ 推理过程: {reasoning} tokens")
print(f"└─ 最终回答: {final} tokens")
print(f"总消耗: {stats.total_tokens} tokens")
# 动态成本计算
input_cost_total = (hit * cache_hit_cost + miss * input_cost) / 1_000_000
output_cost_total = stats.completion_tokens * output_cost / 1_000_000
total_cost = input_cost_total + output_cost_total
print(f"\n===== 成本明细 =====")
print(f"输入成本: ¥{input_cost_total:.4f} 元")
print(f"输出成本: ¥{output_cost_total:.4f} 元")
print(f"预估总成本: ¥{total_cost:.4f} 元")
print_reasoner_usage(completion)
def print_reasoner_usage(completion, input_cost=4.0, output_cost=16.0, cache_hit_cost=1.0): """ 参数: - input_cost: 输入价格(元/百万 Tokens) - output_cost: 输出价格(元/百万 Tokens) - cache_hit_cost: 缓存命中价格(当平台不支持时自动退化到全价模式) 按 DeepSeek 推理模型定价设定默认成本(单位:元): - 输入: 4元/百万 Tokens(缓存命中 1元/百万 Tokens) - 输出: 16元/百万 Tokens 官方价格文档:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/ """ stats = completion.usage # 尝试获取字段(兼容其他平台) hit = getattr(stats, 'prompt_cache_hit_tokens', 0) miss = getattr(stats, 'prompt_cache_miss_tokens', stats.prompt_tokens - hit if hasattr(stats, 'prompt_tokens') else 0) print(f"===== TOKEN 消耗明细 =====") # 仅在存在缓存机制时显示细节 if hit + miss > 0: print(f"输入: {stats.prompt_tokens} tokens [缓存命中: {hit} | 未命中: {miss}]") else: print(f"输入: {stats.prompt_tokens} tokens") print(f"输出: {stats.completion_tokens} tokens") # 尝试获取推理过程详情 details = getattr(stats, 'completion_tokens_details', None) reasoning = 0 if details: if not isinstance(details, dict): details = getattr(details, 'dict', lambda: {})() # 尝试获取 reasoning_tokens reasoning = details.get('reasoning_tokens', 0) # 仅在存在推理tokens数量字段时处理 if reasoning > 0: final = stats.completion_tokens - reasoning print(f"├─ 推理过程: {reasoning} tokens") print(f"└─ 最终回答: {final} tokens") print(f"总消耗: {stats.total_tokens} tokens") # 动态成本计算 input_cost_total = (hit * cache_hit_cost + miss * input_cost) / 1_000_000 output_cost_total = stats.completion_tokens * output_cost / 1_000_000 total_cost = input_cost_total + output_cost_total print(f"\n===== 成本明细 =====") print(f"输入成本: ¥{input_cost_total:.4f} 元") print(f"输出成本: ¥{output_cost_total:.4f} 元") print(f"预估总成本: ¥{total_cost:.4f} 元") print_reasoner_usage(completion)
def print_reasoner_usage(completion, input_cost=4.0, output_cost=16.0, cache_hit_cost=1.0):
"""
参数:
- input_cost: 输入价格(元/百万 Tokens)
- output_cost: 输出价格(元/百万 Tokens)
- cache_hit_cost: 缓存命中价格(当平台不支持时自动退化到全价模式)
按 DeepSeek 推理模型定价设定默认成本(单位:元):
- 输入: 4元/百万 Tokens(缓存命中 1元/百万 Tokens)
- 输出: 16元/百万 Tokens
官方价格文档:https://api-docs.deepseek.com/zh-cn/quick_start/pricing/
"""
stats = completion.usage
# 尝试获取字段(兼容其他平台)
hit = getattr(stats, 'prompt_cache_hit_tokens', 0)
miss = getattr(stats, 'prompt_cache_miss_tokens', 
stats.prompt_tokens - hit if hasattr(stats, 'prompt_tokens') else 0)
print(f"===== TOKEN 消耗明细 =====")
# 仅在存在缓存机制时显示细节
if hit + miss > 0:
print(f"输入: {stats.prompt_tokens} tokens [缓存命中: {hit} | 未命中: {miss}]")
else:
print(f"输入: {stats.prompt_tokens} tokens")
print(f"输出: {stats.completion_tokens} tokens")
# 尝试获取推理过程详情
details = getattr(stats, 'completion_tokens_details', None)
reasoning = 0
if details:
if not isinstance(details, dict):
details = getattr(details, 'dict', lambda: {})()
# 尝试获取 reasoning_tokens
reasoning = details.get('reasoning_tokens', 0)
# 仅在存在推理tokens数量字段时处理
if reasoning > 0:
final = stats.completion_tokens - reasoning
print(f"├─ 推理过程: {reasoning} tokens")
print(f"└─ 最终回答: {final} tokens")
print(f"总消耗: {stats.total_tokens} tokens")
# 动态成本计算
input_cost_total = (hit * cache_hit_cost + miss * input_cost) / 1_000_000
output_cost_total = stats.completion_tokens * output_cost / 1_000_000
total_cost = input_cost_total + output_cost_total
print(f"\n===== 成本明细 =====")
print(f"输入成本: ¥{input_cost_total:.4f} 元")
print(f"输出成本: ¥{output_cost_total:.4f} 元")
print(f"预估总成本: ¥{total_cost:.4f} 元")
print_reasoner_usage(completion)

补充几个 DeepSeek API 字段的官方说明:

  • message.reasoning_content:仅适用于 deepseek-reasoner 模型。内容为 assistant 消息中在最终答案之前的推理内容;
  • usage.prompt_cache_hit_tokens:用户 prompt 中,命中上下文缓存的 token 数;
  • usage.prompt_cache_miss_tokens:用户 prompt 中,未命中上下文缓存的 token 数。

注意,字段 usage.prompt_cache_hit_tokens 和 usage.prompt_cache_miss_tokens 仅存在于 DeepSeek API,故代码部分做了特殊处理。

  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。