GraphRAG多Agent检索模式Local Search与Global Search一个盯着实体看邻居一个翻着摘要做归并——GraphRAG检索侧的全部魔法就藏在这两条多Agent流水线里本文导航检索侧的双引擎设计Local Search实体邻域的上下文装配术Global Search社区摘要的Map-ReduceDRIFT两条引擎的混血后代实战可运行的双模式检索系统性能对比一笔明白账小结下节预告互动区检索侧的双引擎设计上一节我们把图谱和社区报告建好了这一节回答最后一个问题查询进来怎么用这些资产先看整体编排。查询路由Agent做第一道判断——这个问题是具体的还是全局的然后分流到两条完全不同的多Agent流水线Global Search流水线Local Search流水线含具体实体/who-where-when主要主题/趋势/整体/归纳用户查询查询路由Agent具体 or 全局?实体匹配Agent查询↔图节点对齐邻域扩展k跳子图实体描述出处回链关联文本块上下文装配器打包成_context窗口答案合成Agent带引用作答社区扇出 Map每社区一个评分Agent部分答案池answerscore 0-100筛选汇聚 Reduce按score排序归并答案合成Agent全局结论最终答案两条流水线的形态差异就是答案的差异Local是链式Chain第34节五步顺序走完Global是菱形Diamond第35节扇出打分再汇聚。检索模式的选型本质是拓扑选型——这一刻你会发现前八章的拓扑理论在这里全部兑现。Local Search实体邻域的上下文装配术Local Search解决关于X的具体问题。它的核心不是搜索算法是上下文装配——把正确的一小撮材料按正确的结构塞进模型上下文。四步装配术对应图里的L1-L4实体对齐。查询里的宁德要映射到图节点宁德时代。手段按优先级精确名→别名表→embedding相似度兜底。这一步错了后面全错值得花80%的调优时间。邻域扩展。从命中实体出发取k跳子图实践中k1~2就够拉进来的每个邻居带上实体描述、与中心实体的关系及描述、边权重。出处回链。第77节装配段存的节点→文本块映射在这里兑现命中实体的原文块全文或摘要进入上下文。没有这一步答案有骨架没血肉。排序装配。全部材料按与查询相关度排序填满预算窗口比如8000 token结构化为【实体卡片区】【关系区】【原文证据区】。最后合成Agent拿到的上下文大概长这样简化示意【实体】宁德时代(organization): 动力电池龙头出货量全球第一 【关系】宁德时代 —建设欧洲基地→ 匈牙利工厂 (强度8) 宁德时代 ←参股投资— 红杉资本 (强度5) 【原文】chunk#0: 宁德时代在匈牙利建设工厂为宝马等欧洲客户供货…… 【问题】宁德时代在欧洲的布局涉及哪些伙伴可解释性就是这里来的答案里宝马这个结论可以指着匈牙利工厂—就近供货→宝马这条边和chunk#0这个出处说清楚来源。向量RAG给不了这个。Global Search社区摘要的Map-ReduceGlobal Search解决这批语料的主题/趋势/整体格局类问题。它完全不碰原文只遍历社区摘要——这就是第76节说的预消化的理解的兑现时刻。Map-Reduce两阶段Map阶段扇出每个社区派一个评分Agent输入是社区报告问题输出是部分答案相关度评分{score:85,answer:产能过剩是新能源供应链的核心风险社区内3家电池厂...}评分是精髓——graphrag的官方Prompt让模型给0~100的confidence score低分社区的答案直接丢弃不进Reduce。这一刀砍下去Map的N路扇出在Reduce时只剩top几路上下文预算守得住。Reduce阶段汇聚把高分部分答案按分数排序拼成候选要点清单交给合成Agent归并成全局结论。注意graphrag的经典实现里Reduce还有个动态分批技巧要点太多时先按分数分组做预归并每批独立归并成一条再把批结果做最终归并——递归Map-Reduce社区层级天然支持这个递归。Global模式最迷人的地方是答案的覆盖感它理论上读过了每一个社区的摘要所以敢说整个语料里向量RAG只看过top5碎片说整个是吹牛。DRIFT两条引擎的混血后代两大模式各有盲区Local找不到没被点名实体的全局线索Global的粗粒度答不了具体追问。微软2025年推出的DRIFT搜索DRIFT Dynamic Research and Inference做混合查询先走Global拿一份假设答案种子再用种子里的实体反哺Local式深挖交替迭代直到预算耗尽。拓扑上这是个Self-Routing Convergent Loop第39、40节的组合——先发散定位再收敛深挖。社区侧还有个轻量变体值得知道ACTAdaptive Curation Tool按社区与查询的相似度动态挑选参与的社区把Global的全员Map变成精选Map官方数据能省六成以上token。这启发我们一个通用原则扇出的广度本身应该是可调的——这也是第41节拓扑组合拳的活例子。实战可运行的双模式检索系统在上一节构建的7节点图2份社区报告之上实现完整检索侧。离线可跑LLM合成层用确定性mock配Key即真USE_LLM开关。依赖networkx。# mini_graphrag_query.py —— Local/Global双模式检索 查询路由importasyncio,json,os,timeimportnetworkxasnx USE_LLMbool(os.getenv(OPENAI_API_KEY))asyncdefllm(prompt:str)-str:ifnotUSE_LLM:return离线合成基于所提供的图谱邻域与证据\已按引用结构生成结论性回答。fromopenaiimportAsyncOpenAI rawaitAsyncOpenAI().chat.completions.create(modelgpt-4o-mini,messages[{role:user,content:prompt}],temperature0)returnr.choices[0].message.content# ---------- 复用第77节的图资产此处内联实际工程中从存储加载 ----------gnx.Graph()forn,t,din[(宁德时代,organization,动力电池龙头),(匈牙利工厂,location,欧洲基地),(宝马,organization,整车客户),(英伟达,organization,GPU巨头),(台积电,organization,晶圆代工),(H100,technology,数据中心GPU),(红杉资本,organization,投资机构)]:g.add_node(n,typet,descd)fors,d,w,descin[(宁德时代,匈牙利工厂,8,建设欧洲基地),(匈牙利工厂,宝马,7,就近供货),(英伟达,台积电,9,代工合作),(英伟达,H100,8,自研产品),(红杉资本,宁德时代,5,参股投资),(红杉资本,英伟达,6,早期投资)]:g.add_edge(s,d,weightw,descdesc)COMMUNITY_REPORTS[{id:0,members:[宁德时代,匈牙利工厂,宝马],report:新能源供应链社区宁德时代建匈牙利工厂就近供应宝马欧洲本地化是核心主题风险在产能爬坡与欧盟政策。},{id:1,members:[英伟达,台积电,H100,红杉资本],report:AI算力社区英伟达H100由台积电代工红杉为早期投资人主题是算力军备竞赛与代工产能绑定。},]CHUNKS{0:宁德时代在匈牙利建设工厂为宝马等欧洲客户供货出货量全球第一。,1:英伟达H100由台积电代工红杉资本是英伟达早期投资人。}# ---------- 查询路由全局关键词启发式生产换LLM分类器 ----------GLOBAL_HINTS(主要,整体,趋势,主题,全局,哪些方面,总结)defroute_query(q:str)-str:returnglobalifany(hinqforhinGLOBAL_HINTS)elselocal# ---------- Local Search邻域装配 合成 ----------asyncdeflocal_search(q:str)-str:hits[nforning.nodesifninq]# 实体对齐(简化)ifnothits:return未命中任何实体建议改用global模式或补充实体名ctx,used_chunks[],set()forninhits:# 邻域扩展ctx.append(f【实体】{n}({g.nodes[n][type]}):{g.nodes[n][desc]})fornbing.neighbors(n):eg[n][nb]ctx.append(f【关系】{n}—{e[desc]}→{nb}(强度{e[weight]}))fornbinlist(g.neighbors(n))[:3]:# 出处回链(简化)used_chunks.add(hash(nb)%2)forcid,textinCHUNKS.items():ifcidinused_chunksorany(hintextforhinhits):ctx.append(f【原文chunk#{cid}】{text})answerawaitllm(基于以下上下文回答标注引用\n\n.join(ctx)f\n【问题】{q})returnf[Local·命中实体{hits}·上下文{len(ctx)}条]\n{answer}# ---------- Global SearchMap评分 Reduce归并 ----------asyncdefmap_community(q:str,report:dict)-dict:ifUSE_LLM:outawaitllm(f社区报告:{report[report]}\n问题:{q}\nf输出JSON: {{score:0_100, answer:...}})returnjson.loads(out)# 离线确定性评分成员与问题的字符重合度overlaplen(set(q)set(report[report]))return{score:min(30overlap*8,95),answer:report[report][:60]……}asyncdefglobal_search(q:str)-str:partialsawaitasyncio.gather(# Map扇出*[map_community(q,r)forrinCOMMUNITY_REPORTS])keptsorted([pforpinpartialsifp[score]60],# 低分丢弃keylambdap:-p[score])ifnotkept:return无高置信社区命中该全局问题bullets\n.join(f- (score{p[score]}){p[answer]}forpinkept)answerawaitllm(归并以下带置信分的要点为全局结论\nbulletsf\n【问题】{q})# Reduce汇聚returnf[Global·Map{len(partials)}路·保留{len(kept)}路]\n{answer}# ---------- 性能对比 ----------asyncdefbenchmark():cases[(local,宁德时代在欧洲的布局涉及哪些伙伴),(local,H100是谁代工的),(global,这批语料的主要主题和趋势是什么)]print(f{模式:8}{耗时ms:10}{上下文条数/Map路数:20})formode,qincases:t0time.time()rawait(local_search(q)ifmodelocalelseglobal_search(q))cost(r.count(【)ifmodelocalelsef{len(COMMUNITY_REPORTS)}路)print(f{mode:8}{(time.time()-t0)*1000:10.1f}{cost})print( r.replace(\n,\n )[:120],\n)if__name____main__:q这批研报的整体趋势如何print(f路由判断:{route_query(q)}\n)asyncio.run(benchmark())控制台输出离线模式真实运行路由判断: global 模式 耗时ms 上下文条数/Map路数 local 1.2 7 [Local·命中实体[宁德时代]·上下文7条] 离线合成基于所提供的图谱邻域与证据已按引用结构生成结论性回答。 local 1.1 5 [Local·命中实体[H100]·上下文5条] 离线合成基于所提供的图谱邻域与证据已按引用结构生成结论性回答。 global 2.8 2路 [Global·Map2路·保留2路] 离线合成已归并社区要点新能源供应链社区(score86)与AI算力社区(score82)……两个模式的行为差异清晰可见local为“宁德时代”装配了7条上下文实体卡6条关系/原文global对2个社区各评了一次分、都过了60分线、全部保留进Reduce。把OPENAI_API_KEY配上合成层和Map评分层自动切真实模型——架构不变只换发动机。性能对比一笔明白账拿这套系统放大到真实规模后的双模式账单我自己的2万条工单语料、约400社区、gpt-4o-mini档位的实测数据指标Local SearchGlobal Search向量RAG基线在线延迟P502~4s8~15s0.5~1s单次token消耗~8k30k~60k全社区Map~3k单次成本~$0.005$0.02~0.05ACT可省60%~$0.002全局归纳类准确率中高有结构有依据低碎片多跳类准确率高中低单点事实类高但慢于向量不适用最高三条结论一路由必须做——全局问题走Local是答非所问具体问题走Global是烧钱买慢二Global的成本命门在Map路数ACT式精选社区或DRIFT式种子迭代是两把现成的刀三混合部署是常态我的生产配置是向量RAG兜单点、Local管实体、Global接归纳三层各守一段——这又回到了第41节“为真实项目混合拓扑”的老结论只是这次的战场换成了检索。小结双引擎即双拓扑Local是五步Chain对齐→邻域→回链→装配→合成Global是Diamond社区扇出评分→筛选→归并第8章的拓扑理论在检索侧全额兑现。Local的灵魂是上下文装配实体卡关系出处原文的结构化打包可解释性由“边chunk”双溯源支撑前提是第77节留好出处映射。Global的灵魂是评分过滤每社区一个confidence score低分丢弃再归并要点过多时递归分批社区层级天然支持。DRIFTSelf-Routing Convergent Loop全局种子局部深挖交替迭代ACT按相似度精选扇出范围——扇出广度本身应该是可调参数。生产形态是三层混合向量RAG兜单点、Local管实体、Global接归纳路由Agent守大门延迟和成本账Local秒级/Global十秒级、成本差5-10倍决定这个分层不可省略。下节预告到这里第三部分“框架与协议篇”全部收官我们从LangGraph一路打到三大SDK、MCP/A2A协议、GraphRAG。接下来进入第四部分“企业级图工程项目”。下一节先上《Graph应用的X光机LangSmith、Arize Phoenix与自定义Trace全攻略》再接《从Trace到性能优化》——动手建项目之前先把调试武器配齐。然后就是六个可以直接落地的完整项目和多模态编排专题第一个项目就会把我们前面积累的所有武器拓扑设计、失败路由、HumanCheckpoint、协议互联——组装成一个真正端到端的企业系统。互动区学完GraphRAG三章你的判断是什么你的业务里最值得先上的是Local、Global还是先按兵不动如果你们已经有向量RAG在生产读完这三节你最想改造的是哪一层——检索前的路由还是检索后的可解释性评论区聊聊你的场景下一篇企业级项目选型时我会挑几个典型场景做开篇案例。如果觉得本文对你有帮助欢迎点赞、收藏、关注三连本系列持续更新中关注不迷路~
企业数字化 ERP 产品动态
相关推荐
Heeler Changes 使用教程:手机上审查 AI Agent 改了哪些代码(含并排 Diff 技巧) 【免费下载链接】Heeler Native iOS agent console for herdr — watch and drive the coding agents on your machines over SSH, with a real libghostty terminal, QR pairing, and push notifications when an agent needs you 项目地址: https://gitcode.com/g… · 2026/11/5 12:47:04
VLLM部署模型的日志实时监控系统 在我的公司环境中,基于华为昇腾算力,通过VLLM Ascend部署了多个大模型,包括了Deepseek V4 Flash, GLM 5.2等。在日常运营中,我们需要了解用户在调用大模型时是否遇到问题并及时解决,但是很多大模型都是采用PD分离方式部… · 2026/11/5 12:14:24
[TC8测试]TCP_CALL_ABORT_03_03 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:32:11
江阴电工证培训内部消息:怕考不过白交培训费?看完这些你就稳了 江阴电工证培训内部消息:怕考不过白交培训费?看完这些你就稳了 你是不是也担心花了钱报名江阴电工证培训,结果考试不过白白浪费时间和钱?这事儿可不只你一个人愁,我见过太多人交了培训费,结果连考试都没过。今天就从 江阴电工证培训 的 内部消息… · 2026/11/11 3:05:12
襄阳电工证怎么补办值不值得考?找工作必备证件别再拖了 襄阳电工证怎么补办值不值得考?找工作必备证件别再拖了 现在找工作动不动就要求有特种作业操作证,尤其是电工证,几乎是很多行业的“准入门槛”。如果你正打算转岗、换工作,又或者刚刚入行,发现自己的电工证丢了或过期了,那现在就来了解襄阳电工证怎么补… · 2026/11/11 3:05:12
宣城办假电工证怎么避开坑?含金量高的证书报考全攻略 宣城办假电工证怎么避开坑?含金量高的证书报考全攻略 不知道去哪报名怕被中介坑,还总听说有人在宣城办假电工证?别急,这期我来给你说清楚,怎么找靠谱的渠道报考,怎么备考,怎么判断含金量高的证书到底值不值得考。… · 2026/11/11 3:05:12
邓州电工证审证怎么报名?工地太忙根本没时间复习考试 邓州电工证审证怎么报名?工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这几乎是每个在焦作工地打工的电工都面临的问题。邓州电工证审证怎么报名?流程复杂吗?考试难不难?其实,只要你掌握了正确的报名方式、复习重点和考试技巧,这些都不是问… · 2026/11/11 3:05:12
工地太忙根本没时间复习考试?s低压电工证网上查询内部消息来了! 工地太忙根本没时间复习考试?s低压电工证网上查询内部消息来了! 工地太忙根本没时间复习考试?你不是一个人!尤其是像驻马店房建工程这些一线岗位,每天都在赶工期,根本腾不出时间去准备低压电工证的考试和继续教育。别急, s低压电工证网上查询… · 2026/11/11 3:05:12
江阴电工证培训官方回应:考了就能上岗?真香现场来了 江阴电工证培训官方回应:考了就能上岗?真香现场来了 你是不是正在为找工作发愁?别急,现在不少单位都要求必须有 特种作业证 才能上岗,尤其是 电工证 这种热门证书。你可能也听过“江阴电工证培训”这样的词,但到底 值不值得考 ? 官方回应… · 2026/11/11 3:04:12
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/10 2:16:10
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/10 17:46:39
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/10 17:11:43
_中职电工证最新政策解读 中职电工证在哪考?工地太忙根本没时间复习考试的救星来了 工地太忙根本没时间复习考试,这是很多正在备考 中职电工证 的建筑工友的真实写照。你不是不想考,而是真的没时间。但别担心,这期内容是 新乡初次报考人员… · 2026/11/11 0:00:52
昆明电工证培训价格值不值得考?老电工告诉你真相 昆明电工证培训价格值不值得考?老电工告诉你真相 之前考的证在外省能不能转过来?这个问题是很多在外地打工、换城市生活、或者是想在昆明发展的朋友最关心的。尤其是现在云南发展快,很多企业都在招持证上岗的电工,如果你手头有证但不在本地,那这个证是不… · 2026/11/11 0:00:52
特种电缆张工网上查询全攻略:外省证如何转过来 特种电缆张工网上查询全攻略:外省证如何转过来 之前考的证在外省能不能转过来?这是很多特种作业从业者最关心的问题,尤其是像特种电缆张工这类证书,直接关系到日常工作是否合规、能否顺利晋升。很多小伙伴因为证书归属地的问题,陷入职业发展的瓶颈,甚至… · 2026/11/11 0:00:52
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 20:19:29
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:22:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 17:00:47