当前位置: 首页 > article >正文

LangGraph状态机工程:构建复杂AI工作流的完整指南

传统RAG检索增强生成在处理简单的单跳问题时表现良好——“文章里提到了什么” “这个概念是什么意思”——但当问题涉及多个实体之间的关系、需要跨多个文档推理时传统RAG就显得力不从心。GraphRAGGraph-based Retrieval Augmented Generation通过将知识图谱与LLM结合为这类复杂查询提供了更强大的解决方案。本文从原理到落地系统介绍GraphRAG的工程实践。为什么需要GraphRAG先来看传统RAG的核心局限。场景一多跳推理问题“A公司的CEO在哪所大学的同学后来创立了什么公司“传统RAG单次向量检索找到A公司CEO毕业于X大学”找到B公司创始人也毕业于X大学”但无法建立两者之间的同学关系更无法回答B公司创始人创立了什么其他公司这个需要多步推理的问题。GraphRAG知识图谱中有[CEO]→[毕业于]→[X大学]←[就读于]←[B创始人]的路径通过图遍历可以直接找到相关信息。场景二实体关系聚合问题列出所有与GPT-4技术相关的论文作者以及他们各自的研究领域传统RAG会返回若干文档片段但无法系统地聚合所有相关作者的信息容易遗漏。GraphRAG以GPT-4为起点通过作者关系遍历所有相关节点系统化地返回完整信息。场景三社区摘要与宏观视角问题AI安全领域的主要研究机构有哪些它们之间有什么关联这类问题需要鸟瞰视角传统RAG难以提供跨文档的系统性总结而GraphRAG的社区检测功能天然支持这类全局性查询。## GraphRAG的核心架构GraphRAG尤其是Microsoft开源版本的处理流程分为两个阶段### 索引阶段离线构建原始文档 ↓ 文本分块文本片段 ↓ 实体提取LLM实体关系列表 ↓ 实体去重与合并知识图谱 ↓ 社区检测Leiden算法层次化社区结构 ↓ 社区摘要生成LLM社区摘要实体提取是索引阶段的核心。GraphRAG使用LLM从文本中识别实体人、组织、事件、概念等和关系pythonENTITY_EXTRACTION_PROMPT 从以下文本中提取所有实体和它们之间的关系。文本{input_text}输出格式JSON{ entities: [ {name: 实体名称, type: PERSON/ORGANIZATION/CONCEPT/EVENT, description: 简短描述} ], relationships: [ {source: 实体A, target: 实体B, type: 关系类型, description: 关系描述} ]}注意- 只提取文本中明确提到的实体和关系- 关系类型应简洁明了如WORKS_FOR, FOUNDED, COLLABORATED_WITH等- 每个实体的描述不超过50字### 查询阶段GraphRAG提供两种查询模式Local Search局部搜索适合具体问题- 先找到与查询最相关的实体- 然后提取这些实体的邻居子图- 将子图信息和原始文本片段一起送给LLM生成答案Global Search全局搜索适合宏观问题- 利用预计算的社区摘要- 在各社区摘要上并行生成答案- 聚合多个社区的答案生成最终回复## 使用Microsoft GraphRAG快速上手bash# 安装pip install graphrag# 初始化项目mkdir graphrag-democd graphrag-demopython -m graphrag.index --init --root .# 准备文档放入input目录mkdir -p input# 将你的.txt文件放入input目录# 配置编辑settings.yaml# 主要配置LLM API、嵌入模型、语言关键配置文件settings.yamlyamlencoding_model: cl100k_baseskip_workflows: []llm: api_key: ${GRAPHRAG_API_KEY} type: openai_chat model: gpt-4o-mini # 推荐用mini降低成本 model_supports_json: true max_tokens: 4000 temperature: 0embeddings: async_mode: threaded llm: api_key: ${GRAPHRAG_API_KEY} type: openai_embedding model: text-embedding-3-small # 成本效益最优chunks: size: 300 overlap: 100 group_by_columns: [id]input: type: file file_type: text base_dir: input# 实体提取配置entity_extraction: max_gleanings: 1 # 提取轮次1轮已足够大多数场景# 社区报告配置community_reports: max_length: 2000 max_input_length: 8000构建索引bash# 构建知识图谱索引耗时操作取决于文档量和模型速度python -m graphrag.index --root .查询pythonimport asynciofrom graphrag.query.context_builder.entity_extraction import EntityVectorStoreKeyfrom graphrag.query.indexer_adapters import ( read_indexer_entities, read_indexer_relationships, read_indexer_reports, read_indexer_text_units)from graphrag.query.structured_search.local_search.mixed_context import LocalSearchMixedContextfrom graphrag.query.structured_search.local_search.search import LocalSearchfrom graphrag.query.llm.oai.chat_openai import ChatOpenAIfrom graphrag.query.llm.oai.embedding import OpenAIEmbedding# 加载索引数据INPUT_DIR ./output/artifactsCOMMUNITY_LEVEL 2 # 社区层级越高越宏观entities read_indexer_entities(INPUT_DIR, COMMUNITY_LEVEL)relationships read_indexer_relationships(INPUT_DIR)text_units read_indexer_text_units(INPUT_DIR)reports read_indexer_reports(INPUT_DIR, COMMUNITY_LEVEL)# 初始化本地搜索llm ChatOpenAI(api_keyyour_api_key, modelgpt-4o)embedding OpenAIEmbedding(api_keyyour_api_key, modeltext-embedding-3-small)context_builder LocalSearchMixedContext( entitiesentities, relationshipsrelationships, text_unitstext_units, community_reportsreports, entity_text_embeddingsentity_embeddings, text_embedderembedding)search_engine LocalSearch( llmllm, context_buildercontext_builder, token_encodertoken_encoder, response_typesingle paragraph)# 执行查询result await search_engine.asearch(LLM在医疗诊断中的应用案例有哪些)print(result.response)## 自建轻量GraphRAG方案Microsoft GraphRAG功能完整但成本较高构建大型文档集可能消耗数百美元API费用。对于中小规模项目可以考虑轻量级自建方案pythonfrom neo4j import GraphDatabasefrom sentence_transformers import SentenceTransformerimport numpy as npclass LightweightGraphRAG: 基于Neo4j的轻量级GraphRAG实现 def __init__(self, neo4j_uri: str, username: str, password: str): self.driver GraphDatabase.driver(neo4j_uri, auth(username, password)) self.embedder SentenceTransformer(BAAI/bge-m3) def add_entity(self, name: str, entity_type: str, description: str): 添加实体到知识图谱 embedding self.embedder.encode(description).tolist() with self.driver.session() as session: session.run( MERGE (e:Entity {name: $name}) SET e.type $type, e.description $description, e.embedding $embedding , namename, typeentity_type, descriptiondescription, embeddingembedding) def add_relationship(self, source: str, target: str, rel_type: str, description: str ): 添加实体间关系 with self.driver.session() as session: session.run( MATCH (a:Entity {name: $source}) MATCH (b:Entity {name: $target}) MERGE (a)-[r:RELATES_TO {type: $rel_type}]-(b) SET r.description $description , sourcesource, targettarget, rel_typerel_type, descriptiondescription) def local_search(self, query: str, depth: int 2) - str: 局部搜索找到相关实体及其邻居 query_embedding self.embedder.encode(query).tolist() # 使用向量相似度找到入口实体 with self.driver.session() as session: # Neo4j 5.x支持向量索引 result session.run( CALL db.index.vector.queryNodes(entity-embeddings, 5, $embedding) YIELD node, score WHERE score 0.7 RETURN node.name AS entity, node.description AS description, score ORDER BY score DESC , embeddingquery_embedding) seed_entities [r[entity] for r in result] if not seed_entities: return 未找到相关实体 # 从种子实体出发获取子图 context_parts [] for entity in seed_entities[:3]: with self.driver.session() as session: subgraph session.run(f MATCH path (e:Entity {{name: $entity}})-[r*1..{depth}]-(neighbor) RETURN e, r, neighbor LIMIT 50 , entityentity) for record in subgraph: context_parts.append( f{record[e][name]} --[{record[r][-1][type]}]-- {record[neighbor][name]}: f{record[neighbor].get(description, )} ) return \n.join(context_parts)## GraphRAG vs 传统RAG选型决策矩阵| 维度 | 传统RAG | GraphRAG ||------|---------|---------|| 适合查询类型 | 单跳、事实查询 | 多跳、关系推理、全局摘要 || 构建成本 | 低 | 中-高LLM提取 || 查询延迟 | 低~200ms | 中-高~1-3s || 知识更新 | 容易 | 需重建图或增量更新 || 可解释性 | 差 | 好推理路径可见 || 适合规模 | 大规模文档 | 中等规模、高质量文档 |## 实际落地建议混合策略不必非此即彼。可以用传统RAG处理简单查询遇到复杂关系查询时自动切换到GraphRAG。成本控制- 使用GPT-4o-mini而非GPT-4进行实体提取成本降低90%- 对重复的实体描述进行去重减少LLM调用次数- 设置合理的max_gleanings1次通常足够增量更新生产环境中文档会不断增加设计增量更新机制避免每次全量重建- 新文档提取实体后合并到现有图中- 修改文档删除旧实体/关系重新提取- 定期全量重建如每周确保图的质量## 总结GraphRAG不是传统RAG的替代品而是针对特定场景的强化方案。当你的应用需要处理复杂关系推理、全局知识摘要或者需要在大型知识库中进行多跳查询时GraphRAG的投入是值得的。理解两者的边界根据业务需求选择合适的方案才是2026年RAG工程师的核心竞争力。

