Ollama 应用实践:检索增强生成 (Retrieval-Augmented Generation)

LLM 的知识仅限于其所训练的数据。如果您想让 LLM 了解特定领域的知识或专有数据,您可以:

  • 使用 RAG,我们将在本节中介绍
  • 利用你的数据对 LLM 进行微调
  • 结合 RAG 和微调

什么是 RAG ?

简单来说,RAG 是一种在将数据发送给 LLM 之前从数据中找出相关信息并将其注入提示的方法。这样,LLM 将获得(希望)相关信息,并能够使用这些信息进行回复,这应该可以降低出现幻觉的可能性。

可以使用各种信息检索方法找到相关信息 。最流行的方法是:

全文(关键词)搜索。此方法使用 TF-IDF 和 BM25 等技术,通过将查询中的关键词(例如,用户正在询问的内容)与文档数据库进行匹配来搜索文档。它根据这些关键词在每个文档中出现的频率和相关性对结果进行排名。
向量搜索,又称“语义搜索”。使用嵌入模型将文本文档转换为数字向量。然后,它根据查询向量和文档向量之间的余弦相似度或其他相似度/距离度量来查找和排序文档,从而捕获更深层的语义含义。
混合。结合多种搜索方法(例如全文+向量)通常可以提高搜索的有效性。
目前,此页面主要关注向量搜索。全文和混合搜索目前仅由 Azure AI Search 集成支持,AzureAiSearchContentRetriever有关更多详细信息,请参阅。我们计划在不久的将来扩展 RAG 工具箱以包含全文和混合搜索。

RAG

RAG 流程分为两个不同的阶段:索引检索。LangChain4j 为这两个阶段提供了工具。

在索引阶段,对文档进行预处理,以便在检索阶段进行有效搜索。

此过程可能因所使用的信息检索方法而异。对于向量搜索,这通常涉及清理文档、用其他数据和元数据丰富文档、将其拆分为较小的片段(也称为分块)、嵌入这些片段,最后将其存储在嵌入存储(也称为向量数据库)中。

索引阶段通常离线进行,这意味着它不需要最终用户等待其完成。例如,这可以通过 cron 作业来实现,该作业每周周末重新索引一次公司内部文档。负责索引的代码也可以是仅处理索引任务的单独应用程序。

但是,在某些情况下,最终用户可能希望上传他们的自定义文档,以便 LLM 可以访问它们。在这种情况下,索引应在线执行并成为主要应用程序的一部分。

以下是索引阶段的简化图:

检索阶段通常发生在线,当用户提交需要使用索引文档来回答的问题时。

此过程可能因所使用的信息检索方法而异。对于向量搜索,这通常涉及嵌入用户的查询(问题)并在嵌入存储中执行相似性搜索。然后将相关片段(原始文档的片段)注入提示并发送到 LLM。

以下是检索阶段的简化图:

作者:Jeebiz  创建时间:2024-08-18 12:06
最后编辑:Jeebiz  更新时间:2024-08-29 20:41