什么是RAG(检索增强生成)?
RAG是一种AI框架,结合传统的数据检索技术和LLM(大语言模型)的优势,通过将外部数据和LLM生成语言技能集合,对LLM的输出进行优化,使输出更准确、更及时,并且与您的具体需求相关。
简单来说,人在遇到认知外的问题时会去翻书和上网查找答案。同样地,当LLM遇到问题时,可能会回答虚假信息,RAG就相当于为LLM提供了一个智能检索系统,使其能够像人类一样"查阅资料"来解决问题。
RAG工作流程
在传统模式下,LLM 仅基于预训练知识和用户输入直接生成响应。RAG 系统则引入了一个关键的信息检索组件,其工作流程如下:
1.创建知识数据文档
LLM训练使用的训练集以外的数据,可以来自不同的数据源,数据库/HTML/API或doc、pdf和md文件,得到原始的数据后,就可以进行处理,可以使用嵌入语言模型的 AI 技术将数据转换为数字表示形式并将其存储在向量数据库中,会创建一个LLM可以理解的知识库。
使用Spring AI的ETL(Extract Transform Load )提取转换加载可实现对原始数据处理。
原始数据 --> List<Document>(文档列表)--> 向量转换、存储
ETL 管道 :: Spring AI 参考 --- ETL Pipeline :: Spring AI Reference
2.文档检索相关信息
实现第一步的知识库后,数据以向量格式存储([1,2,5,1,...])与向量数据库。
用户提问也要转换成向量格式,然后与向量数据库进行匹配。此时再提问“张三是谁?”,就会转换成向量,基于一定的搜索匹配策略与向量数据库匹配,得到结果后再进行过滤,就能得到与用户的提问“张三是谁?”匹配的文档。
用户提问 --> 向量转换 --> 匹配向量数据库
嵌入模型 API :: Spring AI Reference --- Embeddings Model API :: Spring AI Reference
3.增强 LLM 提示
得到问题的相关文档后,接下来,RAG 模型通过在上下文中添加检索到的相关数据来增强用户输入。使用提示工程技术与 LLM 进行有效沟通。增强提示允许大型语言模型为用户查询生成准确的答案。
用户提问 --> 结合文档 --> 新的用户提问上下文 --> LLM
检索增强生成 :: Spring AI 参考 --- Retrieval Augmented Generation :: Spring AI Reference