相关文章:

LangGraph状态机工程:构建复杂AI工作流的完整指南

传统RAG(检索增强生成)在处理简单的"单跳"问题时表现良好——“文章里提到了什么” “这个概念是什么意思”——但当问题涉及多个实体之间的关系、需要跨多个文档推理时,传统RAG就显得力不从心。GraphRAG(Graph-based R…...

AI圈内火热的Agent、MCP、Skill、CLI是啥?用装修房子讲透,看完秒懂

本文用装修房子的比喻,详细解释了AI领域的四个核心概念:Agent如同会自主规划任务的私人助理;MCP是AI与外部工具数据的统一接口,类似USB-C;Skill是指导AI按标准操作执行的手册;CLI则是不依赖图形界面的命令行…...

超维计算(HDC)原理与ScalableHD架构优化实践

1. 超维计算(HDC)基础解析超维计算(Hyperdimensional Computing, HDC)是一种受大脑信息处理机制启发的计算范式,其核心思想是用高维随机向量(通常称为超向量或HV)来表示和处理信息。与传统神经网…...

Unity事件系统实战:用事件驱动重构你的金币拾取逻辑(告别硬编码)

Unity事件系统实战:用事件驱动重构你的金币拾取逻辑(告别硬编码)在游戏开发中,我们经常会遇到这样的场景:玩家拾取金币后,需要更新UI、播放音效、解锁成就、保存数据……如果把这些逻辑全部写在金币拾取的代…...

Spring Security OAuth2 /oauth/token 401原因与Content-Type规范

1. 问题现场还原:一个看似简单却让开发停摆两小时的/oauth/token请求刚接手一个老项目做安全加固,第一件事就是验证OAuth2密码模式的token获取流程。我照着文档写了一条curl命令:curl -X POST http://localhost:8080/oauth/token回车执行&…...

FairyGUI Unity鼠标悬停与点击对象获取原理与实战

1. 这不是“加个OnMouseEnter就能用”的事:FairyGUI在Unity中处理鼠标交互的真实困境很多人第一次在Unity里集成FairyGUI,想实现“鼠标悬停显示提示”或“点击高亮当前按钮”,下意识就去翻Unity的MonoBehaviour文档,找OnMouseEnte…...

终极键盘重映射解决方案:3分钟实现职业级游戏操作精度

终极键盘重映射解决方案:3分钟实现职业级游戏操作精度 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在激烈的游戏对抗中,你是否曾因键盘按键冲突而错失关键操作?当同时按下…...

CPU架构启发的智能仓储布局优化实践

1. 仓库布局优化的核心挑战与创新机遇在物流仓储领域,拣货环节通常占据运营成本的55%-65%,而其中约50%的时间消耗在无效行走路径上。传统矩形仓库布局虽然易于规划和施工,但其正交的通道设计导致拣货员需要频繁进行90度转向,这种&…...

基于随机森林的低成本传感器机器学习校准实践指南

1. 项目概述:当低成本传感器遇上机器学习校准在物联网和智能感知系统铺天盖地的今天,低成本传感器几乎无处不在。从监测办公室的空气质量,到追踪城市街道的噪音污染,再到农业大棚里的温湿度控制,这些价格亲民的“小眼睛…...

机器学习驱动储氢材料发现:从特征工程到DFT/MD验证的完整指南

1. 项目概述与核心思路氢能被视为未来清洁能源体系的关键一环,但如何安全、高效、经济地储存氢气,一直是制约其大规模应用的瓶颈。在众多储氢技术路线中,固态储氢,特别是基于金属氢化物的储氢材料,因其高体积储氢密度和…...

论文润色深度测评:GPT-5.5 + Gemini 3.1 Pro:教你学会1+1>2的论文润色方法

各位同仁好,我是七哥。一个在高校里从事人工智能相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude等大模型学术实操相关问题,多多交流,相互成就,共同进步。 2026年的科研圈,AI工具的选择已经从有没有变成了强不强,七哥评测了GPT…...

告别硬编码!在UE5.1里用蓝图动态配置MySQL连接参数(控件蓝图实战)

动态配置MySQL连接:UE5.1控件蓝图的工程化实践在游戏开发中,数据库连接往往是项目架构中不可或缺的一环。传统硬编码方式虽然简单直接,却带来了维护困难、安全性差、灵活性低等一系列问题。本文将深入探讨如何在UE5.1中构建一个完全动态化的M…...

破解材料数据荒:合成数据与随机森林预测聚合物阻燃性能

1. 项目概述与核心挑战在材料研发领域,尤其是涉及公共安全的聚合物阻燃性研究,传统实验方法正面临巨大瓶颈。想象一下,你是一位材料工程师,需要设计一种用于高铁内饰或高层建筑电缆护套的新型聚合物,其阻燃性能必须满足…...

口碑最好的AI论文写作工具推荐(从文献整理到论文成稿全流程)适合全体毕业生

还在为选题方向纠结、文献资料翻找耗时、开题报告无从下手、论文框架反复修改、查重率居高不下、降重过程痛苦不堪,甚至答辩PPT还要临时抱佛脚?作为学术新手、应届生或本科硕士毕业生,面对论文写作的重重关卡,流程复杂、操作门槛高…...

AI率总超标?2026年AI写作辅助网站排行榜权威发布,轻松定稿不是梦!

写论文效率低、熬夜赶稿、查重不过关?别慌!2026 年最新 AI 论文写作工具合集来了,覆盖选题、大纲、初稿、润色、降重、格式、文献引用全流程,帮你精准匹配最适合的学术助手,彻底告别论文内耗!🏆…...

差分隐私GDP机制紧密度量化:从隐私剖面到∆度量的实践指南

1. 差分隐私GDP机制:从理论到实践,如何量化隐私保护紧密度在差分隐私(Differential Privacy, DP)的实际部署中,尤其是在机器学习的隐私保护训练(如DP-SGD)场景里,我们常常面临一个核…...

PCL 基于强度的双边滤波【2026最新版】

目录 一、算法原理 1、计算步骤 2、算法源码 3、函数解析 4、参考文献 二、代码实现 三、结果展示 四、滤波后未发生变化的原因 五、解决办法 六、结果展示 七、相关链接 本文由CSDN点云侠原创,博客长期更新,本文最近一次更新时间为:2026年5月24日。 一、算法原理 1、计算…...

谷氨酸发酵过程的软测量建模【附模型】

✨ 长期致力于软测量、谷氨酸发酵、动力学模型、支持向量机、高斯过程、变量选择、异常状态研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)多阶段高斯…...

