本地跑 Ollama 不难,但一到 GraphRAG 就容易卡在几处:索引阶段要多次调模型、并发一高就超时,向量与抽取用哪几个模型分不清,建完索引进界面又不知道填哪个地址。这篇按落地顺序给出可执行的步骤和排查清单,不重复讲协议兼容和 RAG 原理,只解决装完之后跑不跑得动、界面怎么连上的问题。
本地把 Ollama 跑起来只是第一步,真正卡人的地方在 GraphRAG:索引阶段要反复调模型,对话模型和嵌入模型经常被混成一个,并发稍微一高就整条链路超时。好不容易索引建完,进界面又发现地址不知道填哪、模型名对不上、读的根本不是同一份索引。
这篇不讲协议兼容和 RAG 原理,只按落地顺序解决「装完跑不跑得动」和「界面怎么连上」。下面的步骤都能直接照做,判断标准也写清楚了,什么情况下这套本地方案不适用,最后一节会说。
先把模型和环境准备到位
准备阶段最容易犯的错是把三类角色压成一个模型用。抽取和摘要需要一个指令跟随稳的对话模型,向量化必须另配一个专门的嵌入模型,两者职责不同,混用会让检索质量崩掉。抽取类任务的上下文开大一些,但具体开多大要看你本机显存,去 /models/deploy 做一次测算再定,别看别人的配置照抄。
- 对话模型
- 负责实体抽取、关系抽取和社区摘要,要求指令跟随稳定、能稳定输出结构化结果
- 嵌入模型
- 专门做向量化,负责把文本转成可检索的向量,别用对话模型兼职
- 中间产物目录
- 索引每一步的落盘结果,重跑时能只补失败那一步,不用从头再来
- 确认 Ollama 服务允许外部进程访问,界面和索引脚本一般跑在别的容器或进程里;
- 把监听地址和端口定下来,用 curl 打一次接口确认通,通了再往下走;
- 先把数据目录、配置文件、输出目录三者分开,方便删了重来不误删原始数据;
- 先在几份小文档上跑通全流程,再换全量数据,别一上来就压全库。
建索引:分阶段跑,别一把梭
GraphRAG 的索引是个多阶段链路:先抽实体、再抽关系、然后做社区摘要。整个过程里模型要被调用很多次,一把梭跑完的结果是哪个环节出错你完全不知道。正确做法是拆开跑,中间产物全部落盘,哪步报错就单独重跑那步。
- 拆阶段执行把实体抽取、关系抽取、社区摘要分开跑,每步结束确认输出文件已经生成,再进下一步。
- 压低并发本地模型的并发能力有限,索引期把并发数调到个位数,同时配上请求超时和失败重试。
- 量单请求延迟用 /tools/speed-test 测一次单请求耗时,再根据它能接受的等待时间倒推并发上限。
- 留日志记录每次请求的耗时、用的哪个模型、失败原因,调参全靠它;日志里别写进隐私原文。
判断标准很简单:如果某一步长时间不动,先看是不是并发太高或超时太短,而不是怀疑模型能力。日志里如果反复出现同一条超时,就把并发再降一档重试那一步。
选界面并把本地服务接进去
搜 graphrag-ollama-ui 能找到的界面大致分两类,选之前先想清楚你要的是「看结构」还是「问问题」。聊天式客户端问答体验好,但不展示实体关系图谱;图谱可视化工具能看关系结构,但问答交互一般。目标不同,选型就不同。
| 界面类型 | 适合的场景 | 不太适合的情况 |
|---|---|---|
| 聊天式客户端 | 想直接对文档提问、验证检索效果 | 想直观检查实体和关系是否正确抽取 |
| 图谱可视化工具 | 想检查 GraphRAG 到底抽出了哪些实体和关系 | 想快速得到一段自然语言回答 |
| 两者配合用 | 调索引阶段看图谱,验证阶段用聊天 | 只想要一个工具搞定的极简场景 |
配置界面时重点看三处:模型服务地址怎么写、模型名怎么填、嵌入模型是否单独配置。地址填错是最常见的连不上原因,逐项对照客户端的配置说明核对,别默认它和索引脚本用同一份配置。接好后先用一个答案明确写在文档里的小问题验证链路,通过了再问开放性问题。
跑不动时的排查顺序
报错的时候不要东查一下西查一下,按固定顺序走一遍,能省很多时间。下面这个顺序从底层往上层,任何一步断了就往回修,不要跳步。
- 服务能不能连通:回到 curl 那一步,确认接口有响应;
- 模型名存不存在:核对界面和脚本里填的名字,和本地拉下来的标签是否一致;
- 单次请求能不能通:用最简单的一次调用确认模型真的能出结果;
- 索引中间产物有没有生成:去输出目录看实体、关系、社区摘要这些文件在不在;
- 界面读的是不是同一份索引目录:路径填错会表现为能连上但回答空泛。
几个典型现象对照:卡在建索引进度不动,多半是并发太高或超时太短;界面能连上但回答空泛,多半是嵌入模型没配对,或者索引压根没建完;报模型不存在,是模型名和本地拉下来的标签不一致。
另外提醒一句,选模型、看延迟这些涉及具体数字的部分,别照抄别人的配置。本机显存、磁盘、你要处理的文档量都不一样,去 /tools/speed-test 和 /models/deploy 看当时的实测结果再决定,比任何教程里的固定数字都靠谱。
下一步本地服务和中转站的延迟、可用性差异值得先摸清楚,再决定哪些任务留在本地跑、哪些交给远端。→常见问题
Ollama 已经跑起来了,GraphRAG 建索引还是特别慢,正常吗?
偏慢是常态,因为建索引要把每段文本反复喂给模型做抽取和摘要,请求数是文档量的很多倍。可优化的是把并发调到本机能承受的档位、把抽取和摘要换成更小的模型、以及先在小数据集上跑通再全量。如果单篇文档就要很久,优先怀疑是模型太大或并发配置不对。
界面连不上本地服务,先查什么?
先确认服务监听的是所有网卡而不只是本机回环,容器里的界面访问宿主机地址要用宿主机可达的地址,不能写 localhost。然后用命令行单独请求一次模型接口,排除是网络问题还是配置问题。最后核对界面里填的模型名,要和本地实际拉下来的名字完全一致。
抽取模型和嵌入模型可以都用同一个吗?
不建议。嵌入模型负责把文本转成向量,讲究的是语义相似度稳定,和负责生成与抽取的对话模型是两种东西。用对话模型兼职做向量,检索效果会明显变差。正确做法是嵌入单独选一个,具体挑哪类可以到 /embeddings 看当时可用的选项再定。