主讲人应该是组里有写过 RAG 的 survey,之后拿过来介绍整个链条了
RAG 介绍
RAG 有效支持了知识密集型任务。通过 RAG,bot 可以缓解 LLM 输出时生成幻觉、存在过时知识等问题。
一点小思考:RAG 侧重于读取 up-to-date, non-fake 的知识,agent 则侧重于调用工具。
RAG 工作流程
将 docs 分成 chunk 并编码成向量,然后存储在 vector db 中。需要 generate 的时候,从 vector db 读取相似的 chunk 即读到的相关 docs
Vector-DB
几个关键点,长度固定;相似度检索(常用内积,也有别的);使用贴近语料源的模型做 embedding(因为语言不通)。
modern RAG
RAG 最早是 2020 由 Meta 发表的工作。近年来,在最简单的 RAG 流程基础上,提出了 advanced RAG 和更复杂的 Modular RAG.
Advance RAG 在原本的 Retrieve 步骤前后增加了 pre/post retrieve 过程。在 pre-retrieve 过程提前进行检索;在 post-retrieve 过程进行重拍、混合、提取摘要等工作。模块化 RAG 用模块化的行为,将不同工程的内容分开,以应对多模态任务和连续对话系统的需求。
RAG的优化
具体可以查看有关论文
RAG vs. 微调
长尾知识问题:指的是那些不太热门或不太常见的知识、信息或话题。出现频率低,领域小众、专业深度过大。
这个概念来源于克里斯·安德森(Chris Anderson)在他的著作《长尾:为什么小众市场会赢得未来》中提出的理论。
RAG 依赖于外部知识库的质量,实时度高、遵循 garbage in garbage out 原则。另外一个隐蔽的限制点是 RAG 依赖大模型的能力,7B 质量大概率比 1.8B 好。Fine-tune 可以针对专业任务进行优化,提高模型在专业领域的适配度
下图从模型适配度和外部知识两个维度来介绍一个完整项目中,prompt engineer、RAG、FT 的配合。Prompt Engineer 是最初级的操作手段,简单快速。然后 RAG 和 FT 各有侧重点。
评估框架和基准测试
整体上,RAG 从两个部分进行评估,检索质量和生成质量。
RAG 总结
实验部分
基于 LlamaIndex 框架搭建 RAG 应用。
LlamaIndex 框架
LlamaIndex 是一个开源的索引和搜索库,提供高效、可扩展的文本索引和检索功能。
框架提供了数据加载、计算 embedding 索引、向量化存储、查询、LLM 生成、评估的框架,用户可以方便地建立应用。