dify graphrag ollama

接入与开发

讲清在 Dify 里接 Ollama 与 GraphRAG 的落地做法:服务怎么暴露、索引怎么建、超时并发怎么设、跑不通按什么顺序查。

本地已经把 Ollama 跑起来了,Dify 里也能看到模型,但一连知识库就报错、一上图谱就超时,索引还要跑很久——这类问题多半不是模型不行,而是服务暴露方式、索引任务编排和超时口径没对齐。这篇按落地顺序讲:先决定 Ollama 怎么给 Dify 看见,再决定 GraphRAG 的索引在哪一步做,最后是超时、并发、日志与召回效果自检。

本地把 Ollama 跑起来、Dify 里也能看到模型,不代表链路就通了。最常见的情况是:模型列表能刷出来,一连知识库就报错,一上图谱就超时,重建索引还要跑很久。这类问题多半不是模型不行,而是服务暴露方式、索引任务编排和超时口径没对齐。

下面按落地顺序讲四件事:先决定 Ollama 怎么给 Dify 看见,再决定 GraphRAG 的索引在哪一步做,然后是超时、并发与降级怎么设,最后是日志、自检和召回效果怎么验收。每一步都给判断标准和可执行动作,照着做能少走一圈弯路。

第一步:让 Dify 真的能看见 Ollama

先分清部署形态:Dify 和 Ollama 是同机、跨机,还是一边跑在容器里。容器里的 localhost 指的是容器自己,不是宿主机,这是连不上最常见的原因。先把 Ollama 的监听地址放开到局域网或容器网络能访问的范围,然后在 Dify 所在的那个环境里去发一次最简请求验证连通,而不是在本地终端验证。

  • 同机裸装:直接指本机端口,但仍要确认监听地址不是只绑回环
  • Dify 在容器、Ollama 在宿主机:把宿主机在容器网络里的地址填进去,别填 localhost
  • 两个都在容器:用同一条容器网络里的服务名互访,别用 IP 硬编码
  • 跨机:确认防火墙和监听地址两边都放行,再谈参数

模型要分两类分别登记:对话模型走生成链路,嵌入模型走索引链路。两者地址写法一样,但用途不同,嵌入模型选错或者地址填错,会直接导致知识库建不起来。建议在 Dify 界面之外先把这两类都验一遍,验证通过再进界面配,省得把网络问题误判成参数问题。

第二步:GraphRAG 的索引放在哪一步做

先想清楚图谱从哪来:是让模型从文档里抽实体和关系,还是已有结构化数据直接映射过去。前者慢、吃算力,但对散乱文档友好;后者快,但要求你提前把数据整理成规整格式。这个选择决定了后面索引任务的编排方式,别跳过去。

索引来源适合的输入主要代价
模型抽取实体关系非结构化文档、说明文、报告耗时长、吃算力,结果需要抽检
结构化数据映射已有表格、字段清晰的业务数据前期整理成本高,后期更新要同步
两者混合主体文档加少量权威表编排复杂,需要明确谁优先

把索引拆成两段看:一段是一次性的建图和抽取,一段是每次提问时的检索和回答。这两段的超时和并发要分开设,别用同一套参数。一次性建图任务放后台慢慢跑,不要挂在对话框的同步链路里;同步链路只负责查,查不到图谱就退回普通向量检索,保证用户有兜底答案。

  1. 先跑纯向量知识库只用向量检索,用一批固定问题确认能答对,这一步不通就先别上图谱。
  2. 后台建图把抽取和建图放成独立任务,跑完再看结果,别在问答链路里等它。
  3. 加图谱检索同步链路里先查图谱,查不到或超时退回向量检索,两条路都留日志。
  4. 对比命中同一批问题分别跑加图谱和不加图谱,看命中率有没有提升,没提升就先不维护这条链路。

小团队起步建议先跑普通向量检索,确认知识库能答对,再加图谱层。一次上全套,出问题时你分不清是模型不行、图谱没建好,还是检索策略写错了。

第三步:超时、并发与降级怎么设

本地推理的耗时波动大,尤其是首次加载模型那一次。连接超时和读取超时要分开给,读超时要留够余量,别照搬云服务那种短值。连接超时短一点没关系,读超时太短会让本来能出的答案被掐掉,用户看到的就是报错。

并发按硬件给。本地单卡同时跑几个请求很容易把显存打满,接着全线变慢,单个请求耗时被拖垮,反而比串行还慢。先用低并发串行跑通,再逐档往上加,每加一档观察单请求耗时和失败率,涨得明显就退回去。

  • 降级第一档:图谱检索超时,退回向量检索
  • 降级第二档:向量检索也超时,返回固定话术加原文片段
  • 降级第三档:整体不可用时给明确提示,而不是让请求一直挂着
  • 批量重建索引和线上问答错峰,或者临时调低问答侧并发
  • 把降级动作写进日志,否则事后分不清是正常回答还是兜底回答

第四步:日志、自检与效果验收

每次请求至少记四样:走的哪条检索路径、召回了几条、耗时落在哪一段、最终有没有命中兜底。不记这些,慢和错都归因不了,只能靠猜。耗时最好分段记,把模型推理、检索、图谱查询分开,才知道瓶颈在哪。

准备一组固定问题当回归集,分三类:知识库里明确有的、知识库里明确没有的、需要跨文档串联的。改完配置就跑一遍,看有没有退化。图上检索和向量检索分别统计命中率,才知道图谱层到底有没有加分;如果加不加差不多,就先别花精力维护图谱链路。

接口本身的延迟基线可以先量一遍,再判断是模型慢还是链路慢。做法可以参考 接口测速(/tools/speed-test),先排除网络层,再看模型层。模型和价格的实时资料,到 模型资料库(/models) 核对当时的数字,别凭印象估。

现象先看哪一段常见原因
知识库建不起来嵌入链路嵌入模型地址或类型填错
问答偶尔超时读超时与并发并发过高、模型冷启动
答案没命中检索路径图谱没建好、向量库为空
整体变慢算力占用重建索引和问答抢资源
下一步把配置跑通只是开始,服务稳不稳、钱花得值不值,要看长期的可信度和价格变化;站内把这些数据按时间沉淀下来,省得你事后一个个补。

常见问题

Dify 里配好 Ollama 模型了,为什么建知识库还是报错?

多半是嵌入模型这条链路的问题,不是对话模型。检查嵌入模型是否也指向了同一个 Ollama 服务、模型名是否与本地拉取的一致、Dify 所在环境能否访问到该地址。对话能通不代表嵌入能通,两条链路要分别验证。

本地跑 GraphRAG 索引特别慢,正常吗?

抽取实体关系本身就要对文档逐段调模型,量一大就很慢,这是任务性质决定的。做法是把建图放到后台一次性跑完并落库,提问时只做检索;同时控制单次处理的文档量,分批推进,别指望一次性全量建完。

图谱检索和向量检索要同时开吗?

不一定。先用固定问题集分别测一遍,看图谱层有没有带来实质提升。如果知识库以短文档、问答对为主,向量检索往往就够了;如果是多实体、跨文档关系类问题,图谱才有明显价值。加不加看测出来的差距。

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