Day 6 / 7

多轮对话

上下文管理,记忆系统,打造智能对话体验

📖 预计阅读时间:70分钟🎯 难度:中级

前面五天,我们学会了创建 Bot、使用插件、设计工作流、管理知识库。但你有没有发现,每次对话 Bot 都像"失忆"一样,不记得之前说过什么?这就是多轮对话(Multi-turn Conversation)要解决的问题——让 Bot 记住上下文,实现连贯、自然的对话体验。

一、什么是多轮对话

1.1 单轮 vs 多轮对话

对比示例

❌ 单轮对话(无记忆)

用户:"北京明天天气怎么样?"

Bot:"北京明天晴天,15-25度"

用户:"那后天呢?"

Bot:"请问您想查询哪个城市的天气?"(忘记了是北京)

问题:Bot 不记得上一轮说的"北京"

✅ 多轮对话(有记忆)

用户:"北京明天天气怎么样?"

Bot:"北京明天晴天,15-25度"

用户:"那后天呢?"

Bot:"北京后天多云,12-22度"(记住了是北京)

优势:对话连贯、自然,用户体验好

1.2 多轮对话的核心要素

🧠

上下文记忆

Bot 能记住之前的对话内容,包括用户说过什么、Bot 回复过什么。

🔗

指代消解

理解"它"、"那个"、"刚才说的"等指代词,知道用户在说什么。

💬

话题延续

在同一个话题下持续对话,不会突然跳转到无关内容。

🎯

意图理解

结合上下文理解用户的真实意图,而不是孤立地看每一句话。

二、Coze 的对话记忆机制

2.1 会话(Session)概念

在 Coze 中,一次完整的对话称为一个会话(Session)。会话内的所有消息都会被记录,形成上下文。

会话的生命周期

1

会话开始

用户发送第一条消息,创建新会话

2

会话进行

用户和 Bot 持续对话,消息不断累积

3

会话结束

用户关闭对话窗口,或超过一定时间无互动(通常30分钟)

4

会话清除

会话历史被清除,下次对话从零开始(除非启用长期记忆)

2.2 上下文窗口

Bot 不会记住所有历史消息,而是保留最近的 N 条消息作为上下文窗口

上下文窗口大小

默认设置

保留最近 10-20 轮对话(20-40 条消息)

为什么有限制?

• LLM 的输入长度有限(如 GPT-4 最多 8k tokens)

• 上下文越长,推理越慢,成本越高

• 太长的上下文会"稀释"重要信息

如何调整?

在 Bot 设置中,可以配置"上下文轮数",范围通常是 5-50 轮

💡 上下文窗口的权衡

窗口太小(5轮)

优点:响应快,成本低

缺点:很快忘记之前的内容,对话不连贯

窗口太大(50轮)

优点:记忆力强,对话连贯

缺点:响应慢,成本高,可能超出模型限制

推荐设置

• 客服场景:10-15 轮(够用且高效)

• 深度对话:20-30 轮(如咨询、辅导)

• 简单问答:5-10 轮(快速响应)

2.3 记忆类型

短期记忆(会话内)

默认

只在当前会话内有效,会话结束后清除。

适用场景:

• 临时咨询(查天气、查快递)

• 一次性任务(生成文案、翻译)

• 不需要记住用户信息的场景

长期记忆(跨会话)

高级

跨会话保存,即使用户下次再来,Bot 也能记住之前的信息。

适用场景:

• 个人助理(记住用户偏好、习惯)

• 学习辅导(记住学习进度、薄弱点)

• 客户服务(记住历史问题、订单)

结构化记忆(数据库)

高级

将关键信息提取并存储到数据库,方便查询和管理。

适用场景:

• 用户画像(姓名、年龄、职业、偏好)

• 订单管理(订单号、状态、金额)

• 任务跟踪(待办事项、完成状态)

三、配置多轮对话

3.1 基础配置

1️⃣启用会话记忆

• 进入 Bot 编辑页面

• 在"高级设置"中,找到"会话管理"

• 勾选"启用会话记忆"

2️⃣设置上下文轮数

上下文轮数

设置保留多少轮对话,建议 10-20 轮

会话超时时间

设置多久无互动后结束会话,建议 30 分钟

3️⃣优化提示词

在提示词中说明如何使用上下文:

你是一个智能助手,能够记住对话历史。

## 上下文使用规则

