本章主要介绍基于 LangChain4j 中的 RAG(Retrieval-Augmented Generation,检索增强生成)
概念及其实现方式。RAG 是一种通过检索相关知识来增强语言模型生成能力的技术,特别适用于需要结合特定领域知识或私有数据的场景
RAG(检索增强生成)| LangChain4j
1. RAG 是什么?
语言模型(LLM)的知识仅限于其训练数据。如果希望让 LLM 了解特定领域的知识或私有数据,可以采用以下方法:
- 使用 RAG(检索增强生成),本文将详细介绍。
- 使用你的数据对 LLM 进行微调(fine-tuning)。
- 结合使用 RAG 和微调。
RAG 的核心思想:在将提示(prompt)发送给语言模型之前,从你的数据中找到并注入相关信息片段。这样,LLM 将获得(希望是)相关的知识,并能够利用这些知识生成回答,从而降低“幻觉”(生成无关内容)的可能性。
2. RAG 的工作原理
RAG 的工作原理可以分为两个阶段:索引(Indexing)和检索(Retrieval)。
2.1 索引阶段(Indexing)
索引阶段的目标是预处理文档,以便在检索阶段能够高效地搜索相关信息。具体步骤可能因检索方法而异。对于向量搜索(vector search),通常包括以下步骤:
- 清洗文档。
- 为文档添加额外数据和元数据。
- 将文档分割成较小的片段(称为“分块”或 chunking)。
- 将这些片段嵌入为向量。
- 最后,将向量存储在嵌入存储(embedding store,也称为向量数据库)中。
索引阶段通常是离线进行的,用户