【Python】OpenAI:调用深度求索(DeepSeek)API
本教程将帮助你快速入门 DeepSeek API 的文本生成和多轮对话功能。以下是最简洁且实用的步骤,帮助你通过 DeepSeek 实现智能对话。
快速入门
安装 OpenAI SDK
首先需要安装 openai
SDK,这是与 DeepSeek API 进行交互的关键库。运行以下命令来安装:
pip3 install openai
配置 API 密钥和 Base URL
通过以下代码配置你的 DeepSeek API 密钥和 Base URL(请替换为你的实际 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)
这段代码将生成基于用户输入 “Hello” 的模型回应,并输出结果。
多轮对话示例
你可以通过保存历史对话来实现多轮对话。以下是一个简单的两轮对话示例:
# Round 1
messages = [{"role": "user", "content": "What's the highest mountain in the world?"}]
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages
)
messages.append(response.choices[0].message)
print(f"Messages Round 1: {messages}")
# Round 2
messages.append({"role": "user", "content": "What is the second?"})
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages
)
messages.append(response.choices[0].message)
print(f"Messages Round 2: {messages}")
输出对话内容
在每一轮对话后,模型会根据历史上下文生成新的响应,并附加到 messages
中。最终,你可以打印出每轮对话的内容。
面向对象封装
下面是使用面向对象思想设计的一个 Chatter
类,包含简单文本生成、支持多轮对话(自动保存和发送历史对话)以及清空记忆功能。这个类利用 DeepSeek 的 API 完成这些功能:
Chatter
类设计
from openai import OpenAI
class Chatter:
def __init__(self, api_key, base_url="https://api.deepseek.com"):
"""初始化 Chatter 类,配置 DeepSeek API。"""
self.client = OpenAI(api_key=api_key, base_url=base_url)
self.messages = [] # 用于存储多轮对话的历史消息
def generate_text(self, prompt):
"""进行简单文本生成,根据给定的提示生成文本。"""
response = self.client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": prompt}],
stream=False
)
return response.choices[0].message.content
def chat(self, user_input):
"""进行多轮对话。将用户输入与历史对话一起发送。"""
# 添加用户输入到历史对话
self.messages.append({"role": "user", "content": user_input})
# 发送整个对话历史给 DeepSeek,获取模型回应
response = self.client.chat.completions.create(
model="deepseek-chat",
messages=self.messages,
stream=False
)
# 获取模型的回应
assistant_message = response.choices[0].message.content
# 将模型回应添加到历史对话
self.messages.append({"role": "assistant", "content": assistant_message})
return assistant_message
def clear_memory(self):
"""清空历史对话记忆。"""
self.messages = []
类功能说明
1. generate_text(prompt)
:
这个方法接收一个提示 prompt
,并返回生成的文本。它用于进行简单的文本生成。
2. chat(user_input)
:
这个方法实现了多轮对话。它会将用户输入的对话与历史对话一起发送给模型,然后返回模型的回答。历史对话会保存在类的实例中,因此每次调用 chat
时,模型都能基于之前的对话生成合理的响应。
3. clear_memory()
:
这个方法会清空保存的历史对话,使模型在下次对话时不再记得之前的内容。可以用来重置对话的记忆状态。
示例用法
以下是如何使用 Chatter
类进行文本生成和多轮对话的示例:
if __name__ == '__main__':
# 初始化 Chatter 类
chatter = Chatter(api_key="<你的 DeepSeek API Key>")
# 生成简单文本
response = chatter.generate_text("给我讲一个关于编程的笑话。")
print("生成的文本:", response)
# 多轮对话
response1 = chatter.chat("世界上最高的山是哪座?")
print("助手:", response1)
response2 = chatter.chat("它有多高?")
print("助手:", response2)
# 清空记忆
chatter.clear_memory()
# 新的一轮对话,记忆已清空
response3 = chatter.chat("美国的第一任总统是谁?")
print("助手:", response3)
功能总结
- 简单文本生成:通过
generate_text()
方法输入一个提示,返回生成的文本。 - 多轮对话:通过
chat()
方法自动保存对话历史,并根据上下文生成回复。 - 清空记忆:通过
clear_memory()
方法清空历史对话记忆,适用于需要重置对话状态的情况。
这样设计的 Chatter
类简洁且功能完备,可以轻松管理生成文本和多轮对话,同时也能清除记忆以适应不同场景的需求。