保姆级教程:Python调用DeepSeek-v3 API实现多轮对话上下文管理

本教程将手把手教您实现智能对话机器人的上下文记忆功能

一、环境准备

1.1 安装必要库

pip install openai

1.2 获取API密钥

  1. 登录DeepSeek官网
  2. 创建应用并获取API Key

二、OpenAI 标准调用格式深度解析

作为AI领域的API设计标杆,OpenAI的调用规范已成为行业标准。本部分将深入解析其核心调用逻辑

 2.1请求结构三步曲

# 示例代码框架
from openai import OpenAI

# 1️⃣ 客户端初始化
client = OpenAI(
    api_key="your_key",
    base_url="https://api.deepseek.com"  # DeepSeek定制化接入点
)

# 2️⃣ 请求参数配置
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[...],  # 核心对话容器
    stream=False      # 流式开关
)

# 3️⃣ 响应对象解析
print(response.choices[0].message.content)

1  实例化客户端,指定大模型的base_url和api_key

2  设置请求参数,其中messages是必填参数,类型是列表,每个列表项由content和role字段组成,有system message, user message, assistant message, tool message四种:

system message: 设置系统消息, 提供对话背景
user message:设置用户对话内容
assistant message: 设置大模型输出内容和使用函数,除了content和role字段外,还有tool_calls字段,是可选的列表类型,指定大模型要调用的函数(比如联网搜索函数,计算器函数等扩展大模型能力)
tool message: 在用户根据assistant的tool_calls内容调用了某个函数后,用户可能还需要再把函数调用结果反馈给大模型,让大模型根据函数调用结果给出最终的总结性的答复。除了content和role字段外,还有tool_call_id字段,表示对指定函数反馈。


对于问答项目,一般只需要system message,user message和assistant message三个字段,tool message一般用于设置大模型调用扩展函数的能力,是开发AI Agent的关键。

3 解析请求返回对象

     非流式调用返回chat completion object(大模型一次性输出全部回答), 包括

id:本次会话唯一标识符
choices: 响应的内容列表, choices列表项中message对象的content字段记录了大模型回答的内容
created: 聊天完成时间
model: 用于聊天的模型
usage: 本次聊天统计请求,包括生成token的数目等


    流式调用(大模型一个词一个词输出, 问答网站的常见形式)返回

三、基础版单轮对话实现

from openai import OpenAI
#初始化客户端,连接OpenAI服务
client = OpenAI(api_key="your_api_key",base_url="https://api.deepseek.com")
question = input("您好,请输入您的问题")
#调用API生成回答
response = client.chat.completions.create(
    #指定模型类型,这里的deepseek-chat 是deepseek-v3.具体模型名称在每个模型的说明文档中都能找到
    model = "deepseek-chat",
    #定义上下文对话
    #role(可选) 角色类型
    # - "system":设定助手行为(通常在对话开头)
    # - "user":用户的输入内容(更推荐这里使用)
    # - "assistant":助手的先前回复
    messages=[
        {"role":"system","content":"你是一个乐于助人的助手"},
        {"role":"user","content":question}
    ],
    temperature=0.7,# 控制随机性 (0.0-2.0)
    max_tokens=500, # 限制生成文本的最大长度
    stream=False    # 是否启用流式传输(逐段接收数据)
)
print(response.choices[0].message.content) # 获取第一个回复内容

补充:

参数名称类型必填作用描述推荐值范围示例值注意事项
temperaturefloat控制输出的随机性0.0-2.00.7值越高输出越随机,与top_p二选一
top_pfloat核采样阈值,控制输出的多样性0.0-1.00.9与temperature二选一
max_tokensinteger生成内容的最大token数1-4096500需考虑模型最大限制
streamboolean是否启用流式响应true/falsefalse启用后需逐块处理响应
ninteger生成多个独立回复1-52会增加API成本
stoparray遇到指定字符串时停止生成最多4个字符串["。","\n"]对中文建议使用句号
presence_penaltyfloat惩罚重复主题(正值减少重复)-2.0-2.00.5适用于长文本生成
frequency_penaltyfloat惩罚重复用词(正值减少重复)-2.0-2.00.5与presence_penalty配合使用

