Helloagent chapter8 ragmemory
1. 基于LLM的智能体而言,通常面临两个根本性局限:对话状态的遗忘和内置知识的局限。
局限一:无状态导致的对话遗忘:
上下文丢失:窗口限制
个性化缺失:无法记住用户喜好
一致性问题:前后矛盾
学习能力:无法学会改进自己
局限二:模型内置知识的局限性
知识时效性:大模型的训练数据有时间截止点
专业领域知识:通用模型在特定领域的深度知识可能不足(微调加强,通用模型/专用模
型选择专用模型更佳)
事实准确性:通过检索验证,减少模型的幻觉问题(模型幻觉是指:模型生成了看起来
合理、表达流畅,但实际上没有事实依据、与资料矛盾,甚至完全虚构的内容)大语言
模型的基本任务是预测下一个 token,而不是查询事实数据库。通过检索验证,可以找
到事实依据再进行回答,这就是RAG的基本逻辑。
ps:
但rag的错误会体现在资料错误、rerank错误、chunk截断、过度推断、证据是否充
足(没有就返回没有,别强憋一个答案出来)
所以建议rag用混合检索(BM25+向量检索)+rerank
2. 记忆系统设计
a. infra+存储抽象层+记忆type层+顶端调用(由下往上)
b. 不同的记忆类型对应不同的存储抽象层
WorkingMemory工作记忆:短期记忆,对应内存
EpisodicMemory情景记忆:包含了丰富的上下文信息,并支持按时间序列或主题进行回
顾式检索
SemanticMemory语义记忆:更为抽象的知识、概念和规则。例如,通过对话了解到的
用户偏好、需要长期遵守的指令或领域知识点
PerceptualMemory感知记忆:多模态信息
c.人的记忆过程
编码 存储 检索 整合 遗忘
编码:
embeding
存储:
结构?
检索:
整合:
短期记忆上升为长期记忆
遗忘:
基于重要性、时效
3. RAG架构设计
多模态转化 -> 分快 -> 统一嵌入(向量化) -> 检索(MQE、HyDE)
分块(Chunk):
专门针对markdown的分块策略:标准Markdown文本 → 标题层次解析 → 段落语义分割 → Token计算分块 → 重叠策略优化(其中重叠策略优化,切分相邻chunk时,保留一部分重复内容,重叠太少会导致上下文语义的断裂,重叠太多会导致空间的存储失效,这是一个tradeoff)
向量化:
检索:
MQE(Multi-Query Expansion):同一个问题可以有多种不同的表述方式,而不同的表述可能匹配到不同的相关文档。例如,"如何学习Python"可以扩展为"Python入门教程"、"Python学习方法"、"Python编程指南"等多个查询。通过并行执行这些扩展查询并合并结果,系统能够覆盖更广泛的相关文档,避免因用词差异而遗漏重要信息。
HyDE(Hypothetical Document Embeddings,HyDE):传统的检索方法是用问题去匹配文档,HyDE通过让LLM先生成一个假设性的答案段落,然后用这个答案段落去检索真实文档,从而缩小了查询和文档之间的语义鸿沟。
