你想在自己机器上用 Ollama 跑一套本地 RAG,翻了一圈发现开源项目名字一大堆,每个 README 都写得能打,就是不知道装哪个、装完能不能跑起来。这篇不给排名也不给结论式推荐,只给一套判断标准:先看清你手里有什么硬件、想要多省心的界面,再去对应一类的项目里挑,最后附上装完不通时的排查顺序。
你想在自己机器上用 Ollama 跑一套本地 RAG,翻了一圈发现开源项目名字一大堆,每个 README 都写得能打,就是不知道装哪个、装完能不能跑起来。真正卡人的不是列表短,而是这些项目压根不在一个层面:有的是一整套带界面的知识库应用,有的只是给你调用的框架库,还有的只负责向量存储。把它们混在一张表里比,越比越乱。
这篇不给排名也不给结论式推荐,只给一套判断标准:先看清你手里有什么硬件、想要多省心的界面,再去对应的那一类项目里挑。判断完了再谈装哪个,最后附上装完不通时的排查顺序。核心是让你少走「装完发现根本跑不动」这种弯路。
先按使用场景分堆,再谈装哪个
最有效的第一步不是看项目名,而是先回答两个问题:谁来写代码、要不要图形界面。答案落在哪一档,就直接缩小到那一类项目里挑,别跨类比较。不写代码的人硬上框架库,光搭一个能用的界面就得花掉一整天;反过来,要嵌进自己系统的团队去用完整应用,改起来反而处处受限。
| 类型 | 典型形态 | 适合谁 | 主要代价 |
|---|---|---|---|
| 应用类 | 自带上传、问答界面 | 不写代码、想快速用 | 定制空间小,改流程得动源码 |
| 框架库 | 给你一堆函数和抽象 | 要嵌进已有系统 | 得自己写界面和调度 |
| 组件类 | 只做向量存储或检索 | 被上面两者调用 | 单独装没意义,必须有上层 |
| 工具链 | 解析、切分、评测小工具 | 配合上面任意一类 | 只解决一个环节,不解决全流程 |
- 先写下你的两个答案:「有没有人要写代码」「有没有人要图形界面」,写在纸上比在脑内想靠谱。
- 答案都是「没有」,往应用类里找;只要有一个「有」,就去看框架库。
- 组件类不要单独当项目选,它是被上面两类调用的,选上层的时候顺带看它默认接哪个就行。
- 如果你只是想知道协议怎么对齐、客户端怎么填地址,那是配置层的事,这篇不碰,去站内相关页面看。
上手前的硬条件:先算清楚你跑得动什么
本地 RAG 和单纯跑一个聊天模型不一样,同一个时刻往往要装两样东西:一个负责生成的模型,一个负责把文本转成向量的模型。这两块都吃显存和内存,机器只能跑其中一个是不够的。装之前先按你的卡把两个模型的占用都算一遍,别只算了大的那个。
- 双模型占用
- 生成模型加向量模型的总和,才是你需要预留的资源下限
- OCR 开销
- 扫描件、图片类文档要走版面识别,这部分经常被完全忽略
- 离线完整性
- 有些项目默认会去拉线上服务,装前先在配置里找有没有本地开关
- 端口冲突
- 本地服务默认监听哪些端口、要不要容器,先想好再装
- 按你的显卡型号把生成模型和向量模型的占用分别查一遍,再加起来,到 /models/deploy 核对当时的数字。
- 给磁盘留出索引和文档解析的空间,扫描件多的话这块会比你想的大。
- 装之前先在配置里全局搜一遍有没有指向线上服务的地址,有就换成本地选项。
- 把要占用的端口列个清单,对照机器上已经在跑的服务,避免装完发现抢端口。
拼装顺序:文档进料 → 切分 → 向量化 → 检索 → 生成
这条链路按顺序逐段验证,每一段单独能通再接下一段。最常见的错误是从头到尾一次性装好,然后发现答得不对,却不知道是哪一段坏了。分段验证的意义在于:出错时你能立刻定位到环节,而不是对着一个模糊的「效果不好」发愁。
- 验证解析拿一份 PDF 和一份纯文本分别解析,看能不能拿到干净的正文;页眉页脚、表格错乱在打印日志里就能看出来。
- 验证切分抽一段文字看切出来的块是否完整,断句是否断在句子中间;粒度太碎会让检索召回到一堆残句。
- 验证向量化直接调向量模型接口,看能不能返回固定长度的向量,再拿同一句话发两次看结果是否一致。
- 验证检索用一句你确定在原文里的原句去搜,看它能不能被召回;搜不到就说明前面某一段有问题,别急着调参。
- 验证生成把召回结果和问题一起喂给模型,先不接界面,用命令行看它有没有引用到原句。
切分和向量化这两段最容易被跳过验证,但它们出错时的表现是「答得不准」,很容易被误判成模型不行。混合检索的项目配置项更多,调试时先把关键词那一路关掉,只留向量召回,确认单路能通再打开另一路。
跑不通时的排查顺序
排查讲究顺序,不要跳步。绝大多数「检索不到」的抱怨,真正的原因在前面两步,而不是参数没调好。按下面这个次序走,能省掉大量瞎试的时间。
- 第一步查模型是否真的加载成功,日志里会有加载失败或资源不足的记录,很多问题到这里就结束了。
- 第二步查向量模型和生成模型的地址有没有填反,两个服务的地址和端口被搞混是最高频的一类错误。
- 第三步查文档是否真的进了索引,用一条你确定在原文里的原句去搜,搜不到就是进料环节的问题。
- 第四步才轮到检索参数和提示词,前三条都排除后再调切分粒度和召回条数,别一上来就改参数。
- 如果日志看不懂,先把日志级别调到最详细再复现一次,比反复猜快得多。
什么情况下这套顺序不适用:如果你要的是多轮追问、工具调用这类流程编排,单条链路验证通过不代表整体能跑,那属于另一个工程问题,得单独设计调度和状态管理。
装完别急着用,先做这三项验收
能跑通只是第一步,能不能用得住是另一回事。本地部署的资源水位和线上完全不同,同样的配置在你机器上可能就是另一个表现。验收的核心不是看它答得漂不漂亮,而是看它在你的文档上会不会编。
| 验收项 | 怎么做 | 不合格的表现 |
|---|---|---|
| 引用准确性 | 抽十条能对照原文的问题 | 答案里没有原文原句,或引用页码对不上 |
| 格式适应性 | 换一份表格或扫描件再跑 | 纯文本正常,换格式后解析全乱 |
| 压力表现 | 一次丢几十份文档进去 | 索引构建中断,或内存涨上去不落 |
| 并发表现 | 同时发多个问题 | 单个正常,多个一起就超时或串答案 |
编造的答案比答不上来更危险,因为你没法一眼看出来。验收时优先盯「有没有引用到文档里的原句」这一条,其余都可以放后面。具体指标和基线怎么定,去 /tools/quality-check 对一遍口径,别只凭主观感受下结论。
下一步选型之前先把自己机器的资源底数摸清,再按场景分堆去挑,能省掉反复重装的时间。各家的模型占用和部署参考到 /models/deploy 按你的卡核对当时的数字,本地服务的连通性和速度可以顺手在 /tools/speed-test 里测一轮,确认你的机器和网络状况再开工。→常见问题
不写代码能用 Ollama 跑本地 RAG 吗?
可以,但要接受能力边界。应用类项目通常自带界面,装完直接拖文档就能用,适合个人和小团队的知识问答;代价是流程固定,切分和检索参数不太好改。如果你的资料格式很杂、对答准率要求高,迟早要碰框架库那一层,先别指望一个界面全包。
本地 RAG 是不是就等于数据绝对不外流?
不一定。要逐项确认:生成模型、向量模型、重排模型三条链路都指向本地地址,文档解析有没有偷偷调云端接口,项目本身会不会上报统计。任何一环走了外网,数据就不算完全本地。装完拿断网跑一遍是最直接的验证办法,通不了就说明还有外呼。
RAG 答得不准,是换项目还是换模型?
先别急着换。按排查顺序走一遍:模型是否加载成功、两个服务地址有没有填反、原句能不能检索到。这三步能排掉大部分问题。真正需要换的通常是切分粒度和向量模型,而不是整个项目;模型能力的事可以参考 /models 和 /embeddings 两页对照。