GraphRAG实战:用知识图谱让大模型理解深层逻辑,小白也能上手的收藏教程

文章介绍了传统RAG系统的局限性,并详细解析了微软GraphRAG解决方案,它通过构建知识图谱(实体为节点,关系为边)使大模型能理解信息间逻辑连接,而非简单检索文本。文章提供了完整的GraphRAG实现流程,包括使用Neo4j构建知识图,以及结合传统RAG与GraphRAG构建混合知识库系统,让大模型能更好地回答复杂问题。

一、传统RAG的天花板

如果你用过RAG系统,可能也遇过类似的问题:

  • 跨文档的信息无法连贯
  • 检索文档越多,回答质量反而下降
  • 融合多个数据源的知识特别困难

想象一下,用传统搜索方式在食谱书里找"炒鸡蛋"和"西红柿鸡蛋面"的做法,速度快得很。但如果你想知道为什么西红柿和鸡蛋搭配得这么完美,关键词搜索就显得无力了。

这正是传统语义检索方式的局限——它很擅长精确匹配,但不擅长理解隐藏在信息后面的深层逻辑。

二、GraphRAG出现了

微软推出了一套新方案来解决这个问题:GraphRAG(图检索增强生成)。核心思路很简单——与其把知识存成散乱的文本块,不如把它组织成一张知识图谱,其中实体是节点,实体之间的关系是边。

这样做有什么好处呢?

当大模型需要回答一个复杂问题时,它不再是盲目地找相似的文本段落,而是能够:

  • 看到实体之间的关系
  • 理解信息之间的逻辑连接
  • 跨多个社区综合回答

简单说,GraphRAG让大模型从"查字典"升级到了"读书"。

三、它是怎么工作的

GraphRAG的工作流程分为两个阶段:索引阶段和查询阶段。

1、索引阶段:构建知识的骨架

首先,系统会把源文档分成可管理的文本单元。然后大模型出手了,它会自动:

  • 识别实体和关系——从文本中提取出人、地点、公司等实体,以及它们之间的联系
  • 构建知识图——用节点代表实体,用边代表关系
  • 检测社区——使用Leiden算法找出紧密相关的实体集群
  • 生成摘要——为不同级别的社区生成分层摘要

这个过程中,有两个关键步骤特别值得关注:

图抽取的目标是从原始数据中识别有意义的信息,把它们组织成图的形式。图摘要则是把复杂的图结构简化,去掉冗余信息,突出关键内容。就像整理一个杂乱的书架,既要保留重要的书,又要删除过期的杂志。

2、查询阶段:精准找到答案

当用户提问时,系统会:

  • 判断问题的复杂程度,选择合适的社区级别
  • 在选定的社区中检索相关信息
  • 从多个相关社区综合生成答案
  • 最后整合成一个完整的回复

这比传统RAG的做法要聪明得多。传统方式是匹配用户查询和文本块的相似度,而GraphRAG是在理解的基础上进行推理。

四、怎样实现它

理论讲到这儿,你可能想知道——这东西怎么落地?

市面上有现成的工具可用。微软有官方的GraphRAG实现,但也有更灵活的方案。比如用Neo4j + LangChain的组合,就特别受欢迎。

Neo4j是一个图数据库,专门用来存储和查询图结构的数据。LangChain是一个大模型框架,能把各种工具串联起来。把它们组合使用,就能搭建一个强大的GraphRAG系统。

五、代码实战:一步步搭建你的GraphRAG

我把整个实现过程整理成了可运行的代码。假设我们要构建一个关于科技公司的知识图。

第一步:准备环境和数据

# 安装必要的库 # pip install langchain neo4j langchain-openai langchain-experimental from langchain_core.documents import Document # 准备你的数据(可以是公司信息文档) content = """ 小米科技有限责任公司是一家专注于研发和推出创新技术的公司。 小米推出了智能家居产品和5G技术。 华为技术有限公司与清华大学建立了深度合作。 华为参与了5G标准的制定。 小米与美团合作开发物流解决方案。 """ # 转化为Document对象 documents = [Document(page_content=content)] print(f"加载了{len(documents)}份文档")

第二步:连接Neo4j并创建知识图