四、进阶版多轮对话实现

Messages参数是对话历史和上下文的核心载体。
• 必须是包含消息对象的数组
• 每个消息对象必须包含:
        role:发言者身份(system/user/assistant)
        content:具体内容

from openai import OpenAI
client = OpenAI(api_key="your_api_key",base_url="https://api.deepseek.com")
messages = [
    {"role":"system","content":"你是一个乐于助人的助手,你的名字叫唐包"}
]
while True:
    user_input = input("\n您: ")
    if user_input.lower() in ["quit","exit","退出"]:
        print("感谢您的使用!唐包期待下一次再见")
        break
    #将用户输入添加到消息队列
    messages.append({"role":"user","content":user_input})
    #调用api
    response = client.chat.completions.create(
        model="deepseek-chat",
        messages=messages,
        temperature=0.7,
        max_tokens=500
    )
    ai_response = response.choices[0].message.content
    print(f"\n唐包:{ai_response}")
    #将回复加入消息队列
    messages.append(({"role":"assistant","content":ai_response}))
print("对话结束")

在上述代码中,运用了消息队列

消息队列结构

[
  {"role": "system", ...},  # 系统指令
  {"role": "user", ...},    # 用户问题1
  {"role": "assistant", ...}, # AI回复1
  {"role": "user", ...}     # 用户问题2
  ......
]

五、实战效果演示

您:今天是2025年4月24日,天气18-25度,晴。今天我想学习大模型相关技术,请帮我写一个学习计划

唐包:好的!以下是一个针对大模型技术的学习计划,结合你的学习目标和今天的日期(2025年4月24日),分为短期(1个月)、中期(3个月)和长期(6个月)三个阶段,内容涵盖基础理论、实践应用和前沿进展。

---

### **大模型技术学习计划(2025年4月-10月)**

#### **一、短期目标(1个月):打牢基础**
**核心任务**:理解大模型的基本原理、发展历程和关键技术。  
**每日学习时间**:2-3小时  

1. **第一周(4.24-4.30)——理论基础**  
   - **学习内容**:  
     - 大模型的定义与核心概念(Transformer架构、注意力机制)。  
     - 阅读经典论文:  
       - 《Attention Is All You Need》(Transformer原论文)。  
       - 《BERT: Pre-training of Deep Bidirectional Transformers》。  
     - 了解大模型的发展史(从GPT-1到GPT-4、LLaMA、Claude等)。  
   - **实践任务**:  
     - 用Hugging Face库跑通一个简单的BERT或GPT-2 demo(如文本生成或分类)。  

2. **第二周(5.1-5.7)——模型架构与训练**  
   - **学习内容**:  
     - 深入理解Transformer的编码器/解码器结构。  
     - 大模型的训练流程(预训练、微调、提示工程)。  
     - 数据并行、模型并行等分布式训练技术。  
   - **实践任务**:  
     - 在Colab或本地部署一个小型LLM(如TinyBERT),尝试微调自定义数据集。  

3. **第三周(5.8-5.14)——Prompt工程与工具链**  
   - **学习内容**:  
     - Prompt设计技巧(Few-shot、Chain-of-Thought)。  
     - 大模型应用框架(LangChain、LlamaIndex)。  
   - **实践任务**:  
     - 用OpenAI API或开源模型实现一个问答系统。  

4. **第四周(5.15-5.21)——优化与部署**  
   - **学习内容**:  
     - 模型量化(如GGML)、剪枝、LoRA微调等

您:还有几天能放五一?

唐包:关于五一假期的问题:  
2025年五一劳动节是**5月1日(周四)**,根据中国法定节假日安排,通常放假时间为**5月1日至5月5日**(共5天,含调休)。  

今天是**4月24日(周四)**,距离五一假期还有:  
- **7天**(如果不算今天,从4月25日开始计数)。  

你可以这样安排时间:  
1. **本周**:抓紧完成手头工作/学习任务。  
2. **下周**:4月28日-30日可能需要调休上班(具体以国务院通知为准)。  
3. **假期**:5月1日-5日可自由规划!  

如果需要更精确的调休安排,建议查看2025年官方节假日通知。祝你假期愉快,学习计划顺利推进! 🎉

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值