@teach_fireworks: https://x.com/teach_fireworks/status/2067243590447952212
摘要
SAG(SQL-Augmented Generation)是一种基于SQL的检索增强生成新方法,通过将数据块转换为事件和实体,利用SQL连接查询实现多跳推理,在MuSiQue数据集上Recall从65.13%提升至80.04%,支持约5亿条数据的秒级线上检索,已开源。
查看缓存全文
缓存时间: 2026/06/17 18:02
刚开源就 SOTA,这个项目有点东西:SAG 凭什么跑赢 GraphRAG,省钱,还扛得住海量企业数据?
假设你是某家科技公司的技术负责人。
去年你用 GraphRAG 搭了一套内部知识库,拿两万份合同做 PoC,问答效果惊艳,老板当场拍板立项、批预算、上生产。
然后文档涨到五百万份。
问题开始不对劲了:
建一次知识图谱要跑整整一个周末,研发费和 token 费比这次查询产生的业务价值还高;
合规部改了一份合同,知识库三天后才更新完;
安全团队坚持数据不能出域,可你依赖的云端大模型又非得把文档传出去。
你心里冒出三个问题:
1 GraphRAG 跑分明明是 SOTA,为什么一进企业真实场景就集体拉胯?
2 多跳问答这种「张经理 → 他去年签的客户 → 那客户今年的续约」式连环追问,到底卡在哪一层?
3 有没有一种方案,既能在跑分上赢,又能扛住五亿文档、当天增量、私有化部署这三件事?
这篇论文给出了一种新的思考和路径:
https://arxiv.org/abs/2606.15971
SAG给了一个反直觉的答案:
SQL 检索增强生成,SQL 已经成熟应用于几乎所有的存储系统几十年了,
把这种成熟的结构化标准直接用于检索和Agent系统!
That’s the point!
很聪明的做法。
让我想到了最近 ClaudeCode 基于已有文件系统的 Agentic Search 方案,有异曲同工之妙。
猛一看上去不太性感,但是又有效又实用。
而且该项目已开源:
https://github.com/Zleap-AI/SAG
SAG 将每个数据块转换为一个语义完整的事件和一组索引实体,然后使用 SQL 连接查询将共享实体的事件动态链接到局部超边,并在查询时构建动态实例化的局部索引结构。
这种设计避免了全局图重建和持续维护的需要。
它在最难的 MuSiQue 多跳问答上把 Recall从 65.13% 拉到 80.04%,还扛住了约 5 亿条数据的线上秒级检索。
本文会拆解 SAG 到底做对了什么——以及它为什么可能让 GraphRAG 这类「重图」路线在企业里显得又慢又贵。
多跳问答,向量召回早就到顶了
企业里最难答的问题,几乎都是多跳的。
「我们上海办公室负责合规的张经理,去年签的那个客户,今年的续约情况怎么样?」——要答出来,得先找到张经理,再找到他去年签的客户,再找到那个客户今年的续约记录。
三跳,三份分散在不同文档里的证据。
普通向量检索在这类问题上很早就到顶了。
它只会找语义相近的片段,拼凑不出「张经理 → 客户 → 续约」这条证据链。
更要命的是,Agent 做多步检索时,单步误差会沿推理链累积放大——第一步漏了一个关键实体,后面三步全在错误地基上盖楼。
对 Agent 来说,检索系统真正该提供的能力,是在多跳查询里稳定把证据组织成一条链。
向量检索给不了这个能力。于是行业分出几条路线,核心区别就一个:
什么时候建结构、建多大。
Naive RAG:切块、向量化、top-k。快、便宜、能扛量,但精度卡在语义浅层匹配。 GraphRAG:入库时就把全局知识图谱建好,先全文抽实体、抽关系,再做社区聚类。 HippoRAG 2:模仿人类海马体做认知图谱,是目前公认的多跳强基线。 SAG:几乎不预先建图,入库时只抽一个轻量的局部结构,检索时再就地「长」出一条链。
前三者方向都对,份量却都很重。SAG 押的是相反的注。
GraphRAG 真正的病根:结构建了,查询时却没用上
GraphRAG(图增强检索增强生成)是一种将**知识图谱(Knowledge Graphs)**与大语言模型(LLM)相结合的先进检索技术。传统的 RAG 依赖于将文本切片并利用向量相似度进行检索,这在处理跨文档的“全局问题”或复杂的“多跳推理”时极易抓瞎。
而 GraphRAG 通过构建结构化的实体与关系网络,让 AI 具备了像人类一样“顺藤摸瓜”连点成线的能力。
GraphRAG 的卖点是用图表达实体关系,但实际查询时,系统要么在图节点上做相似度检索,要么在社区摘要上做匹配——它并没有真正去「走」那张图的多跳结构。
离线建好的精细结构,和在线实际执行的召回逻辑,是脱节的。
你付了建图的钱,买到的却只是「查询时能走多跳」的错觉。
这个「结构-检索脱钩」,才是企业里 GraphRAG 最让人沮丧的地方:
它建得起的精致,用的时候用不上。
再把账拆细,这三笔企业都跑不掉:
第一笔:入库成本
GraphRAG 要对每份文档做实体抽取、关系抽取,再跨文档做社区聚类和摘要。
而且传统知识图谱用「主体-关系-客体」这种三元组来表达关系,可现实事件几乎都是多元的:
一笔交易涉及买方、卖方、产品、金额、时间好几个主体,硬拆成两两的三元组,语义被切碎,冗余还成倍增加。
五亿份文档,光建图就是一笔可观的钱,还要扛住三元组拆分的误差累积。
第二笔:增量成本
企业文档每天都在变。GraphRAG 的全局图谱一旦某份文档变了,社区结构就可能跟着变,理论上得重新聚类。实践中没人真重跑,于是图谱和现实越漂越远,知识库变成「永远停留在上周三」的快照。有句话说得很准:当数据持续演化时,维护一张全局图的开销,甚至可能超过初始构建。
第三笔:私有化成本
这个最要命。金融、医疗、政务、法务的数据不能出域,可 GraphRAG 那几轮重型抽取,要么依赖很强的云端大模型,要么得在内网私有部署一个足够强的模型来扛。无论哪种,都是钱和合规的双重压力。
三条加起来,就是企业里那句最常见的吐槽:
「GraphRAG 我们试过,效果好是好,就是用不起、改不动、上不了线。」
HippoRAG 2
HippoRAG 2通过知识图谱、Passage Node 和 Personalized PageRank 将传统向量检索升级为“关联记忆检索”,在多跳推理(Multi-hop Retrieval)、跨文档关联和复杂上下文理解场景下明显强于传统 RAG。
HippoRAG 2 本质上是在向量检索之外增加了一层“长期记忆网络”,解决的是关联推理问题,代价是引入了图构建、实体对齐和记忆维护等额外复杂度。
HippoRAG 2 在检索效率和推理能力之间找到了一个不错的平衡点,用较低的索引成本获得了接近图推理系统的效果。但对于企业场景来说,认知图谱仍然需要持续构建和维护,面对长期增量数据时,系统复杂度并没有完全消失。
SAG 的判断:把结构搬进检索本身
既然病根是「结构建了却用不上」,解法就清楚了——把结构化能力搬进检索执行本身,别在离线阶段把结构建死。
在离线阶段,每个数据块被转换为一个事件和一组实体,并写入 SQL、向量和全文索引。
在在线阶段,系统执行初始召回,然后进行查询时扩展,最后在压缩后的候选集中完成选择。
SAG 的核心结构很简单。对每个文档切片,它只抽两样东西:
一个事项(event)保留这个切片的完整语义,一组实体(entities)负责索引和桥接。
chunk -> event # 一个完整事项,保留语义 chunk -> entities # 多个实体,负责索引 event <-> entities # 事项和实体之间多对多连接
理解它的关键在于:
事项和实体是对同一个切片的两类并列结果。
事项承载语义,实体只做索引和桥接,
两者通过数据库的关联查询连起来。
一个事项关联着好几个实体(人物、时间、地点、组织、产品……),这本来就是一张天然的关系网。
这就是 SAG 和 GraphRAG 最根本的区别。
GraphRAG 是「预先把整张图画好贴在墙上,谁动一下都得重画」;
SAG 是「查询的时候,根据这个问题,从命中的实体出发,沿着事项-实体的连接,临时算出一条链路」。
用企业能听懂的话说:
GraphRAG 像一家公司花半年画了一张巨型组织架构图贴在墙上,谁调岗都得重新画;
SAG 像一个查询系统,你问的时候它现查现算,「张经理 → 他去年签的客户 → 那客户今年的续约」这条线是按需长出来的,不动那面墙。
更妙的是,SAG 的多跳扩展就是数据库的关系扩展,靠 SQL 的关联查询,沿着共享实体在不同事项之间跳过去,默认只跑一跳。
它不需要图数据库那套重家伙,一个会做表连接的数据库就够。
三个角色各司其职:SQL、向量、LLM 谁干什么
SAG 还有个务实的设计:
把检索流水线拆成三个角色,各干各的活,谁都不越界。
SQL 负责确定性的过滤和连接——实体与事项的关联、多跳扩展,全靠数据库的关系查询,精确、可解释、便宜。
向量检索负责语义扩展——别名、近义词,比如「张经理」和「老张」、「续约」和「续签」,靠向量相似度桥接。LLM 只在最后压缩过的候选集上做一次精排——前面两路把候选从几十万压到一百个之后,它才出场。
这正好对应企业的成本账。
过去很多 RAG 动不动就把 LLM 塞进检索主路径,每一步都问模型、每一步都花 token。
SAG 反过来:能交给 SQL 的绝不交给模型,把贵的调用往后压,用在刀刃上。
还有个取舍值得说:
SAG 在实体处理上故意「够用即可」——只做简单字符串归一和查重,不追求完美的实体对齐。
这听起来像偷懒,其实很清醒:
真正承载语义的是事项,实体只是个「能桥接就行」的路标。
与其花大力气做完美实体对齐(GraphRAG 在这上面烧了不少钱),不如把预算省下来。
硬证据:跑分到底高在哪
在三个标准多跳问答数据集上,用相同配置(bge-large-en-v1.5 + qwen3.6-flash)和公认强基线 HippoRAG 2 对比:
MuSiQue 是公认最难的多跳数据集,SAG 把 Recall@5 从 65.13% 拉到 80.04%,绝对提升接近 15 个百分点。
三集平均 Recall@2 提升了 11.16 个点,相对提升约 16.4%。
这里有个细节值得企业的人多看一眼:
提升最猛的是 Recall@2,也就是「只检索两条就命中关键证据」的能力。
这直接意味着 Agent 能用更少的上下文、更早地把证据喂给模型——
在企业里这就是省钱,更少 token、更低延迟、长任务里更少被无关上下文干扰。
还有一个对照实验很说明问题。
把 embedding 换成更强的 NV-Embed-v2,MuSiQue 的 Recall@5 进一步到 81.71%,
HippoRAG 2 换上同模型是 74.55%。
换更强的模型当然能涨,但 SAG 的领先依然在。
这说明它的收益主要来自结构设计——对要私有化部署、模型选择受限的企业来说,这点很关键。
SAG 的强项是真正需要长链条、跨文档串联的多跳——而这恰好是企业里最难、最值钱的那类问题。
能不能在企业里真跑起来:看代码和规模
体验地址:https://wiki.zleap.com/search
跑分是研究的事,企业只认一件事:
这套东西能不能在自己机房里、自己数据上、自己模型上跑起来。
SAG 给了两个仓库。
一个是配套的 Benchmark 复现代码(github.com/Zleap-AI/SAG-Benchmark),带版本管理、带实验记录,是把评测脚本原样开源:
上传数据集:把评测数据转成 corpus,写入数据库和 ES
uv run python scripts/run_upload.py –dataset musique
跑复现 benchmark:多路召回 + 多跳扩展
uv run python scripts/run_search_benchmark.py
–dataset-name musique
–strategy multi
–top-k 10
–k-values “1,2,5,10”
–max-concurrency 10
复现脚本支持 MLflow 记录实验、支持固定数据源版本,输出 Recall、Precision、F1 完整评估。
可复现、可对账、可追溯,这是企业技术评审愿意看到的。
另一个是开箱即用的本地工作台(github.com/Zleap-AI/SAG)
技术栈是 TypeScript 全栈,数据层用 PostgreSQL + pgvector + 全文检索 + SQL 多跳,
模型侧兼容 OpenAI-compatible 接口——企业可以用自己私有部署的模型,数据完全不离开内网。
对企业落地,有几个设计尤其对路:
写入以 chunk 为并发单元。
这是「增量」成为原生能力的关键。每个切片独立抽取、独立入库,互不阻塞,等批处理、全局重算都不需要——当天改的合同,当天就能查到。
检索过程全程可视化。
每次提问,右侧面板实时展示走了哪条检索链路、多跳扩展到哪层、每步耗时多少。RAG 出问题时最头疼的是「不知道它为什么这么答」,能看到中间过程就能定位。
MCP 接入,做成 Agent 的数据底座。
工作台可作为 MCP Server 暴露给外部 Agent,企业内部的客服、风控、法务 Agent 共享同一套数据底座,文档抽一遍、多个 Agent 复用,各自存各自的。
是它已经在线上跑着一个约 5 亿条数据规模的 Wikipedia 检索 Demo(wiki.zleap.com/search),在线检索延迟保持在秒级以内。
PoC 拿两万份文档跑出效果不难,难的是五亿条数据在线上还能秒级响应。
这个规模证明 SAG 的「轻结构」在工程上真扛得住量。
把这几件事拼起来——可复现的 benchmark 脚本、能私有部署的工作台、
5 亿级在线验证、Agent 可复用的数据底座——它就是一份企业技术选型能拿去立项的材料,而远超一个论文里的 idea。
它的边界在哪,什么场景别用
第一,它依赖抽取质量。
SAG 的事项和实体是 LLM 抽出来的,模型太弱,抽取一塌糊涂,后面的检索全废。企业在私有化时如果想省钱用很小的本地模型,得先评估它的抽取质量能不能过关。地基不行,结构再巧也没用。
第二,简单场景它未必最优。
前面说过,2WikiMultiHopQA 上它的 Recall@5/10 反而略低。业务绝大多数是单跳、证据集中(比如纯 FAQ、单文档检索)时,普通向量检索甚至 BM25 就够,没必要上多跳结构。SAG 专为跨文档串联的长链条问题设计。
第三,长文档的切片仍是地基。
事项是按切片抽的,切片切得不好,事项就会残缺。这点和所有 RAG 一样,没有银弹。
第四,它需要 PostgreSQL + pgvector 这套基础设施。
比纯向量库(Milvus、Qdrant)重一点,但比 GraphRAG 要的图数据库加全套抽取管线轻得多。对已经用 PG 的企业,几乎零迁移成本。
诚实地说,SAG 要取代的,是那个「企业需要多跳、需要增量、需要私有化、需要扛规模,同时又想摆脱重图建图成本」的特定位置。
而这个位置,恰好是企业落地里最痛、最值钱的那块。
回到那个判断
文章开头说,企业 RAG 死在建不动、改不动、上不了规模。深一层看,真正的病根是:
你花了大成本建的结构,查询时根本没被用上。
SAG 给的解法就一句话:把结构化能力搬进检索执行本身,查询时按需长出一条链。
离线只建一层轻量索引,在线用 SQL 把多跳关系现查现算。结构重新变成查询时真正被执行的东西,而不再是挂在墙上的装饰品。
这个判断的可贵之处在于它敢做减法。
整个 RAG 圈这几年的默认动作是「加东西」——加更重的图谱、加更多的社区、加更强的模型。
SAG 反过来问:
真正必要的结构是什么?
能不能用最轻的那一版,把同样的事干成?
答案是能,而且跑分更好。
对企业技术选型的人来说,这里有个更实际的启示。
过去选 RAG 方案,主要看跑分和精度。
但真实的企业项目里,决定方案能不能活到第二年的,是建图成本、增量时效、私有化能力、规模上限这些东西。
跑分决定 PoC 漂不漂亮,工程指标决定系统活不活得下去。
我甚至觉得这件事还能往前看一步。
事项-实体的索引结构这么轻、又能持续增量写入,它天然适合做长期运行 Agent 的记忆底座——
带版本、带时间感知,能记住 Agent 三个月前查过什么、状态怎么演化的。
这或许是 RAG 之外,这套结构更远的想象空间。
但那都是后话。
眼下能确定的是:
RAG 下一轮的进步,大概率来自这种「把该重的地方重、该懒的地方懒」的拓扑取舍。
它代表的是一个方向,值得每个在企业里做 RAG 的人认真看一眼。
相似文章
@aikangarooking: https://x.com/aikangarooking/status/2069325659105861926
介绍了SAG(SQL-Retrieval Augmented Generation),一种基于SQL动态超边的新型检索增强生成架构,相比传统RAG和GraphRAG在多跳推理上更高效、成本更低,已在GitHub开源并取得不错评测结果。
@nash_su: http://WisMe.ai 知识图谱功能更新 老版本在内容变多之后可读性变得极差,性能也有问题,更新后在几百甚至上千节点场景下,也很丝滑,同时聚类功能更加实用,也会调用 LLM 进行信息汇总,搜索浏览都更加方便快捷。 Harness …
WisMe.ai updates its knowledge graph functionality for better performance with hundreds to thousands of nodes, improved clustering, and LLM-powered summarization for more efficient search and browsing.
@sitinme: Github 30k star,不用向量数据库也能做 RAG,而且准确率还更高! 做 RAG 的人应该都有过这种体验:向量数据库返回的内容“看起来相关”,但就是不是你要的那个答案。 特别是处理合同、财报、技术手册这类长文档的时候,你问“第…
介绍一个GitHub上30k star的开源项目,通过推理而非向量数据库实现RAG,号称准确率更高,解决了向量检索中相似不等于相关的问题。
@teach_fireworks: AI Coding 现在开始进入一个很有意思的阶段。 过去大家讨论最多的是模型能力、上下文长度、Agent Loop、Tool Use、自动化编程,但真正把 Agent 长时间放进真实开发环境之后,很多团队发现问题已经不只是“能不能生成代…
介绍开源工具 re_gent,它为 AI 编程 Agent 提供运行时级别的版本控制和可观测性基础设施,解决 Agent 长时间运行后的代码溯源与审计问题。
@gkxspace: 发现一个很疯狂的开源工具,你输一句话描述你要什么数据,它派出一群 AI Agent 并行跑到各个网站上调研,几分钟后汇总成一张结构化表格给你 其实数据都摆在网上,但想变成一张能用的表格,历来都是苦力活,过去这是一个工程项目: 拼搜索、写爬…
BigSet 是一个开源工具,输入一句话描述所需数据,它会派出多个 AI Agent 并行在网络上调研,自动推断 schema、去重、验证并生成结构化表格,支持定时刷新。