想把自己的资料做成能问答的知识库,又不想把文件传到别人服务器上,这条路是通的,但卡点不在「装不装得上」,而在选型、进料和验证:模型挑哪个、文档怎么清、答不准时先改哪一步。这篇按部署顺序给一套断网可跑的流程,每步都有验收动作。
想把自己的资料做成能问答的知识库,最省事的方式通常是丢给在线服务,但很多人过不去「文件传到别人服务器」这道坎。本地这条路是通的:Ollama 负责跑模型,AnythingLLM 负责做界面和文档管理,两样都装在自己机器上,全程不联网也能用。真正卡人的不是「装不装得上」,而是模型挑哪个、文档怎么清、答不准时先改哪一步。
这篇按部署顺序给一套断网可跑的流程,每一步都配一个验收动作,没通过就不要往下走。你先得想清楚一件事:这套东西走的是检索,不是训练,下面第一节就把这个分岔口讲明白。
先分清:RAG 和微调不是一回事,别一上来就想训模型
检索路线的本质是:把资料切片存进向量库,提问时先搜出相关段落,再把这些段落连同问题一起喂给模型。模型本身一个参数都没改,你改的是它每次能看到的上下文。所以资料更新,你只要重新索引,不用动模型。这一点决定了两条路的适用场景完全不同。
- RAG
- 资料切片入库,提问时先检索再生成,模型不变,改的是上下文;资料天天变就走这条
- 微调
- 拿数据再训练模型本身,改的是模型的表达习惯和输出格式;代价是要数据、要算力、改完要重训
- 判断口诀
- 要能指出出处、资料会变、不想重训,选检索;要改模型说话方式或固定输出格式,才考虑微调
- 你的资料每周都在增删,检索是唯一现实的选择,微调跟不上这个节奏
- 你需要答案能点回原文那一段,检索天然带出处,微调给不出来
- 你只是想让它按某种固定格式输出,且资料基本不变,那才轮到微调登场
- 本地机器跑不动大模型时,RAG 照样成立,只是生成那一步换成小模型,检索质量决定整体上限
动手前先量机器:显存、内存、磁盘三笔账
装之前先花十分钟摸清自己的硬件,不然装完才发现跑起来等半天,白折腾。三笔账要分开算:显存决定你能跑多大的模型和什么量化档位,内存决定切分和索引时会不会把系统卡死,磁盘决定你能装多少资料。只有 CPU 也能跑,但等待时间要按分钟算,能不能接受得你自己判断。
| 硬件项 | 它决定什么 | 动手前要确认的事 |
|---|---|---|
| 显存 | 能跑多大模型、什么量化档位、生成速度 | 有没有独立显卡,显存多少,跑起来会不会溢出到内存 |
| 内存 | 建索引、切分文档、并发提问时会不会卡 | 同时打开程序和资料时系统是否还流畅 |
| 磁盘 | 能装多少原文、切片的向量索引、模型权重 | 按文档原始体积的两到三倍留余量,别卡着上限装 |
把「能跑」和「好用」分开看:能出字不算跑通,能稳定在你可接受的等待时间里出答案才算。不确定自己的机器能带多大模型,到 /models/deploy 按显存和量化档位对一遍;那里的数字是动态维护的,以你查看当时的为准。
断网安装:模型文件、程序、依赖三样都要提前落地
断网部署的关键是「先在联网机器上把东西备齐,再整体搬过去」。顺序错了会很痛苦,比如先装程序再发现模型拉不下来,或者模型下好了但依赖缺一个包,最后排查半天。下面这套顺序照着走,每步都有验收点。
- 联网机器上拉模型权重在能上网的机器上把 Ollama 的模型文件完整拉下来,确认文件目录里有实际权重而不是空占位;拉完先在这台机器上跑一次对话,能出字才算拉全。
- 准备程序和依赖包把 AnythingLLM 的安装包和它依赖的运行环境一起准备好,别等到目标机器上才发现少东西。如果是容器方式部署,镜像也要提前拉好并导出。
- 搬到目标机器并安装把模型目录和安装包整体拷过去,路径建议显式指定,比如模型放哪个盘、数据目录放哪里,默认路径在搬家时最容易丢东西。
- 断网验证拔网线或关掉网卡,彻底断开外网,再跑一次对话,确认没有任何请求偷偷外发,也没有因为联网失败而卡住的步骤。
模型权重落地后先单独起一次对话验证,能出字再进下一步。这样做的好处是:出问题时你能确定是模型的事还是程序的事,不用把两个变量的故障混在一起排查。
进料这一步最容易白干:文档清洗和切分
很多人装完程序,兴冲冲把一堆 PDF 拖进去,结果问什么都不知道。问题通常不在模型,而在进料:文档本身是扫描件、切分位置切碎了语义、同一份文件有多个版本。这一步花的时间应该比装程序多。
- 扫描件和图片型 PDF 先做文字识别,识别不出来等于空文档,喂进去只会占索引位置
- 按语义单元切,不要按固定字数硬切:合同按条款、手册按小节、论文按段落
- 切完自己抽十段读一遍,看看有没有把一句话切成两半、有没有丢掉标题和上下文
- 去重和去旧版先做,同一份文件留三个版本,检索出来互相打架,答案会来回变
- 给每份文档标上来源和日期,后面排查答案来源时靠它定位
清洗和分块的细化清单见 /ai-nav/category/ai-note,挑工具和对照维度时可以按它列的条目逐条过一遍。切分策略不是一次定死的,先按一版跑起来,用真实问题测出问题再回来调。
建索引:切分粒度、嵌入模型和重排怎么配
这一步决定了「搜得准不准」。嵌入模型负责把文字转成向量,它决定检索的召回质量;切分粒度决定搜出来的块信息是否完整;重排决定搜到的内容里哪几条能排到最前面喂给模型。三者配合不好,模型再强也答不对。
| 配置项 | 作用 | 怎么判断合不合适 |
|---|---|---|
| 嵌入模型 | 把文字转向量,决定搜得准不准 | 确认支持中文;多语言场景选多语言模型,纯中文可选更小的 |
| 切分粒度 | 决定命中区块的信息完整度 | 先用几百字量级的块加少量重叠起步,再用真实问题测 |
| 重排 | 把最相关的几条排到前面 | 检索捞回多条后加一层重排,能减少「搜到了但没排前面」 |
| 索引重建 | 改完策略后刷新全部向量 | 改完切分就重建一次,别指望增量修补能救回错的分块 |
切得太碎会丢上下文,检索出来的片段没头没尾;切得太大检索命中后噪声多,模型会被无关内容带偏。没有一个放之四海皆准的数值,起步建议用中等块加少量重叠,然后拿十个真实问题去测,看命中段落读起来是否完整。具体档位和模型清单到 /embeddings 对照,以你查看当时的数字为准。
索引重建比想象中便宜,改完切分策略就重建一次,不要试图靠打补丁修错的分块。
验收:用二十个真问题测,而不是问「你好」
「你好」能回不代表知识库能用。真正有效的验收是准备一组覆盖你日常用途的问题,然后记录每条答得对不对。更关键的是:答错了要能分清是哪个环节的问题,否则你只会不停地换模型,换到最后还是不对。
- 准备问题集覆盖三类问题:能直接答的、资料里没有的、需要跨两份文件才能答的,每类若干条,总数控制在二十条上下。
- 逐条测试并记录对每条问题记下:有没有搜到相关段落、答案是否正确、依据出自哪份文档。搜到什么比答了什么更重要。
- 按三类分因没搜到归到检索问题;搜到了但答偏归到提示词或模型问题;资料里压根没有归到语料问题。三类处理方式完全不同。
- 回原文找依据对每条错误都回到原文确认一遍,找不到依据说明进料阶段就有缺口,换生成模型解决不了这个问题。
多数情况下,答不准的根因在检索或语料,而不是生成模型。先修上游再换模型,顺序反了会浪费大量时间。
长期跑起来:更新、备份和没人问时的检查
搭起来只是开始,能不能长期用下去取决于维护动作是否固定。断网环境有个好处:模型和程序都不会自己更新,版本锁死反而让结果可复现。坏处是资料旧了不会有人提醒你,得自己定规矩。
- 资料更新要有固定动作:新增放哪个目录、旧版怎么标记作废、多久重建一次索引,写成流程贴出来
- 定期备份索引目录和配置,重装一次远比重新建索引省事,备份要真的还原验证过一次
- 判断变差是资料旧了还是检索退了:固定问题集重跑一遍,结果对比比凭感觉靠谱
- 记下当前用的模型和程序版本,方便以后复现,也方便排查「以前能用现在不行」这类问题
- 没人问的时候定期抽查几个问题,别等到真要用的时候才发现索引坏了
更新频率高的场景,维护成本主要在索引重建上,可以考虑固定周期全量重建而不是增量追加;更新频率低、资料稳定的场景,建一次管很久,重点放在备份上。
下一步把硬件账和模型档位对上号,再去部署页确认参数,能省掉装完才发现跑不动的那一步。→常见问题
断网之后真的完全不发请求吗,怎么验证?
最直接的验证是把网卡关掉或拔线,再重启程序跑一轮问答。如果还能正常回答,说明模型和索引都在本地。要更细一点,就在隔离环境里看有没有出站连接记录。注意有些界面组件会尝试联网加载字体或图标,这类失败不影响问答,别把它误判成没配好。
同样的资料,为什么我搭出来的答案比别人的差?
多数差异出在进料和检索,不在模型。先查三件事:文档是不是扫描件没识别出文字、切分是不是把一整段拦腰截断、检索捞回的条数是不是太少。把这三样调完再换模型,通常会有明显变化。如果换成更大的模型才有改善,说明前面几步还有欠账。
文档很多,一次性全喂进去还是分批处理?
分批。全量导入一次之后你很难判断是哪份文件拖慢了建索引,出错也难定位。按主题或来源分几批,每批导完拿几个问题验收一下,确认这批没拖后腿再继续。索引建立是本地动作,分批不会额外花钱,只是多花一点时间。
本地小模型答得磕磕巴巴,是不是必须换大模型?
先看错在哪一类。资料里有答案但答得散,多是切分和检索的问题;资料里根本没写,那是语料缺口。这两类换大模型都没用。只有在检索返回的段落本身质量不错、模型却组织不好语言时,才值得考虑换更大的模型或降一档量化。
这个知识库能几个人一起用吗?
技术上可以,把服务挂在内网地址上就行,但要先想清楚两件事:谁有权限看到哪些资料,以及共用一台机器时显存和等待时间怎么分配。小团队先做单人版跑通,确认问答质量达标,再考虑往里加人和加权限。权限和合规的边界可以先看安全与合规那一栏。