三、多轮对话

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")

更多推荐