❏ 整理 AI 记忆板块 (二)
“大模型的对话分层”,核心是把对话按“话题”或“意图”分组管理,实现类似“多轮对话上下文管理+话题切换”的效果
﹆ 核型思路
1. 对话主题识别(话题聚类)
INFO
- 每条新输入都跟已有的对话主题进行相似度对比,判断它属于哪个主题
2. 基于主题的上下文存储
INFO
- 每个主题维护独立的历史上下文记忆
3. 新主题创建
作用:扩展AI的存储容量,动态读写信息
- 如果当前输入与任何已有主题的相似度低于阈值,启动一个新的主题记忆。
4. 调用大模型时传入对应主题的上下文
INFO
- 使回答聚焦当前话题。
﹆ 实现步骤
语义向量化
使用 embedding 模型(OpenAI、SentenceTransformers等)将用户输入和历史主题描述转换成向量
主题匹配
- 计算当前输入向量与各主题向量的相似度(余弦相似度)。
- 如果最高相似度 > 设定阈值(如0.7),判定属于该主题。
- 否则新建一个主题。
维护主题上下文
- 主题对应一段对话记忆,比如用 LangChain ConversationBufferMemory 或自定义数据库表。
- 新输入追加到对应主题记忆中。
调用 LLM
- 调用大模型时只传对应主题的对话上下文,避免跨主题干扰。
﹆ 建议
工程建议
话题语义表征- 用embedding计算相似度比关键词匹配更鲁棒。
阈值调优- 相似度阈值可根据需求调节,避免过细分或过粗合并。
持久化存储- 将每个话题历史存数据库,避免重启丢失。
动态更新主题向量- 每当主题上下文更新时,重新计算主题embedding,反映最新语义。
可视化管理- 展示话题列表,支持用户切换话题。
跨越话题建议
多主题并行处理(推荐)- 识别多个相关主题,把输入分发给对应话题的上下文和模型进行处理,分别生成回答。
- 最后将多个回答合并、过滤或排序后返回
主次排序,选主话题处理- 根据相似度得分排序话题,选分数最高(或权重最高)的话题作为“主话题”
- 只用主话题上下文喂给模型,忽略其他相关话题
提问拆分- 先用模型或规则对用户提问做拆分,变成几个子问题,各自对应一个话题
- 分别按子问题调用对应主题上下文模型,最后合并回答
合并主题上下文,统一处理- 将所有相关话题的上下文合并(可以按时间排序),再一起传给大模型
- 让模型理解多话题上下文,综合回答
INFO
先用向量相似度计算多个话题的相关度,取所有高于阈值的话题(比如 >0.6)。 若命中数量较少且上下文量不大,可以选择“合并主题上下文”一起传递。 若命中数量较多,则拆分提问或按主次排序。 可用一个“多意图融合层”让模型整合各话题回答,或者直接返回多个答案供前端多轮展示。
