本地RAG系统的搭建及调优

1,083 阅读8分钟

RAG系统的定义

检索增强生成(RAG)是一种优化大型语言模型(LLM)输出的方法,使其能够在生成响应之前引用训练数据之外的权威知识库。

RAG 包含三个主要过程:检索、增强和生成。

  • 检索:根据用户的查询内容,从外部知识库获取相关信息。具体而言,将用户的查询通过嵌入模型转换为向量,以便与向量数据库中存储的相关知识进行比对。通过相似性搜索,找出与查询最匹配的前 K 个数据。
  • 增强:将用户的查询内容和检索到的相关知识一起嵌入到一个预设的提示词模板中。
  • 生成:将经过检索增强的提示词内容输入到大型语言模型中,以生成所需的输出。 image.png

RAG系统的搭建

如下图所示RAG的搭建与应用,大致可分为5个基本单元:

  • 知识文档的准备;
  • 嵌入模型(embedding model);
  • 向量数据库;
  • 查询检索;
  • 生成回答。 image.png

知识文档准备

在构建一个高效的RAG系统时,首要步骤是准备知识文档。现实场景中,我们面对的知识源可能包括多种格式,如Word文档、TXT文件、CSV数据表、Excel表格,甚至是PDF文件、图片和视频等。

因此,第一步需要使用专门的文档加载器(例如PDF提取器)或多模态模型(如OCR技术),将这些丰富的知识源转换为大语言模型可理解的纯文本数据。

此外,鉴于文档可能存在过长的问题,我们还需执行一项关键步骤:文档切片。我们需要将长篇文档分割成多个文本块,以便更高效地处理和检索信息。这不仅有助于减轻模型的负担,还能提高信息检索的准确性。

嵌入模型(embedding model)

文本是由自然语言组成的,这种格式不利于机器直接计算相似度。嵌入模型要做的,就是将自然语言转化为高维向量,然后通过向量来捕捉到单词或句子背后的语义信息。

嵌入模型通过复杂的网络结构,捕捉更深层次的语义关系,是连接用户查询和知识库的桥梁,确保了系统回答的准确性和相关性。

向量数据库

向量数据库作为一种专为存储和检索高维向量数据而优化的数据库,主要优势在于它能高效地处理和存储大量的向量化数据。它们通常采用了特殊的数据结构和索引策略,来有效组织和检索向量数据,这对于RAG系统的检索组件来说是核心功能。

向量数据库能够处理高维度数据的同时,提供近似最近邻(ANN)查询,这种查询可以快速找到与查询向量相似的数据项,使得RAG系统能够快速从海量数据中检索出与用户查询最相关的信息,显著提高信息处理的速度。

此外,向量数据库在提高数据处理的精确度方面也发挥着关键作用。它能确保检索结果的精确性和相关性,从而增强RAG系统生成模型的输出质量。

查询检索

经过上述几个步骤的准备后,我们就可以开始进行用户查询的处理了。

首先,用户的问题会被输入到嵌入模型中进行向量化处理。然后,系统会在向量数据库中搜索与该问题向量语义上相似的知识文本或历史对话记录并返回。

生成回答

这是RAG流程的最后一步,将用户提问和上一步中检索到的信息结合,构建出一个提示模版,输入到大语言模型中,静待模型输出答案即可。

本地RAG工程实践

借助一些开源工具链,我们能够快速实现本地的RAG系统搭建,接下来以实际操作的顺序介绍本地搭建过程。

(其中涉及下载的步骤可能需科学上网)

LLM模型以及嵌入模型的下载

下载Ollama:ollama.com/download

www.cnblogs.com/taoxiaoxin/… 按教程完成安装,完成后命令行中输入ollama如图

image.png

命令行中执行

# deepseek LLM模型
ollama pull deepseek-r1:32b
# 内嵌模型
ollama pull bge-m3:latest

等待模型下载,完成后执行ollama list,会展示已加载的模型

image.png

ollama默认服务在本地11434端口上,也可以在环境变量中配置OLLAMA_HOST=0.0.0.0:11434控制服务端口

RAG工具链的部署

Dify

Dify 是一个开源的 LLM 应用开发平台 ,它融合了后端即服务(Backend as Service)和 LLMOps 的理念,旨在帮助开发者,甚至是非技术人员,能够快速搭建和部署生成式 AI 应用程序。

image.png

访问Dify的开源项目地址:github.com/langgenius/…

本地执行git clone https://github.com/langgenius/dify.git,当前目录下会新增一个dify文件夹。

进入dify文件夹,文件目录如下所示

image.png