1. 仔细阅读对话历史,理解用户的意图
2. 如果用户使用"它"、"那个"等指代词,根据上下文判断指的是什么
3. 保持话题连贯,不要突然跳转到无关内容
4. 如果用户换了话题,自然地切换,不要纠结之前的内容

3.2 长期记忆配置

如果需要跨会话记住用户信息,需要配置长期记忆功能。

配置步骤

1. 启用用户识别

在 Bot 设置中,启用"用户识别"功能,为每个用户分配唯一 ID。

• 通过登录系统获取用户 ID

• 或使用设备指纹识别

• 或让用户输入手机号/邮箱

2. 配置记忆存储

选择记忆存储方式:

Coze 内置存储:简单方便,但容量有限

外部数据库:需要配置 API,容量大,可自定义

3. 定义记忆内容

在提示词中说明要记住什么:

## 长期记忆规则

需要记住的信息:
- 用户姓名、称呼偏好
- 用户的职业、兴趣
- 用户的常见问题和偏好
- 历史订单、服务记录

记忆方式:
- 当用户主动告知信息时,记录下来
- 在后续对话中,主动使用这些信息
- 例如:"您好,张先生,上次您咨询过..."

四、上下文管理高级技巧

4.1 上下文压缩策略

当对话很长时,上下文会超出模型限制。这时需要压缩历史对话,保留关键信息。

策略1:滑动窗口

只保留最近的 N 轮对话,丢弃更早的内容。

工作原理:

对话历史:[消息1, 消息2, ..., 消息50]

窗口大小:20 条

保留:[消息31, 消息32, ..., 消息50]

丢弃:[消息1, 消息2, ..., 消息30]

优点:简单高效

缺点:可能丢失重要信息

策略2:智能摘要

用 LLM 总结历史对话,保留关键信息,压缩成简短摘要。

工作原理:

1. 当对话超过阈值(如 30 轮)

2. 用 LLM 总结前 20 轮对话

3. 摘要示例:"用户想买笔记本,预算 6000 元,用于办公和视频剪辑"

4. 用摘要替换原始对话

优点:保留关键信息,压缩率高

缺点:需要额外的 LLM 调用,有成本

策略3:重要性过滤

根据消息的重要性,选择性保留。

判断标准:

• 包含关键信息(用户需求、偏好、决策)

• 被后续对话引用

• 用户明确表示"记住这个"

优点:精准保留重要信息

缺点:实现复杂,需要训练模型

策略4:分层存储

将对话分为多个层次,不同层次使用不同的压缩策略。

存储层次:

热数据:最近 5 轮,完整保留

温数据:6-20 轮,保留关键消息

冷数据:20 轮以上,只保留摘要

优点:平衡性能和记忆

4.2 指代消解技术

理解"它"、"那个"、"刚才说的"等指代词,是多轮对话的核心能力。

常见指代类型

1. 代词指代

用户:"这款手机多少钱?"

Bot:"3999 元"

用户:"有什么颜色?"

→ "它" 指代 "这款手机"

2. 省略主语

用户:"推荐一款笔记本"

Bot:"推荐联想小新 Pro"

用户:"配置怎么样?"(省略了"这款笔记本")

→ 指代 "联想小新 Pro"

3. 时间指代

用户:"北京明天天气怎么样?"

Bot:"明天晴天"

用户:"后天呢?"

→ "后天" 基于 "明天" 推算

4. 对比指代

用户:"A 和 B 哪个好?"

Bot:"A 性价比高,B 性能强"

用户:"那我选第一个"

→ "第一个" 指代 "A"

💡 提示词优化:引导指代消解

## 指代消解规则

1. 当用户使用"它"、"这个"、"那个"时:
   - 查看最近的对话,找到最可能的指代对象
   - 通常指代最近提到的名词

2. 当用户省略主语时:
   - 延续上一轮的话题主体
   - 例如:上一轮说"手机",这一轮问"多少钱",指的是"手机多少钱"

3. 当用户使用"第一个"、"第二个"时:
   - 查看上一轮 Bot 的回复,找到列表中的对应项

4. 如果无法确定指代对象:
   - 礼貌地询问:"您是指...吗?"

4.3 话题切换检测

用户可能在对话中切换话题,Bot 需要识别并适应。

话题切换的信号

1. 明确的切换词

用户使用明确的转折词:

• "对了,..."

• "换个话题,..."

• "另外,..."

• "不说这个了,..."

2. 语义跳跃

新问题与之前的话题完全无关:

之前:讨论笔记本电脑

突然:问天气

→ 明显的话题切换

3. 新的问题类型

从咨询变成投诉,或从查询变成购买:

