大模型应用开发(三)_多轮对话
·
三、多轮对话
3.1 什么是多轮对话
多轮对话(Multi-turn Conversation)指的是人工智能系统与用户之间进行连续交互的能力,即系统能够在对话中保持上下文、理解用户意图,并在多轮问答中提供连贯、智能的回应。与单轮问答不同,多轮对话强调上下文依赖和逻辑延续,能够处理复杂的对话场景,如客户服务、智能助理、咨询问答等。
简单例子:
用户:明天北京天气如何? 系统:明天北京多云,气温 10-18℃。 用户:那后天呢? 系统:后天北京晴,气温 12-20℃。
在这个例子中,系统记住了用户之前询问的是“北京”,即便用户第二次只说“后天”,也能正确理解上下文。
3.2 多轮对话应用场景
- 智能客服
- 自动解答常见问题,辅助人工客服处理复杂问题。
- 智能助理
- 如 Siri、Alexa、ChatGPT,可管理日程、查询信息、执行任务。
- 医疗咨询
- 提供症状分析、健康建议,保持连续对话记录。
- 教育与培训
- 智能问答、互动式教学,针对学生问题提供逐步指导。
- 企业内部知识问答
- 帮助员工查询文档、流程或政策,提高工作效率。
3.3 多轮对话上下文窗口工作原理

1. 早期对话(第 1-3 轮)
- 每一轮对话时,上下文窗口会包含之前所有的历史消息(比如第 2 轮输入是 “问题 1+AI 回复 1 + 问题 2”,第 3 轮输入是 “问题 1+AI 回复 1 + 问题 2+AI 回复 2 + 问题 3”)。
- 这样 AI 能基于完整的历史对话,给出连贯的回复(比如回复 2、回复 3 都能承接前面的内容)。
2. 后期对话(第 n 轮)
- 当对话轮数变多,历史消息总量会超过上下文窗口的长度限制。
- 此时 AI 会自动截断更早的历史消息(只保留近期的几轮对话,比如图里的 “问题 n-2 到问题 n”),甚至可能对更早的内容做摘要压缩,避免超出窗口长度。
简单说:上下文窗口就像 AI 的 “短期记忆”—— 对话初期能记住全部内容,聊久了会自动 “精简记忆”,只保留最近的关键信息,保证对话连贯的同时不超负载。
3.4 多轮对话示例

其中需要配置自己的密钥文件参考如下:

具体代码实现如下
# 每次手动输入问题,实现多轮对话
import os
from dotenv import load_dotenv
from openai import OpenAI
# 加载 .env 文件
load_dotenv()
# 从 .env 文件读取配置
api_key = os.getenv("DEEPSEEK_API_KEY")
base_url = os.getenv("DEEPSEEK_BASE_URL")
# 初始化客户端
client = OpenAI(api_key=api_key, base_url=base_url)
# 用于存储对话消息
messages = []
print("多轮对话测试开始,输入 'exit' 退出。")
while True:
# 用户输入问题
user_input = input("你: ")
if user_input.lower() in ["exit", "quit"]:
print("对话结束。")
break
# 添加用户消息
messages.append({"role": "user", "content": user_input})
# 调用 Chat API
response = client.chat.completions.create(
model="deepseek-chat",
messages=messages
)
# 获取模型回答(注意使用属性访问)
assistant_message = response.choices[0].message
# 添加模型回答到 messages 中
messages.append({"role": assistant_message.role, "content": assistant_message.content})
# 输出模型回答
print(f"AI: {assistant_message.content}\\n")
更多推荐

所有评论(0)