前言
最近刷B站对于rag的看法有了变化,先在将B站老师的讲解做下记录,主要记录rag的主要工作流程及rag实现大模型的难点分析
rag大致的工作流程
文档切割存储流程
- 大量的文档文本
- 文档切割 分割 chunks(段落)
- chunks embding转向量
- 存储向量数据库(向量数据库加速检索)
用户提问及检索过程
- 用户发起提问,提问问题request
- request embding向量化
- 向量问题从向量数据库检索
- 检索完成返回检索结果context
大模型回答阶段
- context和提问问题结合,生成提示词 Prompt
- 提示词交给大模型回复
- 大模型回复
- 大模型response,展示给用户
rag的难点
虽然基于经典的rag流程,我们可以很快地开发大模型应用,但是实际上其中的注意点及难点不少,细节不好达不到上线的要求,
文档切割存储流程 难点
- 文档切割,文档很多如(ppt,pdf,网页,word,csv)等等,文档格式不同,所以文档在读取及处理阶段,本生就是很难得一个问题
- 合理拆分chunks 如何将文档拆分成合理chunks,如按标题,段落,分隔符等等,需要酌情分析
- chunks 如何 合理的embding,众多的embding技术选择,以及如何的选择合适的向量数据库
用户提问及检索过程
- 用户提问的问题,是否需要进一步处理,(如对问题扩充和清理等等)
- 拿到问题如何合理的检索,检索的效率和准确性是非常重要的,搜索结果不准确,大模型就回答不了正确问题
- 拿到的context很多,可能有很多无关内容或者很多的问题,增加ranking阶段,先检索在排序
大模型回答阶段
- 何合理的编排prompt,好的 prompt大模型可以更好更准确的生成
- 选择大模型,如开源大模型微调 通用大模型
- 拿到的response,需要进行筛选和检查,避免一些违规,有些回复不满足要求则重新需要检索返回
总结
以上就是rag的基本流程和难点分析