之前:咨询产品信息

现在:投诉售后问题

→ 话题和意图都变了

如何处理话题切换

策略1:自然过渡

识别到话题切换后,自然地切换:

用户:"对了,北京明天天气怎么样?"

Bot:"好的,我帮您查一下北京明天的天气..."(不再纠结之前的笔记本话题)

策略2:确认切换

如果不确定是否切换,可以确认:

用户:"那个怎么样?"

Bot:"您是指刚才说的笔记本,还是想问其他的?"

策略3:保留上下文

切换话题后,仍然保留之前的上下文,以防用户回到原话题:

用户:"天气查完了,刚才那个笔记本多少钱?"

Bot:"联想小新 Pro 是 5499 元"(记得之前的话题)

4.4 上下文冲突处理

有时用户会说出与之前矛盾的信息,Bot 需要妥善处理。

冲突类型1:用户改变主意

用户:"我预算 5000 元"

Bot:"好的,5000 元预算..."

用户:"算了,还是 6000 吧"

处理:以最新的信息为准,更新预算为 6000

冲突类型2:用户纠正错误

用户:"我叫张伟"

Bot:"好的,张伟先生"

用户:"不对,是张薇,女字旁的薇"

处理:道歉并更正,"抱歉,张薇女士,我记下了"

冲突类型3:Bot 理解错误

用户:"我想要轻薄的"

Bot:"推荐游戏本..."(理解错了)

用户:"不是,我要轻薄本,不是游戏本"

处理:承认错误,重新推荐,"抱歉理解错了,轻薄本的话..."

💡 冲突处理原则

1. 最新优先:当信息冲突时,以用户最新的说法为准

2. 主动确认:如果不确定,主动询问用户

3. 礼貌道歉:如果是 Bot 理解错了,要道歉

4. 更新记忆:及时更新上下文中的信息

五、实战案例

5.1 案例一:智能客服(短期记忆)

场景

用户咨询产品问题,需要多轮对话才能解决。

对话示例

👤

我想买一台笔记本电脑

🤖

好的!请问您主要用来做什么?办公、游戏还是设计?

👤

主要办公,偶尔剪视频

🤖

明白了。那您的预算大概是多少呢?

👤

6000左右

🤖

根据您的需求(办公+视频剪辑)和预算(6000元),我推荐以下两款:
1. 联想小新Pro 14(i5-12500H + 16G + 512G)
2. 华为MateBook 14(R7-5800H + 16G + 512G)
两款都适合办公和轻度剪辑,您想了解哪款的详细信息?

关键点

  • • Bot 记住了用户的需求(办公+剪视频)
  • • Bot 记住了用户的预算(6000元)
  • • 在推荐时,综合考虑了之前的所有信息

5.2 案例二:个人助理(长期记忆)

场景

用户的私人助理,记住用户的习惯和偏好,提供个性化服务。

第一次对话

👤

我叫张伟,是一名产品经理

🤖

您好,张伟!很高兴认识您。我已经记住了您的信息,以后可以叫您张先生或者张伟,您更喜欢哪个称呼?

👤

叫我张伟就好

第二天的对话

👤

早上好

🤖

早上好,张伟!今天有什么我可以帮您的吗?

关键点

  • • Bot 跨会话记住了用户的姓名和职业
  • • Bot 记住了用户的称呼偏好
  • • 第二天对话时,主动使用了这些信息

5.3 案例三:教育辅导(结构化记忆)

场景

AI 英语老师,记录学生的学习进度、薄弱点,提供个性化辅导。

记忆结构设计

{
  "student_id": "user_123",
  "name": "小明",
  "level": "中级",
  "weak_points": [
    "时态混淆(现在完成时 vs 过去时)",
    "冠词使用(a/an/the)"
  ],
  "learning_history": [
    {
      "date": "2024-03-01",
      "topic": "现在完成时",
      "score": 75,
      "mistakes": ["have went → have gone"]
    }
  ],
  "preferences": {
    "learning_style": "通过例句学习",
    "practice_time": "晚上 8-9 点"
  }
}

对话示例

👤

老师,我又来了

🤖

欢迎回来,小明!上次我们学习了现在完成时,你在 "have went" 这个地方出错了。今天我们继续巩固一下,顺便看看冠词的用法,这也是你的薄弱点。准备好了吗?

关键点

  • • 使用结构化数据存储学习记录
  • • 自动识别薄弱点,针对性辅导
  • • 记住学习偏好,提供个性化体验
  • • 可以生成学习报告和进度追踪

