1. 文档加载(Document Loading) 目的:将外部知识源(如文档、网页、数据库等)导入系统。 操作:使用文档加载工具(如 LangChain 的DirectoryLoader、PyPDFLoader等)读取不同格式的文件(TXT、PDF、DOCX 等),转化为统一的文档对象(包含文本内容、元数据等)。
  2. 文本分割(Text Splitting) 目的:将长文档拆分为更小的文本块(Chunks),避免因文本过长导致向量表示失真,同时提升检索精度。 操作:使用文本分割工具(如CharacterTextSplitter、RecursiveCharacterTextSplitter),根据预设的chunk_size(块大小)和chunk_overlap(块重叠度)分割文本,保留语义完整性。
  3. 向量存储(Vector Storage) 目的:将文本块转化为机器可理解的向量,并存储在向量数据库中,便于后续快速检索。 操作: 用嵌入模型(如all-MiniLM-L6-v2、text2vec-base-chinese)将文本块编码为向量; 将向量及对应文本块存入向量数据库(如 FAISS、Milvus 等)。
  4. 检索相关上下文(Retrieval) 目的:根据用户查询,从向量库中找到最相关的文本块,作为回答的依据。 操作: 将用户查询转化为向量; 在向量库中通过相似度算法(如余弦相似度)检索 top-k 个最相关的文本块; 对检索结果去重、过滤低相关度内容,得到最终上下文。
  5. 生成回答(Generation) 目的:结合检索到的上下文和用户查询,调用大语言模型生成准确回答。 操作: 构建提示词(Prompt),将上下文和用户问题传入; 调用大语言模型(如 API 接口或本地模型),约束模型仅基于提供的上下文生成回答,减少幻觉。 总结 RAG 的核心逻辑是 “检索增强生成”:通过检索外部知识为模型提供精准依据,再由模型基于这些依据生成回答,既发挥了大语言模型的生成能力,又通过外部知识解决了模型 “知识过时”“幻觉生成” 等问题。 ————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/2401_87632893/article/details/150446073