from langchain_community.graphs import Neo4jGraph from langchain_experimental.graph_transformers import LLMGraphTransformer from langchain_openai import ChatOpenAI # 连接到Neo4j数据库(使用免费的Neo4j Aura) graph = Neo4jGraph( url="neo4j+s://your-db-uri", # 替换为你的Neo4j URI username="neo4j", password="your-password", # 替换为你的密码 database="neo4j" ) # 初始化LLM graph_llm = ChatOpenAI(temperature=0, model_name="gpt-4o-mini") # 创建图转换器,定义你要提取的实体和关系类型 graph_transformer = LLMGraphTransformer( llm=graph_llm, allowed_nodes=["公司", "产品", "技术", "教育机构", "合作伙伴"], allowed_relationships=["推出", "参与", "合作", "位于", "开发"], ) # 执行转换:从文档中提取实体和关系 graph_documents = graph_transformer.convert_to_graph_documents(documents) # 将图数据导入Neo4j graph.add_graph_documents(graph_documents) print(f"成功导入{len(graph_documents)}个图文档") print(f"提取的实体: {[node.id for node in graph_documents[0].nodes]}") print(f"提取的关系: {[(rel.source.id, rel.type, rel.target.id) for rel in graph_documents[0].relationships]}")

第三步:用GraphRAG查询知识图

from langchain.chains import GraphCypherQAChain llm = ChatOpenAI(model="gpt-4o-mini", temperature=0) # 创建Cypher查询链 cypher_chain = GraphCypherQAChain.from_llm( graph=graph, cypher_llm=llm, qa_llm=llm, validate_cypher=True, verbose=True, # 设置为True可以看到生成的Cypher查询过程 allow_dangerous_requests=True ) # 测试几个问题 queries = [ "小米科技有限责任公司推出了哪些创新技术?", "华为技术有限公司与哪些教育机构建立了合作?", "都有哪些公司在我的数据库中?" ] for query in queries: print(f"\n问题: {query}") response = cypher_chain.invoke(query) print(f"答案: {response['result']}") print("-" * 50)

六、更进一步:混合知识库系统

如果你想同时使用GraphRAG和传统RAG,我也准备了代码。这样可以兼得两种方法的优势。

第四步:建立向量数据库(传统RAG)

from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings from langchain_milvus import Milvus # 分割文本 text_splitter = RecursiveCharacterTextSplitter( chunk_size=250, chunk_overlap=30 ) splits = text_splitter.split_documents(documents) # 创建向量嵌入 embeddings = OpenAIEmbeddings(model="text-embedding-3-large") # 连接到Milvus向量数据库(使用免费的Zilliz云服务) vectorstore = Milvus.from_documents( documents=splits, collection_name="company_rag_milvus", embedding=embeddings, connection_args={ "uri": "https://your-milvus-uri", # 替换为你的Milvus URI "user": "your-username", "password": "your-password", } ) print(f"向量数据库已创建,包含{len(splits)}个文本块")

第五步:构建传统RAG代理

from langchain.prompts import PromptTemplate from langchain_core.output_parsers import StrOutputParser # 定义RAG提示词 prompt = PromptTemplate( template="""你是一个问答助手。 使用以下检索到的上下文来回答问题。如果你不知道答案,就说你不知道。 最多使用三句话,保持简洁: 问题: {question} 上下文: {context} 答案:""", input_variables=["question", "context"], ) # 构建RAG链 rag_chain = prompt | graph_llm | StrOutputParser() # 执行查询 question = "我的知识库中都有哪些公司信息?" retriever = vectorstore.as_retriever(search_kwargs={"k": 2}) # 检索相关文档 docs = retriever.invoke(question) # 生成回答 generation = rag_chain.invoke({ "context": "\n\n".join([doc.page_content for doc in docs]), "question": question }) print(f"RAG系统的回答: {generation}")

第六步:多代理系统——让两种方法协同工作

