跳到主要内容基于 Ollama 与 AnythingLLM 的本地 RAG 知识库搭建指南 | 极客日志编程语言AI算法
基于 Ollama 与 AnythingLLM 的本地 RAG 知识库搭建指南
检索增强生成(RAG)技术通过融合信息检索系统与语言模型能力,解决了传统大模型知识滞后和幻觉问题。本文详细介绍了基于 Ollama、Qwen2.5 及 AnythingLLM 搭建本地知识库的全流程。内容包括 RAG 原理分析、Ollama 环境安装与模型拉取、AnythingLLM 服务配置、向量数据库与嵌入模型设置、文档上传及检索模式选择。此外,文章还提供了显存优化、检索精度调整及安全部署等实用建议,帮助用户实现私有化、安全可控的本地 AI 知识助手。
RAG,即检索增强生成(Retrieval-Augmented Generation),是一种先进的自然语言处理技术架构。它旨在克服传统大型语言模型(LLMs)在处理开放域问题时的信息容量限制和时效性不足。RAG 的核心机制融合了信息检索系统的精确性和语言模型的强大生成能力,为基于自然语言的任务提供了更为灵活和精准的解决方案。
RAG 与 LLM 的关系
RAG 不是对 LLM 的替代,而是对其能力的扩展与升级。传统 LLM 受限于训练数据的边界,对于未见信息或快速变化的知识难以有效处理。RAG 通过动态接入外部资源,使 LLM 得以即时访问和利用广泛且不断更新的知识库,进而提升模型在问答、对话、文本生成等任务中的表现。
RAG 就像是为大型语言模型配备了一个即时查询的'超级知识库'。这个'外挂'不仅扩大了模型的知识覆盖范围,还提高了其回答特定领域问题的准确性和时效性。
想象一下,传统的 LLM 像是一个博学多才但记忆力有限的学者,它依赖于训练时吸收的信息来回答问题。而 RAG,则是这位学者随时可以连线的庞大图书馆和实时资讯网络。当面临复杂或最新的查询时,RAG 能让模型即时搜索并引用这些外部资源,从而提供更加精准、全面和最新的答案。这种设计尤其适用于需要高度专业化或快速更新信息的场景,比如医学咨询、法律意见、新闻摘要等。
基于此,RAG 技术特别适合用来做个人或企业的本地知识库应用,利用现有知识库资料结合 LLM 的能力,针对特定领域知识的问题能够提供自然语言对话交互,且答案比单纯用 LLM 准确性要高得多。
实践方案
本文将采用 Ollama + Qwen2.5 + AnythingLLM 来实现本地知识库搭建。
1. 安装 Ollama
Ollama 本身不是 LLM,而是一个服务于 LLM 的工具。它提供了一个平台和环境,使得开发者和研究人员能够在本地机器上轻松地运行、测试和部署各种大型语言模型。
下载安装
当然你也可以使用 Docker 安装镜像,官方镜像更多细节请参考 GitHub 的 Readme。
当你运行 ollama --version 命令成功查询到版本时,表示 Ollama 的安装已经顺利完成。
拉取模型
接下来便可以用 pull 命令从仓库下载模型,例如:
还有更简单的方法直接使用 run 命令,它会在运行之前自动检查模型是否下载,如果没有会自动下载:
选择中文大模型
由于我们要搭建的是本地知识库,通常以中文为主,因此需要对中文支持最好的模型。Ollama 官方提供的模型中,对中文支持较好的有:
- Llama2-Chinese:基于 Llama2 微调。搜'Chinese'关键词就能找到。
- Qwen 1.5/2.5:阿里的通义千问。一共有多个尺寸,默认是 4b 或 7b。所有尺寸的模型都支持长上下文长度。多语言支持。
阿里开源的通义 Qwen2 模型可以说是现阶段该规模最强的开源模型之一。Qwen2 在代表推理能力的代码和数学以及长文本表现尤其突出。
模型概览包括 Qwen2-0.5B、Qwen2-1.5B、Qwen2-7B、Qwen2-72B 等。其中 Qwen2-72B-Instruct 最高支持 128K tokens 上下文。
安装并运行 Qwen2 模型,注意根据硬件配置选择合适的参数版本。例如选用 7B 参数的模型:
模型下载的默认路径通常是:~/.ollama/models。
安装完成后就可以进行对话了。命令行交互的方式不算太友好,后续我们将通过 UI 界面进行管理。
2. 部署 AnythingLLM
Open Web UI 虽然可以通过 Docker 轻松部署,但由于我们是要搭建一个个人本地知识库,需要对知识库有更多的掌控,AnythingLLM 更适合此类场景。
下载安装
前往 AnythingLLM 官网完成桌面端或服务器端的下载安装。
完成安装后大概长这个样子,主界面包含 Workspace 管理、设置等模块。
连接 Ollama 服务
我们需要先启动 Ollama 的服务模式。Ollama 其实有两种模式:
- 聊天模式:直接通过命令行交互。
- 服务器模式:后端运行大模型,开放端口供其他软件调用。
配置 AnythingLLM
在 AnythingLLM 界面中选择 Ollama 作为模型提供者。
然后在 Base URL 中填写:http://localhost:11434。
模型选择之前下载的 Qwen2.5 7b。
Token context window 可以先用默认的 4096,也可以根据显存情况调整。
创建知识库 (Workspace)
- Embedding Model(嵌入模型):负责把高维度的数据转化为低维度的嵌入空间。这个数据处理过程在 RAG 中非常重要,决定了检索的精度。
- Vector Store(向量数据库):专门用来高效处理大规模向量数据,存储文档切片后的向量索引。
上图中就是默认的嵌入模型以及向量数据库,我们先使用默认的即可。
接着往下走,下一步是填写个人信息,这步可省略。
再下一步是给你的 workspace 起名,建议按项目命名,例如 MyLocalKB。
3. 上传与管理知识
接着你就可以在建好的 workspace 中上传你的个人知识库的内容了。
你可以上传文件(支持多种格式 pdf, word, txt, markdown 等),甚至是一个外部的网站链接。
需要注意的是,目前版本可能不支持直接上传包含多级目录的文件夹,如果你的文件夹是包含多级目录的,那么无法识别,你需要把所有文件平铺放在同一级目录中再全选上传。
你可以根据项目来创建 Workspace,一个项目建一个。然后,把关于这个项目的所有文档、所有网页都导入 Workspace。
聊天模式设置
- 对话模式 (Conversation):大模型会根据你给的文档,以及它本来就有的知识储备,综合起来回答。
- 查询模式 (Query):大模型只是简单地针对文档进行回答,严格限制在文档范围内。
例如上传一个《劳动合同法》的 pdf 文件,用查询模式进行对话,虽然偶尔会有幻觉,但核心内容是从上传的文件里找到的,还可以点击查看源文件定位。
将笔记本中的很多计算机相关的 markdown 文件作为'知识'上传后,进行问答,效果会非常显著。
4. 常见问题与优化
显存不足怎么办?
- 选择参数量更小的模型,如 Qwen2-1.5B 或 0.5B。
- 减少上下文长度(Context Window)。
- 使用量化版本模型(GGUF 格式通常经过量化,占用更少内存)。
检索不准如何调整?
- 分块策略:在 AnythingLLM 设置中调整 Document Chunk Size(文档分块大小)。过大会丢失细节,过小会导致语义断裂。
- Embedding 模型:更换更强的 Embedding 模型,如 BGE-M3 等,能显著提升中文检索效果。
- 清理数据:确保上传的文档质量高,去除无关噪音。
安全性考虑
由于是本地部署,数据完全存储在本地,不会上传至云端,非常适合处理敏感的企业或个人数据。请确保 ollama serve 仅监听 localhost,避免暴露在内网或公网中。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online