基于 Ollama 与 AnythingLLM 搭建本地 RAG 知识库
最近一直想基于 RAG(检索增强生成,Retrieval-Augmented Generation)和大语言模型(Large Language Model, LLM)技术搭建一套属于自己的个人知识库。以为会涉及到诸多复杂的流程,包括模型调用、界面开发等。经过实践发现,利用开源工具组合可以非常简单地实现,主要用到三个核心软件:Ollama、Docker 和 AnythingLLM。
1. 技术背景介绍
1.1 RAG(检索增强生成)
检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。大型语言模型(LLM)用海量数据进行训练,使用数十亿个参数为回答问题、翻译语言和完成句子等任务生成原始输出。在 LLM 本就强大的功能基础上,RAG 将其扩展为能访问特定领域或组织的内部知识库,所有这些都无需重新训练模型。这是一种经济高效地改进 LLM 输出的方法,让它在各种情境下都能保持相关性、准确性和实用性。
与 RAG 并生的另一种技术叫监督式微调(SFT),是将 LLM 模型注入新的知识库并将模型本身进行训练以获得所需要的结果,需要有一定的硬件设备。两种技术并不矛盾,其实互相结合才是最好的解决方案。本文重点介绍 RAG 的落地方案。
1.2 Ollama
Ollama 是一个开源的大型语言模型服务工具,它允许用户在自己的硬件环境中轻松部署和使用大规模预训练模型。Ollama 的主要功能是在 Docker 容器内部署和管理大型语言模型(LLM),使得用户能够快速地在本地运行这些模型。它简化了模型下载、管理和推理的过程,支持多种主流模型架构。
官网地址:https://ollama.com/
1.3 Docker
Docker 是一个软件平台,让您可以快速构建、测试和部署应用程序。Docker 将软件打包成名为容器的标准化单元,这些单元具有运行软件所需的所有功能,包括库、系统工具、代码和运行时。使用 Docker,可以将应用程序快速部署和扩展到任何环境中,保证环境的一致性。
1.4 AnythingLLM
AnythingLLM 是由 Mintplex Labs Inc. 开发的一个全栈应用程序,是一款高效、可定制、开源的企业级文档聊天机器人解决方案。它能够将任何文档、资源或内容片段转化为大语言模型在聊天中可以利用的相关上下文。AnythingLLM 支持几乎所有的主流大模型和多种文档类型,可定制化,而且安装和设置简单,非常适合本地化知识库搭建。
2. 实现流程
2.1 安装 Ollama
- 下载与安装:访问 Ollama 官网下载对应操作系统的安装包,直接一路 Next 即可。
- 选择模型:在 Ollama 官网 Models 页面,点击 Filter by name 搜索模型。这里推荐使用
qwen2系列,例如qwen2:7b,大小约为 4.4G,适合大多数消费级显卡。 - 运行服务:双击图标运行 Ollama 后台服务。之后打开终端(Windows 电脑:win+cmd;mac 电脑:Terminal),粘贴命令拉取模型:
回车后会自动下载模型(可能网络会有些问题,建议配置镜像源)。下载完成后,直接在终端对话提问即可验证模型是否可用。ollama run qwen2:7b
2.2 安装 Docker
- 下载:访问 Docker 官网下载 Desktop 版本。
- 安装:直接安装即可,非常简单。
- 启动:双击运行 Docker Desktop,确保服务正在运行。
2.3 部署 AnythingLLM
为了更稳定的运行,建议使用 Docker Compose 方式部署 AnythingLLM,或者通过 Docker CLI 手动启动。
方式一:Docker CLI 快速启动
- 拉取镜像:在 Docker 桌面界面搜索
AnythingLLM,点击 Pull 自动开始下载。 - 启动容器:下载好后,点击 Images 列表中的 AnythingLLM,点击 Run 启动镜像。
- 端口配置:配置端口号,输入一个未被占用的 4 位数(如 8080),不要与现有容器冲突。
- 浏览器访问:启动服务后,跳转到浏览器访问配置的端口。
方式二:Docker Compose 配置(推荐)
创建 docker-compose.yml 文件,内容如下:
version: '3'
services:
anythingllm:
image: mintplexlabs/anythingllm:latest
container_name: anythingllm
ports:
- "3001:3001"
environment:
- PERSIST_DATA=true
volumes:
- ./data:/app/server/storage
restart: unless-stopped
执行 docker-compose up -d 启动服务。
2.4 配置连接与知识库
- 选择模型:进入 AnythingLLM 管理页面,选择 Ollama 作为模型提供商,选择刚刚下载好的
qwen2:7b模型,max token 根据显存情况自行调整。 - 工作区设置:按默认选项继续,其他保持默认即可。其中 Embedding Preference 是 Embedding 偏好的模型,默认选择
AnythingLLM Embedder;Vector Database 向量库默认选择LanceDB。 - 初始化:下一步输入邮件地址和用途,输入工作区名称,进入主页面。
- 上传文档:点击左侧的'个人知识库',点击上传按钮,上传 PDF、TXT 等文档到右侧工作区。
- 向量化处理:将文档向量化(本地执行),稍等一下即成功。此过程会将文档内容转换为向量存入数据库。
- 开始对话:回到主页面,选择'个人知识库',开始对话。可以看到,基于本地知识库的结果准确率较高。
- 高级设置:可在设置里面调整工作区名称、头像、文档相似性阈值等信息,以优化检索效果。
3. 常见问题与优化
3.1 模型下载慢
如果 Ollama 模型下载速度较慢,可以在环境变量中配置代理,或者使用国内镜像源加速。例如在 Windows 上可以通过修改 hosts 或使用科学上网工具解决网络问题。
3.2 显存不足
如果运行大模型时显存不足,可以尝试选择参数量更小的模型(如 qwen2:0.5b 或 phi2),或者减少并发请求数。AnythingLLM 支持动态加载模型,关闭不用的工作区可以释放显存。
3.3 检索效果不佳
如果问答结果不准确,可以调整文档切片策略。在 AnythingLLM 设置中,可以修改 Chunk Size(切片大小)和 Chunk Overlap(重叠部分)。较小的切片通常能提高检索精度,但会增加计算量。
4. 结论
基于 RAG 的个人本地知识库搭建其实很简单,通过 Ollama 提供本地推理能力,AnythingLLM 提供文档管理与交互界面,配合 Docker 实现环境隔离,即可构建一个完全私有化的 AI 助手。后续可以尝试把专业相关的知识注入进去,方便自己的个人知识库检索,实现知识的沉淀与复用。


