上一篇文章介绍了LLM,LLM的知识仅限于其所训练的数据。想让LLM了解特定领域的知识或专有数据需要进行特定的处理,目前有三种方式:
1、RAG
2、使用私有数据对LLM进行微调(Fine-Tuning)
3、将以上二者结合
今天这篇文章先介绍RAG
RAG:是一种将数据发送给LLM之前从数据中找出相关信息并将其注入Prompt的方法。这样LLM将获得相关信息,并能够使用这些信息进行回复(降低幻觉的可能性)
可以使用的信息检索方式有很多,最流行的方式无非就是以下三种:
1、全文(关键词)搜索。此方法使用TF-IDF和BM25等技术,通过将查询中的关键字(例如:输入内容)与文档数据库进行匹配来搜索文档。它根据文档中这些关键词的频率和相关性对结果进行排名
2、向量搜索。又称语义搜索。实用嵌入模型将文本文档转换为数字向量。然后根据查询向量和文档向量之间的余弦相似度或 其他相似度/距离度量 来查找和排序文档,从而捕获更深层的语义含义
3、混合。结合多种搜索方式(例如:全文搜索+向量搜索),可以提高搜索的有效性
了解了以上知识后,接下来详细介绍下RAG的实用流程
RAG的流程分为两个阶段:索引和检索
在索引阶段,对文档进行预处理,以便在检索阶段进行有效搜索。
索引过程可能因使用的信息检索方法而异。
对于向量搜索,通常涉及清理文档、用其他数据和元数据丰富文档、将其拆分成为较小的片段(分块)、嵌入这些片段、存储在嵌入存储(向量数据库)。
索引阶段通常离线进行,并不需要最终用户等待其完成。如果用户希望上传其自定义文档,以便LLM能够访问他们,在这种情况下索引应在线执行并成为主要应用程序的一部分。
检索阶段通常在线发生,当用户提交需要使用索引文档来回答的问题时。
此过程因使用的信息检索方法而异。对于向量搜索,通常涉及嵌入用户的查询并在嵌入存储(向量数据库)执行相似性搜索,然后将相关片段(原始文档的片段)注入Prompt并发送到LLM