Skip to main content

SAG 多跳检索

SAG(Semantic / Structural Augmented Graph)是 KnowFlow v2.4.3 新增的多跳检索能力。它把知识库中的文档抽取成 event(事件) 与 entity(实体) 组成的图谱,检索时可以从一篇文档命中的实体「跳」到另一篇文档的相关事件,从而跨文档串联证据,回答传统检索难以处理的复杂、多步推理类问题。

v2.6.1 更新

v2.6.1 把 SAG 换成了 Milvus 版引擎:SAG 结果与原生检索融合,不再整体替换原生结果;SAG 通过 KnowFlow 的模型代理调用模型,不再单独同步和保存模型密钥;检索策略改到助手设置里选择。本文按 v2.6.1 描述,旧版本请以 更新日志 为准。

什么是 SAG​

传统 RAG 检索是「一跳」的:把问题向量化,召回最相似的若干分块。对于「A 和 C 有什么关系」这类需要经过中间实体 B 才能串联的问题,一跳检索往往召回不全。

SAG 以事件为中心构建知识图谱:

  • 文档入库时,SAG 会额外抽取其中的事件与实体,并建立它们之间的关联
  • 同一知识库内、多篇文档提到的同一实体会合并为一个实体节点
  • 检索时以整个知识库为范围进行多跳扩展:命中文档 A 的实体后,可继续跳转到文档 B 中与该实体相关的事件
作用域是知识库级

SAG 的实体去重与检索都是知识库(source)级,不是单文件级。因此同一知识库内的各文档应保持一致的 SAG 开启状态。

适用场景​

✅ 推荐使用:

  • 需要跨多篇文档串联信息、进行多步推理的问答
  • 实体关系密集的知识库(如案例库、调研报告、法规与判例)

⚠️ 谨慎评估:

  • 简单的事实型问答,原生混合检索通常已经足够,不一定需要 SAG
  • SAG 会带来额外的嵌入与抽取成本,建议按需在特定知识库开启

前置条件​

开启 SAG 前,请确认部署环境满足以下要求:

  1. 文档引擎为 Milvus(DOC_ENGINE=milvus)。SAG 的向量复用本部署的 Milvus,存放在独立的逻辑库 SAG_MILVUS_DATABASE(默认 sag)中,与知识库向量隔离。
  2. 已启用 SAG 服务:在 docker/.env 的 COMPOSE_PROFILES 中追加 sag,再执行 docker compose up -d,会启动 ragflow-sag 容器。全 Docker 部署下 SAG_BASE_URL 保持默认的 http://ragflow-sag:4173 即可。SAG 默认不鉴权,生产环境不要映射宿主机端口。
  3. 知识库的嵌入模型为 1024 维。这是 SAG 的硬性约束,否则无法开启。
  4. 关系数据跟随 DB_TYPE(PostgreSQL 或 MySQL),首次启动在主库实例里自动创建 SAG_DB_NAME(默认 knowflow_sag)。不再需要 pgvector 扩展。
部署说明

SAG 作为独立容器与 KnowFlow 走 Docker 内网 HTTP 通信。从 v2.6.0 及更早版本升级时,PostgreSQL 镜像已换回官方 postgres:16-bookworm,原有数据卷直接复用;旧版 SAG 留下的 sag 数据库不再使用,可手动删除。

开启 SAG​

在知识库级开启​

  1. 进入目标知识库,打开配置 / 设置页面
  2. 找到 多跳检索(SAG) 开关
  3. 打开开关,系统会执行以下操作:
    • 校验前置条件:检查 SAG 服务是否可达、知识库嵌入模型是否为 1024 维;连不上 SAG 服务时会说明原因
  4. 校验通过后开关生效。开关只做检查,不同步任何模型配置:SAG 通过 KnowFlow 的模型代理调用模型,对话和重排使用知识库所属账号的默认模型,嵌入使用知识库自己的嵌入模型,SAG 侧不保存模型密钥

开启后会发生什么​

  • 文档入库双写:文档解析入库时,会在写入原有检索链路的同时,异步同步一份到 SAG 服务进行事件/实体抽取与图谱构建。该过程为后台异步任务,不阻塞入库返回。
  • 删除文档自维护:删除文档时会同步从 SAG 删除,并智能保留跨文档共享的实体。
  • 聊天检索与原生检索融合:知识库开启 SAG 后,聊天时 SAG 与原生检索并发执行,结果融合后交给模型;开了 SAG 的聊天会保留更多片段,并使用 SAG 专用的回答指引。SAG 超过 SAG_CHAT_TIMEOUT(默认 20 秒)没有返回时,本轮只使用原生检索结果。
  • 删除知识库时一并清理:删除知识库后,它在 SAG 中的数据会同步清除。
  • 抽取只得到事件、没有实体时,系统会给出提示。

在助手设置中选择检索策略​

SAG 的检索策略由聊天助手决定,不再跟随知识库。在助手设置的 检索设置 中找到 SAG 检索策略:

选项特点
快速不调用模型,约 1 秒
精确(推荐)默认选项,通常需要 10 秒以上
多跳推理(较慢)推理链路最长,耗时最多

选择「多跳推理」时,平均耗时通常超过 20 秒,建议把 SAG_CHAT_TIMEOUT 调到 40 左右,否则多数请求会超时退回原生检索。

成本提示

开启 SAG 后,文档会被 RAGFlow 与 SAG 双重嵌入,会带来额外的嵌入成本。建议仅在真正需要多跳能力的知识库上开启。

SAG 图谱可视化​

知识库开启 SAG 并有数据后,左侧导航会出现 SAG 图谱 标签:

  • 进入后自动拉取该知识库最新的事件/实体图谱,v2.6.1 起打开速度明显加快
  • 以力导向图(Force Graph)方式渲染,节点按类型(实体 / 事件)着色
  • 点击事件节点,可查看时间、摘要、关联实体和来源,并通过「查看原文」跳转到原文
  • 点击实体节点,可查看与它关联的事件

在检索测试中对比 SAG​

检索测试页是验证 SAG 价值、对比两种检索效果的地方:

  1. 进入知识库的 检索测试 页
  2. 勾选 使用知识图谱 开关
  3. 若该知识库已开启 SAG,表单中会出现 SAG 检索策略,每次测试可以单独选择,不读取助手设置
  4. 结果中的 SAG 检索链路 面板会展示检索链路、统计与各阶段耗时,并保持引用溯源与 chunk 高亮和传统 RAG 对齐
为什么测试页不自动走 SAG

检索测试页本身是调试/对比工具,保留显式的「使用知识图谱」开关,可以直接对比 SAG 与原生混合检索的效果,方便验证 SAG 是否带来提升。真实聊天检索则在开启后自动与原生检索融合。

常见问题​

Q:SAG 会改动原有的检索链路吗?

不会。SAG 是「加法」式集成:原生检索照常执行,SAG 结果与之融合;SAG 超时或不可用时自动只用原生检索,也可随时关闭 SAG。

Q:为什么开关打不开,提示维度不符?

SAG 要求知识库的嵌入模型为 1024 维。请为该知识库选择 1024 维的嵌入模型后再开启。

Q:开启后立刻检索为什么没有 SAG 结果?

文档到 SAG 的同步是异步后台任务,入库后图谱可能尚未构建完成。请稍候片刻,待抽取任务完成后再检索。