ragflow本地部署ollama

模型与算力

把 RAGFlow 接到本地 Ollama 上的落地流程:先确认两边能通、再配模型名与 embedding、最后按检索效果逐项排查。

很多人在内网搭知识库时卡在同一处:RAGFlow 装好了,Ollama 也跑起来了,但两边接不上,或者接上了检索答非所问。这篇按「先通链路、再选模型、最后调检索」的顺序走一遍,每一步都给能对照的动作,不给结论式承诺。

内网搭知识库,常见卡点不是装不上,而是装完之后两边接不上:RAGFlow 起来了,Ollama 也在跑,可配置里怎么填都不对;或者勉强接上,问出来的答案答非所问。这篇按「先通链路、再选模型、最后调检索」的顺序走一遍,每步都给能对照的动作。

先说清一个前提:本文不承诺什么配置能跑到多快、多准。不同显卡、不同文档类型差别很大,凡是涉及具体数字的地方,都建议你到站内对应页面用当时的数值自己核对一遍,而不是照抄别人的参数。

动手前先把三件事确认掉

很多「对接失败」其实是环境问题,先花五分钟排掉,能省掉后面一大半的无效折腾。顺序上先确认 Ollama 本身可用,再确认网络可达,最后看硬件余量。

  • 确认 Ollama 监听在 RAGFlow 能访问到的地址,而不是只绑本机回环;RAGFlow 若跑在容器里,localhost 通常指不到宿主机
  • 确认模型已经拉下来并能在命令行正常对话,避免把「模型没下完」误判成对接失败
  • 确认磁盘与显存余量:对话模型和 embedding 模型会同时常驻,显卡不够时会静默降级到 CPU,表现为首字特别慢
  • 确认两份配置的来源是同一台机器,多机部署时最容易把 A 机的地址填进 B 机的配置里

把 RAGFlow 指向 Ollama:改哪几处、怎么验证

配置的核心只有一句:填的是服务地址,不是模型文件路径。这两者混淆是最常见的报错来源,看到「找不到模型」先怀疑这里。另外对话模型与 embedding 模型通常要分开配,缺其中一项时知识库能建但检索会空。

  1. 填服务地址在模型供应商配置里选本地接入方式,地址写成 Ollama 实际监听的 host 加端口。填完先保存,不要立刻建库。
  2. 分别配两类模型对话模型负责生成答案,embedding 模型负责把文档和问题转成向量,两个都要选。只配对话模型时,上传文档这一步可能不报错,但检索阶段永远是空的。
  3. 建空知识库测 embedding这一步只验证向量化通道通不通,不涉及问答质量,报错信息也比后面干净。
  4. 上传一份短文档测问答用一两页的短文档跑通全流程,别一上来就丢整本手册。文档越大,出问题时越难判断是切分、检索还是模型的锅。

对话模型和嵌入模型分别怎么挑

两者思路不一样。对话模型看它能不能吃下你切分后的片段长度,以及中文问答是否稳定;embedding 模型决定检索能不能找到正确片段,对最终效果的影响往往更大,值得多花时间。

选择维度对话模型嵌入模型
主要作用根据召回的片段生成答案把文档与问题转成向量做匹配
看什么上下文长度、中文表达是否稳定中文语义匹配能力、是否适合检索场景
出问题时的表现答案啰嗦、跑题、胡编召回了不相关的片段,答案没有依据
怎么定规模按自己显卡显存定,可到 /models/deploy 用测算页先估通常比对话模型轻,但同样要留常驻显存

参数规模和量化档位要按自己的卡来定,可到 /models/deploy 用测算页先估一遍,再到 /embeddings 对照候选嵌入模型。同一个模型的不同量化档位会明显影响表现,取舍思路可参考 /ai-dict/category/tech 与 /tools 里的换算工具。所有具体数字都以你打开页面时看到的为准。

不适用的情况:如果你的文档以图表、扫描件为主,光换对话模型救不了,得先解决解析环节,把文本正确提取出来再谈模型选择。

接上之后检索不准,按这个顺序排查

链路通了但答非所问,别立刻换模型。按下面的顺序从前往后查,每一步只动一个变量,改完记录一次效果。

  • 先看切分:片段太长会稀释语义,太短会丢上下文,中文建议按段落边界切而不是按固定字数硬切
  • 再看召回数量与相似度阈值:召回太少答不全,阈值太低会把不相关片段塞进上下文,反而干扰作答
  • 最后才怀疑模型:同一份文档换不同对话模型对比,若结论差异大,说明问题在提示与检索而不在模型
  • 每一轮改动前后各留一份问答记录做对照,否则容易凭感觉反复改

长期跑起来要注意的几件事

能跑通不等于能长期稳定跑。下面几条是内网部署里反复踩到的,建议上线前就定好规矩。

  • 服务地址别写死在单机回环上,换机器或换网段时这是最容易忘记改的一处
  • 模型更新后要重跑一遍验证问答,模型名相同不代表输出行为一致
  • 内网部署同样要管好访问权限与数据流向,相关口径可到 /safety 核对
  • 显存被占满导致模型被挤掉时,先量基线再调并发,思路可参考 /tools 里的说明

成本与资源占用这类会随时间变的数据,不要记住某个数字,到 /price-watch 看当时的记录更靠谱;想横向比不同接入方式的稳定性,可以去 /sites 翻一翻。

下一步本地模型只是接入方式之一,要不要换别的方式、值不值得换,取决于你的数据敏感度和硬件余量。先到 /rankings 看看别人常用的方案,再到 /tools/speed-test 量一下自己机器的基线,比凭感觉选要稳。

常见问题

RAGFlow 里配了 Ollama 地址却连不上,一般先查什么?

九成是地址写错。RAGFlow 若跑在容器内,localhost 指向容器自己而不是宿主机,要写宿主机在内网里的实际地址或容器网络里的服务名;其次确认 Ollama 监听的地址允许外部访问。先在容器里用命令行直接请求一次那个地址,能通再回界面改配置。

对话模型和嵌入模型能都用同一个吗?

技术上可以,但效果通常更差。嵌入模型负责把文本变向量做检索,对话模型负责组织答案,两者训练目标不同。中文知识库建议嵌入模型单独挑检索向的,对话模型按显存和中文问答表现挑。候选可到 /embeddings 和 /models 对照,再按自己卡的情况筛。

本地跑起来后回答很慢,是模型选大了吗?

先分清是首字慢还是整体慢。首字慢通常是模型没全部放进显存,退到了 CPU 或内存,看一下显存占用就能判断;如果显存吃满,换更小的量化档位或更小的模型。整体慢还包括切分片段过多、召回数量太大导致上下文变长,这两项在检索设置里能直接调。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。