PCL 法向量夹角剔除错误匹配点对【2026最新版】

目录 一、 算法简介 1、主要函数 2、参考文献 二、 代码实现 三、 结果展示 四、 参考链接 博客长期更新,本文最新更新时间为:2026年5月24日。代码在PCL1.15.1中测试通过 一、 算法简介 在三维点云配准中,对应点(correspondence)的准确性直接决定了配准算法的精度和鲁棒性…...

在Hermes Agent项目中接入Taotoken作为自定义模型供应商

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Hermes Agent项目中接入Taotoken作为自定义模型供应商 基础教程类,针对使用Hermes Agent框架的开发者,详…...

巨量投放总结

巨量商务管理平台 : https://business.oceanengine.com 巨量广告投放平台: https://ad.oceanengine.com 商务管理平台 账户 广告组 计划 广告投放平台 层级关系: 广告组 -> 计划 -> 创意 对应FB: 系列 - > 广告组 -> 广告...

如何快速掌握MoveIt2:面向ROS 2开发者的工业机器人运动规划完整指南

如何快速掌握MoveIt2:面向ROS 2开发者的工业机器人运动规划完整指南 【免费下载链接】moveit2 :robot: MoveIt for ROS 2 项目地址: https://gitcode.com/gh_mirrors/mo/moveit2 想要为你的机器人实现智能运动规划吗?MoveIt2作为ROS 2生态中最强大…...

