虽然LLM(大语言模型)非常强大,但它们对于它们未经训练的信息一无所知。如果想使用LLM来回答它未经训练的文档相关问题,我们需要向其提供这些文档的信息。最常用的方法是通过"检索增强生成"( Retrieval Augmented Generation,RAG)。
检索增强生成的思想是,在给定一个问题时,首先进行检索步骤以获取任何相关文档。然后将这些文档与原始问题一起传递给语言模型,并让它生成一个回答。然而,为了做到这一点,首先需要将文档以适合进行此类查询的格式呈现。
本专栏介绍了这两个步骤的核心思想:
(1)将文档摄入到向量数据库Milvus中进行存储
为了使用语言模型与数据进行交互,首先需要将文档转换为合适的嵌入格式。通过将文档转换为嵌入向量,并存储到向量数据库中,可以让后续的检索操作更加快捷方便。
将文档摄入到向量数据库中可以参考如下几个步骤来完成:
- 加载文档(使用文档加载器)
- 分割文档(使用文本分割器)
- 为文档创建嵌入(使用文本嵌入模型)
- 将文档和嵌入存储到向量数据库中(Milvus向量数据库),并构建索引
(2) 进行检索增强生成链
现在我们有了一个向量数据库和索引,如何使用它进行生成呢?可以将此过程分为以下步骤:
- 接收用户提问(Question)
- 在向量数据库和索引中查找与问题相关的文档
- 使用问题和相关文档构建一个提示词 Prompt
- 将Prompt 传递给语言模型
- 获取结果并返回给用户
专栏大纲
在过去的一个月中,我有幸参与了数场研讨会,其中一个不言而喻的共识是,检索增强生成(Retrieval Augmented Generation,简称RAG)技术在过去一年里已迅速成为人工智能界的宠儿,并被众多AI团队广泛应用。
所谓RAG,是指一种借助检索外部信息来增强大型语言模型(LLM)的能力,从而提升模型应答品质的技术。
RAG之所以风头正劲,是因为它将语言模型与外部知识库巧妙结合,从而能够生成更为精准、更具事实依据的内容。RAG模型通过无缝融合检索与生成过程,能够实时从庞大的数据库中提取相关信息并融入所生成的文本之中,有效避免了模型输出中可能出现的虚假或错误信息。目前,许多AI团队正把RAG视为研究重点,众多工具如向量数据库、LLM接口及其编排工具等也应运而生,旨在简化RAG的实施流程。
尽管RAG的巨大潜力不言自明,但关于如何最佳运用这一技术的实践仍在不断演进之中。要部署一个高效的RAG系统,需要对各个构成要素进行大量实验和优化,包括数据集、模型嵌入、分块策略等方面。
在本专栏中,我们将利用LangChain框架和Milvus向量数据库,逐步搭建一个RAG智能问答系统。内容将涵盖RAG的基础知识、技术选型、准备HTML文档数据、应用嵌入模型和sentence-transformers库、构建和索引Milvus向量数据库、文档的加载与分割、向量数据及元数据的存储、近似最邻近(ANN)向量搜索、上下文和元数据的整合、提示语的拼接,以及基于LLM的大型语言模型生成回复。
这一系列内容旨在为读者提供一条从入门到精通的RAG技术之路。