5.4 案例四:复杂场景(混合记忆策略)

场景

项目管理助手,需要同时处理多个项目,记住任务状态、团队成员、截止日期等信息。

记忆分层设计

第一层:会话记忆(短期)

当前对话的上下文,如"刚才讨论的那个任务"、"你提到的那个人"

第二层:项目记忆(中期)

当前项目的所有信息:任务列表、进度、成员、文档链接

第三层:用户记忆(长期)

用户的工作习惯、团队结构、常用工具、历史项目经验

对话示例

👤

帮我看看 A 项目的进度

🤖

好的!A 项目目前进度 75%,还有 3 个任务待完成:
1. UI 设计(负责人:小李,截止 3月10日)
2. 后端接口(负责人:小王,截止 3月12日)
3. 测试(负责人:小张,截止 3月15日)

根据你的习惯,我已经在每天早上 9 点给你发送进度提醒了。

👤

小李那个任务能按时完成吗?

🤖

根据小李的历史表现(上次 B 项目提前 2 天完成),以及当前进度(已完成 60%),应该能按时完成。不过我注意到他今天请假了,建议明天跟进一下。

关键点

  • • 三层记忆架构,分别处理不同时间跨度的信息
  • • 会话记忆:理解"那个任务"指的是刚才提到的 UI 设计
  • • 项目记忆:知道 A 项目的所有任务和负责人
  • • 用户记忆:记住用户的工作习惯(早上 9 点提醒)和团队成员的历史表现
  • • 主动推理和建议(注意到请假,建议跟进)

六、常见问题与优化

Q1: Bot 总是忘记之前说的内容?

可能的原因:

  • • 上下文轮数设置太小
  • • 会话超时,自动清除了历史
  • • 没有启用会话记忆

解决方案:

  • • 增加上下文轮数(如从 5 增加到 15)
  • • 延长会话超时时间
  • • 检查会话记忆是否启用

Q2: Bot 回答越来越慢?

可能的原因:

  • • 上下文太长,LLM 处理慢
  • • 累积了太多无用的对话

解决方案:

  • • 减小上下文轮数
  • • 使用"上下文压缩"功能(自动总结历史)
  • • 定期清理会话

Q3: 如何让 Bot 主动提及历史信息?

在提示词中明确引导:

## 主动使用历史信息

- 如果用户之前提到过相关信息,主动引用
- 例如:"您上次提到过..."、"根据您之前说的..."
- 这样能让对话更自然、更贴心

Q4: 长期记忆会泄露用户隐私吗?

需要注意隐私保护:

  • • 只记录必要的信息,不记录敏感数据(密码、身份证号)
  • • 提供"清除记忆"功能,让用户可以删除历史
  • • 遵守数据保护法规(如 GDPR)
  • • 在隐私政策中说明记忆机制

七、最佳实践

1. 合理设置上下文长度

不是越长越好,根据场景选择:

  • • 简单问答:5-10 轮
  • • 客服咨询:10-15 轮
  • • 深度对话:20-30 轮

2. 使用上下文压缩

当对话很长时,自动总结历史,保留关键信息,减少 token 消耗。

3. 区分短期和长期记忆

不是所有信息都需要长期记住:

  • • 短期:临时查询、一次性任务
  • • 长期:用户偏好、历史记录、个人信息

4. 提供清除记忆功能

让用户可以主动清除历史记忆,保护隐私,也能解决"Bot 记错了"的问题。

5. 测试边界情况

测试以下场景:

  • • 超长对话(50+ 轮)
  • • 频繁切换话题
  • • 用户说错了信息
  • • 会话超时后重新开始

总结

今天我们学习了 Coze 的多轮对话功能。多轮对话让 Bot 从"健忘"变成"记忆力好",能够理解上下文、记住用户信息,提供连贯、自然的对话体验。

关键要点:

  • • 多轮对话 = 上下文记忆 + 指代消解 + 话题延续
  • • 会话内记忆(短期)vs 跨会话记忆(长期)
  • • 上下文窗口大小需要权衡:太小不连贯,太大响应慢
  • • 在提示词中明确说明如何使用上下文
  • • 注意隐私保护,提供清除记忆功能

下一章预告

Day 7 我们将学习发布集成功能。如何将 Bot 发布到微信、飞书、网页等平台,以及 API 调用和集成方案。

遇到问题?

加入云途AGI社群,获取配套学习资源、群内答疑,与同学们一起交流进步

了解社群详情