flameshow性能优化技巧:如何快速定位Go程序中的CPU热点

flameshow性能优化技巧:如何快速定位Go程序中的CPU热点 【免费下载链接】flameshow A terminal Flamegraph viewer. 项目地址: https://gitcode.com/gh_mirrors/fl/flameshow 🔥 想要快速定位Go程序中的性能瓶颈吗?flameshow是一个强大…...

MeloTTS实战:多语言语音合成的高效解决方案

MeloTTS实战:多语言语音合成的高效解决方案 【免费下载链接】MeloTTS High-quality multi-lingual text-to-speech library by MyShell.ai. Support English, Spanish, French, Chinese, Japanese and Korean. 项目地址: https://gitcode.com/GitHub_Trending/me/…...

Office RibbonX Editor:简单三步打造你的专属Office界面

Office RibbonX Editor:简单三步打造你的专属Office界面 【免费下载链接】office-ribbonx-editor An overhauled fork of the original Custom UI Editor for Microsoft Office, built with WPF 项目地址: https://gitcode.com/gh_mirrors/of/office-ribbonx-edit…...

终极指南:5步快速掌握免费的3D点云标注工具labelCloud

终极指南:5步快速掌握免费的3D点云标注工具labelCloud 【免费下载链接】labelCloud A lightweight tool for labeling 3D bounding boxes in point clouds. 项目地址: https://gitcode.com/gh_mirrors/la/labelCloud 想要为自动驾驶、机器人视觉或3D目标检测…...

