网站首页 > 技术文章 正文
简介
DeepSeek API 旨在与 OpenAI API 格式兼容,这意味着您可以直接使用 OpenAI 官方提供的 Python SDK 来访问 DeepSeek 的模型,例如 deepseek-chat (DeepSeek V3) 和 deepseek-reasoner (DeepSeek R1)。使用 OpenAI SDK 的优势在于:
官方支持: OpenAI SDK 是官方维护的库,功能完善且更新及时。
易用性: SDK 提供了 Pythonic 的接口,方便开发者快速集成和调用 API。
丰富的功能: SDK 支持 OpenAI API 的所有核心功能,包括聊天、补全、流式输出、Function Calling 等,这些功能在 DeepSeek API 中也得到了支持。
1. 安装 OpenAI Python SDK
首先,您需要安装 OpenAI Python SDK。在终端或命令提示符中运行以下命令:
pip install openai
2. 配置 DeepSeek API 访问
安装完成后,您需要在代码中配置 OpenAI SDK 以连接到 DeepSeek API。这主要涉及设置 api_key 和 base_url 两个参数。
from openai import OpenAI
client = OpenAI(
api_key="YOUR_DEEPSEEK_API_KEY", # 替换为您的 DeepSeek API Key
base_url="https://api.deepseek.com" # DeepSeek API 的 base URL
)
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Python
IGNORE_WHEN_COPYING_END
api_key: 将 YOUR_DEEPSEEK_API_KEY 替换为您在 DeepSeek 平台申请的 API Key。
base_url: 将 base_url 设置为 https://api.deepseek.com。您也可以设置为
https://api.deepseek.com/v1,但这与模型版本无关,仅为兼容 OpenAI API 格式。
3. 核心功能和用法
以下介绍如何使用 OpenAI SDK 调用 DeepSeek API 的主要功能:
3.1 聊天对话 (Chat Completion)
ChatCompletion.create() 方法用于调用聊天模型,例如 deepseek-chat 和 deepseek-reasoner。
示例:简单的聊天对话 (非流式)
from openai import OpenAI
client = OpenAI(
api_key="YOUR_DEEPSEEK_API_KEY",
base_url="https://api.deepseek.com"
)
response = client.chat.completions.create(
model="deepseek-chat", # 或 "deepseek-reasoner"
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你好,DeepSeek!"}
]
)
print(response.choices[0].message.content)
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Python
IGNORE_WHEN_COPYING_END
model 参数: 指定要调用的模型,例如 "deepseek-chat" (DeepSeek V3) 或 "deepseek-reasoner" (DeepSeek R1)。
messages 参数: 一个消息列表,定义了对话的上下文。每个消息是一个字典,包含 role (角色,例如 "system", "user", "assistant") 和 content (消息内容)。
system 角色消息用于设定模型的行为和角色。
user 角色消息是用户的输入。
assistant 角色消息是模型的回复 (在多轮对话中,需要手动添加上一轮的 assistant 回复到 messages 列表中)。
response.choices[0].message.content: 访问模型返回的回复内容。
示例:流式聊天对话 (Streaming)
要使用流式输出,设置 stream=True 参数。
from openai import OpenAI
client = OpenAI(
api_key="YOUR_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": "请用流式输出回复。"}
],
stream=True
)
for chunk in response:
if chunk.choices: # 确保 chunk 中包含 choices 字段
delta = chunk.choices[0].delta
if delta.content: # 确保 delta 中包含 content 字段
print(delta.content, end="", flush=True)
print() # 换行
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Python
IGNORE_WHEN_COPYING_END
stream=True: 启用流式输出。
迭代 response: 流式输出的 response 对象是一个迭代器,需要遍历 response 来逐块获取模型输出的内容。
chunk.choices[0].delta.content: 在每个 chunk 中,通过 chunk.choices[0].delta.content 获取增量输出的内容。
3.2 推理模型思维链 (DeepSeek-Reasoner)
对于 deepseek-reasoner 模型,您可以通过 response.choices[0]
.message.reasoning_content 访问模型的思维链内容。
from openai import OpenAI
client = OpenAI(
api_key="YOUR_DEEPSEEK_API_KEY",
base_url="https://api.deepseek.com"
)
response = client.chat.completions.create(
model="deepseek-reasoner",
messages=[
{"role": "user", "content": "9.11 and 9.8, which is greater?"}
]
)
reasoning_content = response.choices[0].message.reasoning_content
content = response.choices[0].message.content
print("思维链:\n", reasoning_content)
print("\n最终答案:\n", content)
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Python
IGNORE_WHEN_COPYING_END
model="deepseek-reasoner": 指定使用推理模型。
response.choices[0]
.message.reasoning_content: 获取思维链内容。
response.choices[0].message.content: 获取最终答案内容。
3.3 Function Calling
DeepSeek API 支持 Function Calling 功能,允许模型调用外部函数。
示例:Function Calling (获取天气信息)
from openai import OpenAI
import json
client = OpenAI(
api_key="YOUR_DEEPSEEK_API_KEY",
base_url="https://api.deepseek.com"
)
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather of an location, the user shoud supply a location first",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
}
},
"required": ["location"]
},
}
},
]
messages = [{"role": "user", "content": "How's the weather in Hangzhou?"}]
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
tools=tools
)
message = response.choices[0].message
if message.tool_calls:
tool_call = message.tool_calls[0]
function_name = tool_call.function.name
function_arguments = json.loads(tool_call.function.arguments)
if function_name == "get_weather":
location = function_arguments.get("location")
# 模拟调用外部函数 get_weather(location) 获取天气信息
weather_info = f"25°C, Sunny in {location}"
print(f"Function Call: {function_name}({function_arguments})")
print(f"Function Result: {weather_info}")
# 将函数结果返回给模型
messages.append(message) # 添加 assistant 消息
messages.append(
{
"role": "tool",
"tool_call_id": tool_call.id,
"content": weather_info,
}
)
# 再次调用模型,让模型根据函数结果生成最终回复
second_response = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
tools=tools # 再次传入 tools,以便模型继续调用其他函数或生成最终回复
)
final_message = second_response.choices[0].message
print(f"Model Final Response: {final_message.content}")
else:
print(f"Model Response: {message.content}")
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Python
IGNORE_WHEN_COPYING_END
tools 参数: 定义可调用的函数列表,包括函数名称、描述、参数等。
response.choices[0].message.tool_calls: 检查模型是否返回了函数调用建议。
tool_call.function.name 和
tool_call.function.arguments: 获取模型建议调用的函数名和参数。
模拟函数调用: 示例中 weather_info = f"25°C, Sunny in {location}" 部分需要替换为实际调用外部函数获取天气信息的代码。
返回函数结果: 将函数执行结果以 role="tool" 的消息添加到 messages 列表中,并再次调用模型,让模型根据函数结果生成最终回复。
3.4 JSON Output
DeepSeek API 支持 JSON Output 功能,强制模型输出 JSON 格式的字符串。
示例:JSON Output (提取问题和答案为 JSON)
from openai import OpenAI
import json
client = OpenAI(
api_key="YOUR_DEEPSEEK_API_KEY",
base_url="https://api.deepseek.com"
)
system_prompt = """
The user will provide some exam text. Please parse the "question" and "answer" and output them in JSON format.
EXAMPLE INPUT: Which is the highest mountain in the world? Mount Everest.
EXAMPLE JSON OUTPUT:
{
"question": "Which is the highest mountain in the world?",
"answer": "Mount Everest"
}
"""
user_prompt = "Which is the longest river in the world? The Nile River."
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
]
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
response_format={'type': 'json_object'}
)
json_output = json.loads(response.choices[0].message.content)
print(json_output)
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Python
IGNORE_WHEN_COPYING_END
response_format={'type': 'json_object'}: 启用 JSON Output 功能。
System Prompt 指导: 在 System Prompt 中明确指导模型输出 JSON 格式,并提供 JSON 示例。
json.loads(): 使用 json.loads() 解析模型返回的 JSON 字符串。
3.5 Beta 功能 (对话前缀续写, FIM 补全, 8K 最长输出)
要使用 Beta 功能,需要将 base_url 设置为
https://api.deepseek.com/beta。
示例:对话前缀续写 (Beta)
from openai import OpenAI
client = OpenAI(
api_key="YOUR_DEEPSEEK_API_KEY",
base_url="https://api.deepseek.com/beta" # Beta base URL
)
messages = [
{"role": "user", "content": "Please write quick sort code"},
{"role": "assistant", "content": "```python\n", "prefix": True}
]
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
stop=["```"],
)
print(response.choices[0].message.content)
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Python
IGNORE_WHEN_COPYING_END
base_url="
https://api.deepseek.com/beta": 设置为 Beta API 的 base URL。
prefix=True: 在 assistant 消息中设置 prefix=True 启用对话前缀续写功能。
示例:FIM 补全 (Beta)
from openai import OpenAI
client = OpenAI(
api_key="YOUR_DEEPSEEK_API_KEY",
base_url="https://api.deepseek.com/beta" # Beta base URL
)
response = client.completions.create( # 使用 completions 接口
model="deepseek-chat",
prompt="def fib(a):",
suffix=" return fib(a-1) + fib(a-2)",
max_tokens=128
)
print(response.choices[0].text)
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Python
IGNORE_WHEN_COPYING_END
client.completions.create(): FIM 补全使用 completions 接口,而不是 chat.completions 接口。
4. 查看 Token 用量 (Usage)
API 响应中会包含 usage 字段,显示本次请求的 Token 用量。
response = client.chat.completions.create(...)
usage = response.usage
print(f"Prompt Tokens: {usage.prompt_tokens}")
print(f"Completion Tokens: {usage.completion_tokens}")
print(f"Total Tokens: {usage.total_tokens}")
print(f"Cache Hit Tokens: {
usage.prompt_cache_hit_tokens}") # 缓存命中 Token 数
print(f"Cache Miss Tokens: {
usage.prompt_cache_miss_tokens}") # 缓存未命中 Token 数
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Python
IGNORE_WHEN_COPYING_END
response.usage: 访问 usage 对象。
usage.prompt_tokens, usage.completion_tokens, usage.total_tokens: 分别表示输入 Token 数、输出 Token 数和总 Token 数。
usage.prompt_cache_hit_tokens,
usage.prompt_cache_miss_tokens: 显示缓存命中和未命中的 Token 数,用于计费参考。
5. 注意事项和最佳实践
API Key 安全: 妥善保管您的 DeepSeek API Key,避免泄露。
模型选择: 根据任务需求选择合适的模型,deepseek-chat (通用对话) 或 deepseek-reasoner (推理能力)。
Prompt 优化: 编写清晰、明确的 Prompt,以获得更好的模型输出结果。
参数调整: 根据需要调整 temperature、max_tokens 等参数,控制模型输出的行为。
错误处理: 合理处理 API 返回的错误,例如检查错误码和错误信息。
Beta 功能风险: Beta 功能可能不稳定,请谨慎使用,并关注 DeepSeek 官方的更新说明。
DeepSeek API 文档: 详细的功能和参数说明,请参考 DeepSeek API 官方文档:
https://api-docs.deepseek.com/zh-cn/
OpenAI SDK 文档: 更深入的 OpenAI SDK 使用方法,请参考 OpenAI 官方文档:
https://platform.openai.com/docs/libraries/python
希望这份详细的 OpenAI Python SDK 使用 DeepSeek API 指南能够帮助您快速上手并有效地使用 DeepSeek 的强大模型!
猜你喜欢
- 2025-03-20 如何用Python列表推导式减少代码运行时间
- 2025-03-20 python入门-day23:初识机器学习(python 机器学习)
- 2025-03-20 [今日推荐:pyTermTk] 轻松打造酷炫终端界面的利器
- 2025-03-20 在python终端中打印颜色的3中方式(python3经典编程案例)
- 2025-03-20 超算互联网DeepSeek-R1 API接口服务开启,免费100万Tokens
- 2025-03-20 python入门-Day 17: NumPy 基础(python3.10 numpy)
- 2025-03-20 Github高星终端高亮和色彩渲染库——Rich
- 2025-03-20 python远程管理编程中如何处理Fn(功能)键
- 2025-03-20 不花一分钱:用DeepSeek学Python,保姆级教程
- 2025-03-20 零基础也能轻松上手!Python Flask快速构建你的第一个Web应用
- 261℃Python短文,Python中的嵌套条件语句(六)
- 261℃python笔记:for循环嵌套。end=""的作用,图形打印
- 260℃PythonNet:实现Python与.Net代码相互调用!
- 255℃Python实现字符串小写转大写并写入文件
- 254℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 110℃原来2025是完美的平方年,一起探索六种平方的算吧
- 94℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 87℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)