在 “docker” 文件夹中,找到 “.env.example” 文件,复制出新文件名为 “.env” 。这个文件是 Dify 的环境配置文件,通过修改其中的参数,可以配置 Dify 的运行环境。

image.png 配置.env 文件:使用文本编辑器打开 “docker” 文件夹中的 “.env” 文件,在文件末尾添加以下配置:

# 启用自定义模型
CUSTOM_MODEL_ENABLED=true
# 指定Ollama的API地址(根据部署环境调整IP)
OLLAMA_API_BASE_URL=your ip:11434

打开命令行,确保当前目录为 “docker” 文件夹,运行命令 docker compose up -d。Docker会自动下载10个镜像并启动对应容器。 image.png

打开浏览器,访问 Dify 的本地地址,通常是 “http://127.0.0.1:80”(如果在 “docker-compose.yml” 文件中修改了端口配置,需要使用修改后的端口) ,进入 Dify 的登录页面。

# 此步中如果在/install页面有500报错,尝试注释掉.env的如下几行配置,并重新运行docker compose up -d
# PGVECTOR_PGUSER=postgres
# PGVECTOR_POSTGRES_PASSWORD=difyai123456
# PGVECTOR_POSTGRES_DB=dify
# PGVECTOR_PGDATA=/var/lib/postgresql/data/pgdata

image.png 输入之前设置的管理员账号和密码,登录 Dify 平台。

image.png

在 Dify 的界面中找到 “设置” 选项,进入设置页面,选择 “模型供应商”。在模型供应商列表中,找到 “Ollama”,点击 “添加模型”。在弹出的添加模型对话框中,填写模型名称(例如 “deepseek-r1:8b”,与之前在 Ollama 中运行的模型名称一致)、基础 URL(http:// your ip:11434)、模型类型等信息,其他选项保持默认设置,然后点击 “保存” 按钮。

image.png

image.png

在平台的主界面中找到并点击 “知识库” 选项卡,进入知识库管理页面。在知识库管理页面中,点击 “创建知识库” 按钮

image.png 在创建知识库时,还需要设置一些关键参数。在 “索引技术” 选项中,选择合适的索引方式,常见的索引方式有语义搜索(semantic_search)等,不同的索引方式会影响知识库的检索效率和准确性。对于文本较长的文档,可以选择 “父子分段” 方式,并设置合适的子分段长度,例如 1000 个字符左右,这样可以将长文档分割成多个小段,提高检索的精度。同时,还可以选择是否启用重排序(reranking_enable)功能,如果启用,需要选择相应的重排序模型(reranking_model)。在 “嵌入模型” 选项中,选择之前在 Ollama 中下载的 Embedding 模型,如 bge-m3,以确保文本能够正确地转换为向量进行存储和检索。

image.png

我们可以通过创建应用来实现与本地知识库的交互和接口调用。以创建一个聊天助手应用为例,详细步骤如下:

在主界面中找到 “工作室” 选项,点击进入工作室页面。在工作室页面中,点击 “创建空白应用” 按钮。

image.png

配置使用的大模型,知识库,知识库召回模式

image.png

此时可以在页面上尝试聊天,或生成并获取API秘钥,以供应用层开发使用。

dify使用文档:

docs.dify.ai/zh-hans/gui…

RAGFlow

RAGFlow是一款基于深度文档理解构建的开源RAG(Retrieval-Augmented Generation)引擎。RAGFlow可以为各种规模的企业及提供一套专业的RAG工作流程,结合针对用户群体的大语言模型(LLM)不同的复杂格式数据提供可靠的问答以及有理有据的引用。

image.png

访问RAGFlow的开源项目地址:github.com/infiniflow/…

本地执行git clone https://github.com/infiniflow/ragflow.git,当前目录下会新增一个ragflow文件夹。

进入ragflow文件夹,在 “docker” 文件夹中,找到 “.env” 文件。这个文件是 RAGFlow 的环境配置文件,通过修改其中的参数,可以配置 RAGFlow 的运行环境。

修改RAGFLOW_IMAGE字段可以选择是否加载自带embedding模型的docker镜像。

image.png

打开命令行,确保当前目录为 “docker” 文件夹,运行命令 docker compose up -d。Docker会自动下载5个镜像并启动对应容器。

image.png

访问http://127.0.0.1:80, 注册并登录

image.png

设置模型提供商

image.png

设置系统默认使用的模型

image.png

创建知识库,上传文件并解析

image.png

进行知识库检索测试

image.png

配置知识库,进一步增强知识库问答能力

image.png

image.png

创建Agent,其中可以配置提示词,模型参数,知识库等

image.png

image.png

回答示例

image.png