首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MCP + GraphRAG + LLM:构建能"读懂关系"的智能体

MCP + GraphRAG + LLM:构建能"读懂关系"的智能体

原创
作者头像
闪 学it
发布2026-08-23 12:34:42
发布2026-08-23 12:34:42
450
举报

传统的 RAG(检索增强生成)系统通过向量相似度检索文档片段,但这种方式有一个致命缺陷:它只能找到"相似"的内容,无法理解内容之间的"关系"

比如,当你问"和 A 公司有业务往来的 B 公司最近有什么新闻",传统 RAG 只能分别检索 A 和 B 的新闻,却无法理解"业务往来"这个关系。GraphRAG 通过知识图谱来建模这种关系,而 MCP 则让 LLM 能像调用本地函数一样调用 GraphRAG 的检索能力


一、核心架构三件套

组件

职责

关键特性

GraphRAG

知识图谱构建与检索

向量检索 + 图关系遍历(如 NEXT_PAGE、RELATED_TO)

MCP Server

将 GraphRAG 能力封装为标准工具

暴露 search_docs、get_page 等工具给 LLM

LLM Agent

理解用户意图,决定调用哪些工具

通过 MCP 协议与 Server 通信,执行多步推理

数据流:用户提问 → LLM Agent 决策 → 通过 MCP 调用 GraphRAG 检索工具 → 获取带关系上下文的文档 → LLM 生成答案。


二、极简实战:搭建一个 GraphRAG MCP 智能体

步骤 1:准备 GraphRAG 数据库

使用开源的 graphrag_mcp 项目,它同时使用 Neo4j(图数据库)Qdrant(向量数据库) 实现混合检索 。

代码语言:javascript
复制
# 使用 Docker 启动 Neo4j + Qdrant
# docker-compose.yml 配置略(详见项目文档)

# 索引文档(以 Markdown 为例)
from graphrag_mcp.index_markdown import index_documents

# 将 Markdown 文件按"Page N"分块,建立三种图关系:
# - NEXT_PAGE:页面顺序流动
# - RELATED_TO:语义相似(余弦相似度阈值)
# - CONTAINS:文档归属
index_documents("./specs/")  # 指定文档目录

索引过程会自动:

  • 将文档按页面切块,合并字数过少的页面
  • 为每个块生成 384 维向量存入 Qdrant
  • 在 Neo4j 中建立 :Document:Page 节点及三种关系

步骤 2:启动 MCP Server

代码语言:javascript
复制
# server.py —— MCP Server 入口
from mcp.server.fastmcp import FastMCP
from graphrag_mcp.search import hybrid_search, get_page, get_document_info

mcp = FastMCP("GraphRAG Server")

# 暴露核心检索工具
@mcp.tool()
async def search_docs(query: str, top_k: int = 5) -> list:
    """混合检索:向量 + 图关系扩展"""
    return hybrid_search(query, top_k)

@mcp.tool()
async def get_page(doc_id: str, start_page: int, end_page: int = None) -> dict:
    """获取指定页面的内容及上下文(前后页 + 相关页)"""
    return get_page(doc_id, start_page, end_page)

@mcp.tool()
async def get_document_info(doc_id: str, max_pages: int = 20) -> dict:
    """获取文档目录和统计信息"""
    return get_document_info(doc_id, max_pages)

if __name__ == "__main__":
    mcp.run(transport="stdio")  # 标准输入输出,适配所有 MCP 客户端

步骤 3:在 LangGraph 中组装 Agent

代码语言:javascript
复制
# agent.py —— 通过 MCP 连接 GraphRAG
import asyncio
from langgraph_mcp import MCPClient
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI

async def main():
    # 1. 连接 MCP Server(子进程启动 server.py)
    async with MCPClient(server_script="python server.py") as client:
        
        # 2. 获取所有工具(自动发现 MCP Server 暴露的 Tools)
        tools = await client.get_tools()
        
        # 3. 创建 ReAct Agent
        agent = create_react_agent(
            model=ChatOpenAI(model="gpt-4o"),
            tools=tools,
            prompt="你是一个知识检索助手,使用 GraphRAG 工具回答用户问题。"
        )
        
        # 4. 运行查询
        result = await agent.ainvoke({
            "messages": [("user", "介绍 MCP 协议的核心概念")]
        })
        print(result["messages"][-1].content)

asyncio.run(main())

这里 Agent 的"思考"过程大致如下 :

代码语言:javascript
复制
用户提问 → Agent 思考:需要检索知识库 
→ 调用 search_docs("MCP 协议")
→ 获得带图关系扩展的上下文(包括前/后页和相关页)
→ 判断信息是否充分 
→ 若不够,调用 get_page 获取特定页面的详细上下文
→ 综合所有信息生成最终答案

三、为什么这个组合是"生产级"的?

能力

实现方式

全局语义检索

Qdrant 向量相似度搜索,召回语义相关页面

关系上下文扩展

通过 NEXT_PAGE 和 RELATED_TO 关系,自动获取相邻和相关页面

精准定位

get_page 工具按页码精准获取内容,支持范围查询

工具标准化

MCP 协议使 GraphRAG 能力可被任何支持 MCP 的 LLM 调用(Claude、GPT、Qwen 等)

可观测性

每个 MCP 工具调用可记录审计日志

学术研究也验证了这一组合的有效性:CERN 的 AccGPT 系统正是通过 GraphRAG 捕捉结构关系 + Agentic 工作流进行多步推理 + MCP 访问实时数据源,显著提升了科学知识检索的质量 。


四、进阶:Graph-of-Thought 与动态路由

更复杂的系统(如 LangGraph-Agentic-GraphRAG)引入了动态检索路径选择 :

代码语言:javascript
复制
根据查询复杂度动态选择检索路径:
- 跳数 ≤ 2 → 纯向量检索(快)
- 跳数 3–5 → 跨引用多跳遍历(中)
- 跳数 ≥ 6 → 深度图遍历(准)

并加入质量门控(Quality Gate):LLM 评估检索质量,低于阈值则触发回溯,选择其他检索路径或重新规划 。


总结

MCP + GraphRAG + LLM 的组合,本质上是将"知识图谱的结构化理解"与"LLM 的推理能力"通过标准化协议缝合在一起。它解决了传统 RAG 的两个核心痛点:

  1. 关系缺失:GraphRAG 让 LLM 能"看到"文档之间的连接
  2. 工具碎片化:MCP 让 LLM 能标准化地调用 GraphRAG 的全部能力

用一句话概括:向量检索决定"在哪里找",图关系决定"找到后怎么拓展",MCP 决定"LLM 如何调用这一切"。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、核心架构三件套
  • 二、极简实战:搭建一个 GraphRAG MCP 智能体
    • 步骤 1:准备 GraphRAG 数据库
    • 步骤 2:启动 MCP Server
    • 步骤 3:在 LangGraph 中组装 Agent
  • 三、为什么这个组合是"生产级"的?
  • 四、进阶:Graph-of-Thought 与动态路由
  • 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档