MobX社区资源大全:10个必备工具、插件和扩展库推荐 [特殊字符]

MobX社区资源大全:10个必备工具、插件和扩展库推荐 🚀 【免费下载链接】MobX-Docs-CN MobX 中文文档 项目地址: https://gitcode.com/gh_mirrors/mo/MobX-Docs-CN MobX作为一个简单、可扩展的状态管理库,已经成为React开发者不可或缺的…...

CausalVLR基准测试报告:在IU X-Ray和MIMIC-CXR数据集上的性能分析

CausalVLR基准测试报告:在IU X-Ray和MIMIC-CXR数据集上的性能分析 【免费下载链接】CausalVLR CausalVLR: A Toolbox and Benchmark for Vision-Language Causal Reasoning (多模态因果推理开源框架) 项目地址: https://gitcode.com/gh_mirrors/ca/CausalVLR …...

企业内统一API网关与Taotoken聚合平台对接方案

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业内统一API网关与Taotoken聚合平台对接方案 在推进AI应用落地的过程中,许多中大型企业面临一个共同挑战&#xff1a…...

探索Windows 10上的Android世界:揭秘WSA-Windows-10项目的3个技术突破

探索Windows 10上的Android世界:揭秘WSA-Windows-10项目的3个技术突破 【免费下载链接】WSA-Windows-10 This is a backport of Windows Subsystem for Android to Windows 10. 项目地址: https://gitcode.com/gh_mirrors/ws/WSA-Windows-10 想象一下&#…...