from langgraph.graph import StateGraph, MessagesState, START, END from langchain_core.messages import HumanMessage from typing import Literal from typing_extensions import TypedDict class AgentState(MessagesState): next: str class Router(TypedDict): """路由到不同的子代理""" next: Literal["graph_kg", "vec_kg", "FINISH"] # 图数据库代理 def graph_kg_agent(state: AgentState): messages = state["messages"][-1] response = cypher_chain.invoke(messages.content) return { "messages": [HumanMessage(content=response["result"], name="graph_kg")] } # 向量数据库代理 def vec_kg_agent(state: AgentState): messages = state["messages"][-1] retriever = vectorstore.as_retriever(search_kwargs={"k": 2}) docs = retriever.invoke(messages.content) generation = rag_chain.invoke({ "context": "\n\n".join([doc.page_content for doc in docs]), "question": messages.content }) return { "messages": [HumanMessage(content=generation, name="vec_kg")] } # 主管代理:判断用何种方式回答 def supervisor(state: AgentState): system_prompt = """你是一个任务主管,管理两个工作者: - graph_kg: 基于知识图,擅长回答全局、综合性问题 - vec_kg: 基于向量检索,擅长回答细节问题 根据用户问题,判断应该使用哪个工作者。""" messages = [{"role": "system", "content": system_prompt}] + state["messages"] response = graph_llm.with_structured_output(Router).invoke(messages) next_worker = response["next"] if next_worker == "FINISH": next_worker = END return {"next": next_worker} # 构建图 builder = StateGraph(AgentState) builder.add_node("supervisor", supervisor) builder.add_node("graph_kg", graph_kg_agent) builder.add_node("vec_kg", vec_kg_agent) # 设置工作流 builder.add_edge(START, "supervisor") for worker in ["graph_kg", "vec_kg"]: builder.add_edge(worker, "supervisor") builder.add_conditional_edges("supervisor", lambda state: state["next"]) # 编译并运行 multi_agent_graph = builder.compile() # 测试多代理系统 test_queries = [ "都有哪些公司在我的数据库中?", # 应该用graph_kg "小米推出了什么技术?" # 应该用graph_kg ] for query in test_queries: print(f"\n用户问题: {query}") for output in multi_agent_graph.stream( {"messages": query}, stream_mode="values" ): last_message = output["messages"][-1] print(f"{last_message.name}: {last_message.content}") print("-" * 50)

七、快速上手的步骤

第一步:准备Neo4j实例。可以用免费的Neo4j Aura云服务,注册即用,不需要本地部署。

第二步:用LLM把文档转换成图。这里可以自定义节点类型和关系类型,比如:

  • 节点:公司、产品、技术、市场
  • 关系:推出、合作、开发、位于

系统会自动提取文档中对应的实体和关系,构建知识图。

第三步:可视化和验证。登录Neo4j平台,就能看到生成的完整知识图。确保数据准确后,就可以用来回答问题了。

八、更进一步:混合知识库

这是我最近在做的一个有意思的尝试——同时使用GraphRAG和传统RAG。

想法是这样的:GraphRAG擅长回答宏观、全面的问题,比如"这个公司有哪些合作伙伴"。而传统RAG擅长处理细节问题,比如"某个产品的具体参数是什么"。

所以我搭建了一个多代理系统,用supervisor来判断用户问题的类型,然后路由到不同的知识库:

  • graph_kg:基于知识图的代理,处理全局性问题
  • vec_kg:基于向量的代理,处理细节问题

向量数据库我选择了云端的Milvus,这样避免了本地部署的麻烦。两个代理各司其职,大模型在它们之间充当主管,协调分工。

实际测试效果还不错。问"数据库里有哪些公司"时,graph_kg会遍历整个知识图给出完整列表。问"某个公司推出了哪些创新技术"时,它会基于实体之间的关系进行推理。

九、总结

从传统RAG到GraphRAG,这不仅是技术的升级,更是思维方式的转变。

我们不再只是被动地检索信息片段,而是主动构建知识的结构。大模型也不再只是做语言匹配,而是真正在理解和推理。

虽然GraphRAG还不是完美的(毕竟也依赖于大模型的抽取质量),但方向是清楚的——让AI系统更像人类思考一样,理解信息之间的关系,看到知识的全貌。

如果你的业务涉及复杂的知识库问答,值得尝试一下。而且现在有免费的云服务可以用,技术上的壁垒已经不那么高了。

把上面的代码复制下来,替换成你自己的API密钥和数据库URI,就可以跑起来了。

那么,如何系统的去学习大模型LLM?

作为一名从业五年的资深大模型算法工程师,我经常会收到一些评论和私信,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题啊,也不是三言两语啊就能讲明白的。

