程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

OpenAI Python SDK 使用指南(open python3)

hfteth 2025-03-20 15:06:19 技术文章 12 ℃

简介


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 的强大模型!

Tags:

最近发表
标签列表