当前位置: 首页 > article >正文

【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 类简洁且功能完备,可以轻松管理生成文本和多轮对话,同时也能清除记忆以适应不同场景的需求。


http://www.kler.cn/a/472786.html

相关文章:

  • Python中的可变对象与不可变对象;Python中的六大标准数据类型哪些属于可变对象,哪些属于不可变对象
  • Android车载音频系统目录
  • NOVA:AutoRegressive Video Generation Without Vector Quantization——自回归视频生成无需向量量化
  • excel如何将小数转换为百分比
  • Excel 做数据分析的好与不好
  • 分布式多机多卡训练全景指南:MPI、DeepSpeed 与 Colossal-AI 深度解析
  • 三峡国际与葡萄牙电力(EDP)联合考察团调研稳石氢能,AEM低成本制氢技术获关注。
  • js获取当前浏览器地址,ip,端口号等等
  • F#语言的软件工程
  • C#用winform窗口程序操作服务+不显示Form窗体,只显示右下角托盘图标+开机时自启动程序【附带项目地址】
  • 【Spring】Spring实现加法计算器和用户登录
  • SQL进阶实战技巧:如何利用 Oracle SQL计算线性回归置信区间?
  • 广西钦州刘永福故居钦江爆破振动自动化监测
  • 雅思口语话题之住所和学习工作
  • 现代密码学期末重点(备考ing)
  • chrome浏览器的更新提示弹窗无法更新Chrome解决方法
  • Android实战经验篇-增加系统分区
  • 智慧农业应用场景|珈和科技高标准农田信息化监管平台解决方案
  • 后端服务集成ElasticSearch搜索功能技术方案
  • Java 后端开发常用的技术栈
  • 嵌入式软件C语言面试常见问题及答案解析(三)
  • ARM V7 A架构指令集:聚焦分支指令
  • Nginx实现接口复制
  • MDX语言的计算机基础
  • 《Hands on Large Language Models》(深入浅出大型语言模型)实战书探秘
  • AJAX技术入门与应用实践