deepseek api key获取与调用实战教程
在本教程中,我将向您展示如何设置和使用 DeepSeek API,以便您可以将其集成到您的项目中。您将了解:
可用模型:deepseek-chat (V3) & deepseek-reasoner (R1),以及如何通过API访问它们。
关键参数:如何控制模型的输出和管理定价。
链式定价:DeepSeek 如何根据推理复杂性计算成本。
Context caching:使用 DeepSeek 时降低成本的智能方法。
到最后,您将知道如何在保持低成本的同时使用 DeepSeek。让我们开始吧!
DeepSeek 模型
DeepSeek 提供了两个主要模型,您可以通过 API 使用:
DeepSeek-V3 (deepseek-chat):一种在大量文本(15 万亿个令牌)上训练的通才模型。
DeepSeek-R1 (deepseek-reasoner):专为高级推理、数学和编码任务设计的模型。
您可以在这篇关于 DeepSeek R1 与 V3 的博客中了解有关这两种模型之间差异的更多信息。
如何通过 API 访问 DeepSeek R1 和 V3
要通过 API 访问 DeepSeek 模型:
获取 API 密钥:在 DeepSeek API 平台上注册并生成您的密钥。
使用 OpenAI SDK (软件开发工具包):设置您的代码以使用 OpenAI 的 SDK 和正确的设置连接到 DeepSeek API。SDK 是工具、库、文档和代码示例的集合,可帮助您为特定平台、框架或 API 构建应用程序。API SDK(如 OpenAI SDK)提供即用型函数,使 API 调用更加轻松,因此开发人员不必从头开始编写所有内容。
DeepSeek API 平台 API 密钥管理页面。在这里,您可以生成和管理用于访问 DeepSeek AI 服务的 API 密钥。API 密钥仅在创建时可见,并且必须安全存储;公开共享数据可能会导致安全风险。
要使用 DeepSeek-V3,您需要设置,要使用 DeepSeek-R1,您需要设置 。model='deepseek-chat'model='deepseek-reasoner'
以下是使用 OpenAI SDK 访问 DeepSeek API 的方法:
from openai import OpenAI client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com") response = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "system", "content": "You are a helpful assistant"}, {"role": "user", "content": "Hello"}, ], stream=False ) print(response.choices[0].message.content)
让我们仔细看看这段代码的作用。
该代码的目标是向 DeepSeek 模型发送聊天消息并打印模型的响应。
首先,从库中导入类。from openai import OpenAIOpenAIopenai
然后client = OpenAI(...)创建一个 Client 对象。此客户端是您与 DeepSeek API 的连接。它使用你的 API 密钥(身份验证)配置客户端,并指定 DeepSeek API 的基本 URL。OpenAI
重要提示:将 <DeepSeek API 密钥>替换为您的实际 DeepSeek API 密钥!
这是将您的聊天消息发送到 DeepSeek 模型并获取响应的部分。 正在调用 DeepSeek API 以从模型获取响应。responseclient.chat.completions.create(...)
让我们看看 ,这是定义对话历史记录的部分:messages=[...]
system message: {“role”: “system”, “content”: “You are a helpful assistant”}: 这将设置模型的行为,告诉它像一个有用的助手一样。
用户消息: {“role”: “user”, “content”: “Hello”}:这是 AI 应响应的实际用户输入(您的提示)(“Hello”)。
请注意,在此示例中,我们使用的是 DeepSeek-V3,但请记住,您可以通过设置 来使用 DeepSeek-R1。model='deepseek-chat’model='deepseek-reasoner'
这部分的意思是 “立即给我完整的答案”。基本上,当您设置 时,模型会等待,直到它生成了整个响应,然后再将其发送回去。如果要一次显示或分析完整的响应,请使用此选项。stream=Falsestream=False
但是,在接收输出之前,您可能需要等待很长时间的响应。 如果设置 ,则模型会在生成单词(嗯,标记)时显示单词,因此您可以实时查看响应,而不是等待完整答案。stream=True
最后,从响应对象中提取模型的响应并将其打印到您的控制台。响应对象包含大量信息,但您主要对模型的消息感兴趣。API 有时可以返回多个可能的答案 (选项) 。这将选择第一个 ID。print(response.choices.message.content)
在发布本文时,DeepSeek 已暂停向 API 账户添加新资金,因为他们的服务器资源不足。这意味着您现在无法向 API 余额添加更多资金。如果您已经有资金,您仍然可以正常使用 API。一旦 DeepSeek 拥有更多服务器容量,他们可能会恢复充值,因此请留意更新!
管理参数以控制输出和定价
DeepSeek 团队声称他们的模型比竞争对手便宜。但您仍然需要明智地使用它,以保持低成本并获得最佳性能。以下是使用 DeepSeek 的模型控制输出和定价时需要了解和考虑的关键事项。
选择合适的型号
每个 DeepSeek 模型都是为不同的任务而设计的。选择合适的可以帮助您根据需要平衡成本和性能。下面是一个快速比较:
deepseek-chat (V3):更便宜,适合一般聊天和对话。
deepseek-reasoner (R1) →更昂贵,但非常适合复杂的推理和高级任务。
代币成本
标记是模型处理的最小文本单位,可以是单词、数字,甚至是标点符号。使用的标记数量取决于语言和模型处理文本的方式。
以下是字符如何转换为标记的一般比较:
1 个英文字符≈ 0.3 个标记(一个 100 个字符的句子大约有 30 个标记)。
1 个汉字≈ 0.6 个标记(因为汉字每个字符传达的含义更多)。
要获得准确的估计值,最好在运行请求后检查使用情况详细信息。如果您了解令牌的计数方式,则可以在使用 DeepSeek 的模型时更好地管理成本并优化性能。
如前所述,DeepSeek 提供了两种模型,deepseek-chat 和 deepseek-reasoner。但每种都有不同的优势和成本。了解他们如何处理信息和收取代币费用可以帮助您更有效地使用它们并控制成本。
这两种模型都可以在一次对话中处理多达 64,000 个标记,这意味着它们会记住更多上下文,从而获得更好、更相关的响应。但是,它们的工作方式不同。
Deepseek-chat 专为一般对话而设计,不使用高级推理。另一方面,Deepseek-reasoner 允许在给出最终答案之前使用多达 32,000 个令牌进行分步思考(链式推理 - 稍后会详细介绍)。这使得它非常适合解决复杂的问题,但也增加了使用的代币数量,这意味着更高的成本。
在响应长度方面,两种模型都可以为每个回复生成多达 8000 个令牌。此限制有助于防止响应变得太长且成本过高。
从定价来看,deepseek-chat 是更经济实惠的选择。如果输入已缓存(意味着它之前已被使用),则每 100 万个令牌的费用为 0.07 USD。对于新输入,价格高达每 100 万个代币 0.27 美元,产出成本为每 100 万个代币 1.10 美元。
Deepseek-reasoner 更昂贵,因为它提供了更深入的推理。缓存输入的成本为每 100 万个令牌 0.14 USD,而新输入的成本为每 100 万个令牌 0.55 USD。它的产出也更贵,为每百万个代币 2.19 美元,这反映了它产生的响应的复杂性。
那么,您应该使用哪种型号呢?
如果您需要简单的聊天回复或快速回答,deepseek-chat 是更好的选择,因为它更便宜。但是,如果您需要详细的推理或复杂的问题解决,deepseek-reasoner 更强大,尽管它的成本更高。
为了省钱,您还可以使用缓存。当模型识别到它以前看到的输入时,它会收取较低的费率。这对于重复查询或多轮次对话非常有用。
DeepSeek模型的价格具有竞争力,但代币的使用量可能会迅速增加。管理成本的最佳方法是保持提示简短,尽可能使用缓存,并为作业选择正确的模型。要了解更多信息,请阅读此关于提示优化的博客。
温度参数
温度参数控制模型响应的随机性或可预测性。默认情况下,在 DeepSeek 中,它设置为 1.0,这意味着响应在创造性和确定性之间取得平衡。但是,您可以根据自己的特定需求调整此设置。
低温(接近 0.0)使模型更具可预测性和精确性。这对于需要准确答案的任务非常有用,例如编码、数学和结构化数据分析。
较高的温度(高于 1.0)使模型更具创造性和多样性,适用于需要灵活性的讲故事、诗歌和翻译。
对于一般对话,1.3 左右的温度有助于产生自然和引人入胜的对话,而不会过于重复或过于随机。
虽然温度设置本身不会直接影响成本,但它可以间接增加输出令牌的数量:
更高的温度会导致更长、更多样化的响应,这意味着会生成更多的代币,从而导致更高的成本。
较低的温度通常会导致更短、更直接的答案,从而减少代币使用并降低成本。
响应格式
与 DeepSeek 的 API 交互时,您可以通过指定参数来控制响应的格式。这在处理结构化数据时特别有用,因为它有助于确保模型输出的一致性和可读性。response_format
要接收 JSON 格式的响应,请设置:
response_format={'type': 'json_object'}
这会告知模型返回结构化输出,从而更轻松地以编程方式处理信息。JSON 格式通常用于需要结构化、机器可读响应的应用程序,例如数据提取、自动化和 API 集成。
尽管 JSON 格式不会直接影响定价,但在某些情况下它可以间接降低成本。
更简洁的响应:由于 JSON 响应遵循结构化格式,因此它们往往更紧凑,可能比自由文本响应使用更少的令牌。
提高准确性:如果您明确请求结构化输出,则可以最大限度地降低冗长、不必要的解释的风险,从而有助于控制令牌的使用。
了解思维链 (CoT) 及其成本
CoT 是 DeepSeek-R1 在给出最终答案之前所经历的推理过程。这意味着该模型在得出结论之前会逐步解释其思维过程。
CoT 推理和最终答案中使用的每个代币都按每百万个代币 2.19 美元收费,因为它是输出的一部分。这有点权衡;更多的 CoT 代币 = 更多的成本,但在复杂任务中也更好。
使用 CoT 时,您可以做些什么来控制成本?
使用清晰的提示:要求简短但有效的推理,而不是冗长的解释。
跟踪代币使用情况:密切关注 CoT 使用的代币数量与最终答案。
选择正确的模型:对于更简单的问题,请考虑改用更便宜的 deepseek-chat。不过,在这种情况下没有 CoT。
使用缓存:如果反复询问类似的问题,缓存可以降低输入令牌成本。
示例:未优化的提示
为了说明 DeepSeek-R1 中 Chain-of-Thought (CoT) 输出的工作原理及其对定价的影响,让我们考虑一个例子:
from openai import OpenAI client = OpenAI( api_key="<Your_DeepSeek_API_Key>", base_url="https://api.deepseek.com" ) def generate_response(prompt): response = client.chat.completions.create( model="deepseek-reasoner", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt} ], stream=False ) return response.choices[0].message.content # Example usage prompt = "Calculate the area of a triangle with a base of 6 cm and a height of 4 cm." result = generate_response(prompt) print(result)
如何使用 DeepSeek 的上下文缓存来降低成本
从我们在 Token Costs 部分看到的定价表中,我们可以得出结论,与处理新的(未缓存的)输入令牌的成本相比,缓存为我们节省了大约 74.07% 的 deepseek-chat API 成本和 74.55% 的 deepseek-reasoner API 成本。这意味着有效使用缓存可以将 input token 成本降低近四分之三。
它对于长提示特别有用,因为它可以减少等待时间。此外,系统会自动处理缓存,无需更改代码。
但是上下文缓存是如何工作的呢?
当您发送请求时,DeepSeek 会将输入存储在其服务器上。如果您稍后发送类似的请求,系统会检索存储的响应,而不是重新计算所有内容。这使得过程更快、更便宜。
缓存何时最有用?
在以下情况下,缓存可能很有用,并且可以降低成本:
多轮对话:聊天机器人可以重复使用以前的响应,这将降低成本。
数据分析:对同一文件的重复查询受益于缓存的响应。
Q&A 助手:对话开始时的长指令可以缓存。
角色扮演和互动应用程序:角色设置和长对话不需要重新计算。
代码分析:多次引用相同的代码文件可以节省令牌。
小样本学习:如果要向模型提供示例,缓存可以降低成本。
如何最大限度地节省成本
为了最大限度地节省成本,以下是我的建议:
在开头保留重复使用的文本:API 仅缓存输入的开头。
Use similar inputs:如果您想命中缓存,请避免过多地更改提示。
为重复而设计:构建您的请求以尽可能多地重用缓存内容。
如何跟踪缓存使用情况
要使用 DeepSeek 的 API 跟踪缓存使用情况,您无需修改代码。缓存使用信息会自动包含在 API 响应中。默认情况下,为所有用户启用缓存系统。当您进行 API 调用时,响应对象将在该部分中包含两个新字段:usage
prompt_cache_hit_tokens:从缓存提供的输入令牌数
prompt_cache_miss_tokens:在缓存中找不到的输入标记数
要访问此信息,您需要检查 API 响应中的字段。下面是一个示例,说明如何在以下位置访问这些值:usage
response = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "user", "content": "You are a helpful assistant."} ] ) cache_hits = response.usage.prompt_cache_hit_tokens cache_misses = response.usage.prompt_cache_miss_tokens print(f"Cache hits: {cache_hits}") print(f"Cache misses: {cache_misses}")
此功能允许您监控缓存系统如何为您的使用案例工作。
但是,缓存有一些限制:
最小缓存大小:系统仅缓存 64 个或更多令牌的文本块。较短的输入不会被存储。
不是 100% 可靠:系统不保证每个请求都会命中缓存。
缓存会随着时间的推移而过期:如果未使用,缓存的内容会在几小时到几天内自动清除。