本教程将手把手教您实现智能对话机器人的上下文记忆功能
一、环境准备
1.1 安装必要库
pip install openai
1.2 获取API密钥
- 登录DeepSeek官网
- 创建应用并获取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) # 获取第一个回复内容
补充:
参数名称 | 类型 | 必填 | 作用描述 | 推荐值范围 | 示例值 | 注意事项 |
---|---|---|---|---|---|---|
temperature | float | 否 | 控制输出的随机性 | 0.0-2.0 | 0.7 | 值越高输出越随机,与top_p二选一 |
top_p | float | 否 | 核采样阈值,控制输出的多样性 | 0.0-1.0 | 0.9 | 与temperature二选一 |
max_tokens | integer | 否 | 生成内容的最大token数 | 1-4096 | 500 | 需考虑模型最大限制 |
stream | boolean | 否 | 是否启用流式响应 | true/false | false | 启用后需逐块处理响应 |
n | integer | 否 | 生成多个独立回复 | 1-5 | 2 | 会增加API成本 |
stop | array | 否 | 遇到指定字符串时停止生成 | 最多4个字符串 | ["。","\n"] | 对中文建议使用句号 |
presence_penalty | float | 否 | 惩罚重复主题(正值减少重复) | -2.0-2.0 | 0.5 | 适用于长文本生成 |
frequency_penalty | float | 否 | 惩罚重复用词(正值减少重复) | -2.0-2.0 | 0.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年官方节假日通知。祝你假期愉快,学习计划顺利推进! 🎉