所以我综合了大模型的所有知识点,给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢,我就曾放空大脑,以一个大模型小白的角度去重新解析它,采用基础知识和实战项目相结合的教学方式,历时3个月,终于完成了这样的课程,让你真正体会到什么是每一秒都在疯狂输出知识点。

由于篇幅有限,⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》,扫码获取~

为什么要学习大模型?

我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。

👉大模型学习指南+路线汇总👈

我们这套大模型资料呢,会从基础篇、进阶篇和项目实战篇等三大方面来讲解。

👉①.基础篇👈

基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程,带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门大模型。

👉②.进阶篇👈

接下来是进阶篇,你将掌握RAG、Agent、Langchain、大模型微调和私有化部署,学习如何构建外挂知识库并和自己的企业相结合,学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。

👉③.实战篇👈

实战篇会手把手带着大家练习企业级的落地项目(已脱敏),比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等,从而帮助大家更好的应对大模型时代的挑战。

👉④.福利篇👈

最后呢,会给大家一个小福利,课程视频中的所有素材,有搭建AI开发环境资料包,还有学习计划表,几十上百G素材、电子书和课件等等,只要你能想到的素材,我这里几乎都有。我已经全部上传到CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

相信我,这套大模型系统教程将会是全网最齐全 最易懂的小白专用课!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1154429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【珍藏】Agent技术深度解析:能“自己想、自己干、自己复盘“的智能系统开发全攻略

文章详解了AI Agent与Workflow的区别,指出当问题复杂、长尾且多变,需跨系统查证并在对话中澄清/协商/决策时,应优先选择Agent框架。对比了AutoGPT、LangGraph、Dify、CrewAI和AutoGen五款主流框架的特点与适用场景,帮助开发者做出…

什么是 SPI?Java 高级扩展机制一文讲透(附 Spring Boot 实战 + 避坑指南)

