如何使用 LlamaIndex 构建一个 RAG 检索系统
mindmap ((LLamaIndex)) ((知识库)) ((搜索引擎)) ((Agent)) ((Workflow)) ((大语言模型))LLamaIndex 是一个基于大语言模型的应用的开源框架,可以用于构建 RAG 检索系统和其他基于大语言模型的应用。
本文将从浅及深地介绍如何使用 LlamaIndex 实现一个简单的以向量检索和搜索引擎检索作为基础的 RAG 检索系统。
准备工作
安装 VSCode,准备 Python 环境
我们从 VSCode 官网下载并安装 VSCode。
在电脑上新建一个 llamaindex-rag 的文件夹,然后在 VSCode 中打开这个文件夹。
![]()
接下来我们安装 VSCode 的 Python 官方插件。
![]()
然后我们在 VSCode 使用下面的按键组合打开 VSCode 命令面板:
- Windows/Linux:
Ctrl + Shift + P - Mac:
Cmd + Shift + P
![]()
在命令面板中输入 > Python: Create Environment, 回车后选择 Venv 创建一个 Python 虚拟环境。
![]()
创建虚拟环境之后,我们可以在打开的目录下看到一个 venv 的文件夹,这个文件夹内包含了 Python 的虚拟环境。同时 VSCode 也会自动激活这个虚拟环境。
接入大语言模型
Ollama 本地运行 llama 3.1 模型
从 Ollama 下载并安装 Ollama。
![]()
用组合键:
- Windows/Linux:
Ctrl + ` - Mac:
Cmd + `
在 VSCode 中打开终端,输入下面的命令在 Ollama 中安装 llama 3.1 模型:
1 | ollama run llama3.1 |
使用 LlamaIndex 接入 Ollama
![]()
在 VSCode 中打开终端,输入下面的命令安装 llama_index.llms.ollama LLamaIndex 的 Ollama 模块:
1 | pip install llama_index.llms.ollama |
在 VSCode 中新建 rag.py 文件:
1 | from llama_index.llms.ollama import Ollama |
点击 VSCode 左上角的三角形的运行按钮,我们可以看到在终端中看到打印出来的模型的输出。
![]()
构建和接入知识库
准备知识库示例文件
![]()
在llamaindex-rag目录下新建一个 knowledge 目录,然后在 knowledge 目录,用于存放我们要检索的原始知识库的文件。
然后在 knowledge 目录下新建一个 example.txt 文件,用于存放我们的知识库示例。
用下面的内容填充 example.txt 文件:
1 | Eson 是一个博客作者. 他的博客链接是 https://blog.eonwong.com. |
你也可以在 knowledge 目录下面放置其它.txt、.docx、.pdf等格式的文件。
使用 LlamaIndex 构建知识库
安装 llama_index.core 和 llama_index.embeddings.huggingface 模块。
在命令面板中执行下面的命令:
1 | pip install llama-index llama_index.core llama_index.embeddings.huggingface |
llama_index.core模块提供了 LLamaIndex 的核心功能llama_index.embeddings.huggingface模块提供了 HuggingFace 的 embeddings 模型的接入功能。
在 VSCode 中新建 knowledge.py 文件,首先导入 llama_index.core 和 llama_index.embeddings.huggingface 模块:
1 | from llama_index.core import ( SimpleDirectoryReader, Settings, VectorStoreIndex) |
设置 HuggingFace 的 embeddings 模型,我们选择在 HuggingFace 网站上热门的 baai/bge-m3 作为 LLamaIndex 向量化数据的 embedding 模型,在 knowledge.py 文件中添加下面的代码:
1 | # 配置嵌入模型 |
接下来我们使用 SimpleDirectoryReader 读取 knowledge 目录下的文件:
1 | # 读取文件 |
然后我们使用 VectorStoreIndex 向量化我们的知识库:
1 | # embedding 向量化 |
向量化之后我们要把向量化的知识库保存到磁盘上,以便后续的检索:
1 | # 保存向量化的知识库 |
运行 knowledge.py 文件,我们可以看到在终端中看,该脚本会先下载 baai/bge-m3 模型。
![]()
下载完成之后就会开始向量化知识库,然后保存向量化的数据保存到 storage 目录。
![]()
检索知识库
在 rag.py 文件顶部导入 StorageContext 和 load_index_from_storage 模块:
1 | from llama_index.core import (StorageContext, load_index_from_storage) |
在 rag.py 文件内容替换为下面的代码:
1 | # 导入模块 |
