需先用fastapi为graphrag封装/query接口,仅返回结构化图谱上下文(含实体、关系、社区报告),禁用llm生成;dify中配置http工具时须用host.docker.internal、启用响应缓存,并设计双路径工作流保障鲁棒性。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

准备GraphRAG服务并暴露标准API
你需要先让GraphRAG具备可被Dify调用的HTTP接口能力,否则Dify无法将其作为工具接入工作流。
进入GraphRAG项目根目录,确保已执行过graphrag init --root ./your_project完成初始化。
在项目根目录下新建api_server.py文件,用FastAPI封装本地查询逻辑:导入get_local_search_engine和read_indexer_*等核心函数,构建一个/query端点,接收question参数,调用search_engine.search()后返回原始上下文(含社区报告、实体、关系、文本块),**不经过LLM生成环节**。
关键点在于:必须显式禁用默认的LLM生成步骤,只输出检索到的结构化图谱上下文。否则Dify收到的是最终答案而非可二次加工的图谱数据。
启动服务:uvicorn api_server:app --host 0.0.0.0 --port 8000 --reload。此时http://localhost:8000/query?question=xxx应返回JSON格式的图谱上下文。
在Dify中配置HTTP工具节点
登录Dify控制台,进入目标应用 → 工作流(Workflow)编辑页 → 点击「+ 添加节点」→ 选择「HTTP 请求」。
填写工具名称为“GraphRAG知识图谱检索”,描述写明“基于实体关系网络的深度语义检索”。
请求方法选GET,URL填http://host.docker.internal:8000/query(若Dify运行在Docker中,必须用host.docker.internal而非localhost,否则网络不通)。
参数设置:添加一个question参数,类型为「用户输入」,变量名设为{{inputs.question}}。其他字段留空。
【必须勾选“启用响应缓存”】,否则每次查询都会触发重复图谱检索,拖慢响应且浪费GPU资源。
设计双路径问答工作流
第一步:将用户原始问题输入至「GraphRAG知识图谱检索」HTTP节点。
第二步:添加「条件分支」节点,判断HTTP响应是否成功(即status_code == 200且response.body非空)。
第三步:成功路径→连接「大模型」节点,将HTTP返回的完整JSON上下文作为context传入系统提示词,要求模型严格基于图谱三元组生成答案,禁止自由发挥;失败路径→连接另一个「大模型」节点,降级使用传统向量知识库回答,并在回复末尾附加“图谱检索暂时不可用,已切换至基础检索模式”。
这一步决定了系统鲁棒性:当GraphRAG索引损坏或服务宕机时,问答不会中断,只是精度略有下降。
验证图谱检索效果
在Dify调试面板中输入测试问题:“华为Mate60 Pro和iPhone15 Pro Max的摄像头参数有何异同?”
观察HTTP节点输出的JSON内容,确认其中包含entities数组(含“华为Mate60 Pro”“iPhone15 Pro Max”“主摄”“超广角”等实体)、relationships数组(如“华为Mate60 Pro→搭载→XMAGE影像系统”)、community_reports(描述两个手机影像技术路线的对比摘要)。
如果JSON里只有零散文本块而没有实体/关系字段,说明GraphRAG索引构建阶段未启用--community_level参数或settings.yaml中entity_extraction未开启,需回退重跑索引。