视频看了几百小时还迷糊?关注我,几分钟让你秒懂!一、真实场景:为什么 JDBC 换数据库只需改配置?你肯定写过这样的代码:Connection conn DriverManager.getConnection("jdbc:mysql://...", "…

2026年AI视觉落地必看:MediaPipe人体姿态估计完整指南

2026年AI视觉落地必看:MediaPipe人体姿态估计完整指南 1. 引言:AI人体骨骼关键点检测的现实价值 随着人工智能在计算机视觉领域的持续突破,人体姿态估计(Human Pose Estimation)正从实验室走向真实世界的大规模应用。…

AI人脸隐私卫士离线版部署教程:断网环境下的隐私保护方案

AI人脸隐私卫士离线版部署教程:断网环境下的隐私保护方案 1. 引言 在数字化时代,图像和视频中的人脸信息泄露已成为不可忽视的隐私风险。无论是企业内部文档、政府敏感资料,还是个人社交分享,未经脱敏处理的照片可能带来身份盗用…

手部追踪系统实战:MediaPipe Hands+IoT集成

手部追踪系统实战:MediaPipe HandsIoT集成 1. 引言:AI 手势识别与追踪的工程价值 随着人机交互技术的不断演进,非接触式控制正成为智能设备、虚拟现实、工业自动化等领域的关键能力。传统输入方式(如鼠标、键盘、触摸屏&#xf…

Nodejs和vue的家庭成员亲子相册图片照片管理系统的设计与实现_

文章目录 系统设计目标技术架构核心功能模块安全与性能优化实现成果 --nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 系统设计目标 该系统旨在通过Node.js与Vue.js技术栈构建一个家庭亲子相册管理系统&#xff0c…

NX二次开发项目应用:批量处理脚本实战

NX二次开发实战:用Python脚本批量重命名部件并智能维护装配引用你有没有遇到过这样的场景?项目进入改型阶段,上百个零件需要统一加上版本号前缀;或是要将旧平台的数据迁移到新PLM系统,文件命名规范必须重构。手动一个个…

Nodejs和vue的家教信息匹配与预约系统__

文章目录系统概述技术架构核心功能创新点应用价值--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统概述 该系统基于Node.js与Vue.js构建,旨在实现家教信息的高效匹配与在线预约功能。后端采用Node.j…

MediaPipe Pose实战教程:WebUI上传图片自动生成骨架图

MediaPipe Pose实战教程:WebUI上传图片自动生成骨架图 1. 学习目标与前置知识 1.1 教程定位 本教程旨在带你从零开始,快速搭建一个基于 Google MediaPipe Pose 模型的本地化人体骨骼关键点检测系统。通过集成 WebUI 界面,用户只需上传一张…

MediaPipe Hands教程:手部关键点检测优化

MediaPipe Hands教程:手部关键点检测优化 1. 引言 1.1 AI 手势识别与追踪 在人机交互、虚拟现实、智能监控和远程教育等前沿领域,手势识别正逐渐成为下一代自然交互方式的核心技术。通过摄像头捕捉用户的手部动作,并实时解析其姿态与意图&…

企业级翻译解决方案:腾讯HY-MT1.5-1.8B实战应用案例分享

企业级翻译解决方案:腾讯HY-MT1.5-1.8B实战应用案例分享 1. 引言 在全球化业务拓展和技术融合的背景下,高质量、低延迟的机器翻译已成为企业出海、跨国协作和本地化服务的核心基础设施。传统云翻译API虽具备高精度优势,但面临网络依赖、数据…

零代码AI隐私保护:商务人士必备的自动打码工具

零代码AI隐私保护:商务人士必备的自动打码工具 1. 引言:为何商务场景需要智能打码? 在数字化办公日益普及的今天,商务人士频繁在会议纪要、项目汇报、客户沟通中使用现场拍摄的照片。然而,一张看似普通的合照可能暗藏…

Qwen3-VL-2B-Instruct功能全测评:视觉代理能力实测

Qwen3-VL-2B-Instruct功能全测评:视觉代理能力实测 TOC 1. 引言:为何关注Qwen3-VL-2B-Instruct? 随着多模态大模型的快速发展,视觉语言模型(VLM)已从“看图说话”迈向主动理解与交互式任务执行的新阶段。…

HunyuanVideo-Foley省钱攻略:中小团队高效利用算力方案

HunyuanVideo-Foley省钱攻略:中小团队高效利用算力方案 1. 背景与挑战:音效生成的算力困局 在视频内容爆发式增长的今天,高质量音效已成为提升作品沉浸感的关键要素。传统音效制作依赖专业音频工程师手动匹配环境音、动作音效和背景音乐&am…

AI人脸隐私卫士处理速度优化:高清大图毫秒级响应教程

AI人脸隐私卫士处理速度优化:高清大图毫秒级响应教程 1. 引言 1.1 业务场景描述 在社交媒体、公共数据发布和企业文档共享等场景中,图像中的人脸信息极易成为隐私泄露的源头。传统手动打码方式效率低下,难以应对批量图片处理需求。尤其在多…

通信原理篇---预畸变

📖 一句话概括 预畸变,就是“先把要求故意说歪,等机器自动掰直后,结果就刚刚好”。 🎯 一个生活中的比喻:订做弯曲的尺子 想象你要网购一把塑料直尺,但卖家说: “我们的机器做出来…

开箱即用!Qwen3-4B-Instruct-2507一键部署方案

开箱即用!Qwen3-4B-Instruct-2507一键部署方案 随着大模型在推理、编程、多语言理解等任务中的广泛应用,高效、稳定且易于部署的模型版本成为开发者关注的核心。通义千问团队最新推出的 Qwen3-4B-Instruct-2507 模型,在通用能力、长上下文支…

MediaPipe Pose应用:安防识别

MediaPipe Pose应用:安防识别 1. 引言:AI人体骨骼关键点检测的现实价值 随着智能安防系统的不断演进,传统基于人脸识别或运动检测的技术已难以满足复杂场景下的行为分析需求。如何从视频流中理解“人正在做什么”,成为新一代智能…

SPI 在实际项目中的应用:从日志框架到微服务插件化(附 Spring Boot 实战)

视频看了几百小时还迷糊?关注我,几分钟让你秒懂!一、为什么企业级项目离不开 SPI?在真实开发中,我们常遇到这些需求:日志系统要支持切换 Logback / Log4j2,但代码不能改支付模块要支持微信、支付…

AI手势识别与追踪趋势分析:无GPU也能高效运行的解决方案

AI手势识别与追踪趋势分析:无GPU也能高效运行的解决方案 随着人机交互技术的不断演进,AI 手势识别与追踪正逐步从实验室走向消费级应用。从智能穿戴设备到虚拟现实(VR)、增强现实(AR),再到智能…