Microsoft Agent Framework + Neo4j 集成
Microsoft Agent Framework 是微软推出的开源 SDK,用于在 .NET 和 Python 中构建 AI Agent。Agent 可以通过标准接口调用外部工具,无论是本地函数、REST API 还是 MCP 服务器。它们可以形成工作流,通过多个专业 Agent 协作完成复杂任务。该框架支持本地开发,并可与 Microsoft Foundry 集成,实现生产环境部署、追踪和指标监控。
其架构在数据访问方面保持了灵活性。自定义工具可以直接查询数据库;MCP 服务器通过标准协议公开数据能力;上下文提供程序(Context providers)会在每次 LLM 调用前自动注入信息。你可以根据自己的限制条件选择最适合的模式。
Neo4j 集成模式
将 Microsoft Agent Framework 的 Agent 连接到 Neo4j 有四种模式。每种模式都反映了关于数据库逻辑存放位置以及 Agent 直接控制程度的不同理念。
直接 SDK 集成
使用官方 Neo4j 驱动程序编写自定义工具。Agent 调用你的函数,你的代码执行 Cypher,你可以精确控制返回的内容。
这种模式让你对 LLM 看到的内容拥有最大程度的控制权。你可以在数据消耗 token 之前过滤结果、重塑数据、通过自定义逻辑处理错误并汇总大量结果集。其代价是维护成本:你的集成代码与 Neo4j 驱动程序版本以及 Agent 的工具接口紧密耦合。
MCP 服务器集成
将 Neo4j MCP 服务器作为独立进程运行。Agent 像连接任何其他 MCP 工具提供程序一样连接到它。服务器通过标准协议公开诸如 read_cypher 和 get_schema 之类的功能。
这种模式将数据访问与 Agent 逻辑分离开来。无论你的 Agent 是在开发阶段本地运行,还是在 Azure 上进行生产部署,同样的 MCP 服务器配置均可工作。更换 LLM 或更改 Agent 框架时,数据层保持不变。其代价是运营成本:你需要与 Agent 一起运行并维护 MCP 服务器。
演示:图数据库侦探
Microsoft AI MVP Jose Luis Latorre 构建了一个通过 MCP 连接到 Neo4j Aura 的调查 Agent。该图谱包含了 POLE 数据集:来自犯罪调查的人员、物体、地点和事件。
该 Agent 采用“黄金时代侦探”的人设。当用户询问嫌疑人与犯罪现场之间的联系时,Agent 会调用 MCP 服务器的 Cypher 工具来遍历图谱。MCP 服务器执行查询并返回结果,随后 Agent 以角色口吻叙述调查结果,将图谱遍历过程转化为侦探独白。这种人设选择是有意为之,它展示了在使用 MCP 时,Agent 的个性和数据访问是如何保持清晰分离的。
来源: 图数据库侦探
HTTP 查询 API
将 Neo4j 视为一个 REST 端点。在 POST 请求正文中发送 Cypher 语句,并接收 JSON 响应。无需安装驱动程序。
这种模式适用于无法安装二进制依赖的受限环境,例如无服务器函数(Serverless)、受限容器或基于浏览器的 Agent。其延迟高于 Bolt 协议,且 JSON 响应可能较为冗长,但在轻量级用例中,这种简单性极具优势。
上下文提供程序集成
上下文提供程序(Context providers)在每次 LLM 调用之前向对话中注入信息。Agent 无需显式请求数据——提供程序会自动搜索 Neo4j,通过图谱遍历丰富结果,并将上下文合并到提示词中。
Neo4j 上下文提供程序基于 neo4j-graphrag-python 库构建,该库提供了用于语义相似度搜索的 VectorRetriever、用于向量与全文混合搜索的 HybridRetriever,以及先进行向量搜索再进行图谱遍历的 VectorCypherRetriever。上下文提供程序封装了这些检索器,并将它们挂载到 Microsoft Agent Framework 的生命周期中。
配置非常简单。你只需指定索引名称、选择搜索类型,并根据需要提供用于图谱扩充的 Cypher 检索查询。
from neo4j_context_provider import Neo4jContextProvider
provider = Neo4jContextProvider(
uri="neo4j+s://your-instance.databases.neo4j.io",
username="neo4j",
password="your-password",
index_name="maintenance_events",
index_type="fulltext", # or "vector"
top_k=5,
retrieval_query="""
MATCH (node)<-[:HAS_EVENT]-(comp:Component)
<-[:HAS_COMPONENT]-(sys:System)
<-[:HAS_SYSTEM]-(aircraft:Aircraft)
RETURN node.fault AS fault,
node.corrective_action AS corrective_action,
aircraft.model AS aircraft_model,
sys.name AS system_name
"""
)
index_type 参数决定了提供程序内部使用的检索器。将其设置为 "fulltext" 可进行基于关键词的 BM25 匹配,或设置为 "vector" 进行语义相似度搜索。retrieval_query 在初始搜索后运行,从匹配的节点出发遍历图谱,以提取相关上下文。
演示:飞机维护与飞行操作
Neo4j 上下文提供程序演示将维护事件和航班延误建模为知识图谱。当用户询问特定机型的复发性故障时,提供程序的 invoking() 方法会在 LLM 处理消息之前触发。
提供程序使用用户的问题对维护索引进行全文搜索。结果以维护事件节点的形式返回。随后,配置的检索查询从这些事件出发,通过组件和系统关系遍历到飞机节点,提取故障代码、纠正措施和受影响的系统。这些丰富的上下文会自动合并到提示词中。
航班延误 Agent 的工作原理类似。关于延误模式的问题会触发对航班数据的搜索,图谱遍历会从延误节点扩展到航班、机场和航线。LLM 在 Agent 无需进行任何显式工具调用的情况下,就能接收到关联的数据视图。
选择你的集成模式
如果你希望快速构建具备图谱感知能力的 Agent,请从上下文提供程序开始。配置一个索引,指向你的 Neo4j 实例,框架会处理其余工作。当你需要超出初始搜索结果的图谱遍历能力时,再添加检索查询。
当你需要精确控制 LLM 看到的内容时,请转向直接 SDK 集成。复杂的业务逻辑、token 预算限制或自定义结果格式化都适用此模式。该工具可以在图谱结果到达提示词之前进行过滤、汇总和结构化处理。
当你希望在多个 Agent 或框架之间复用同一个数据层时,MCP 是合理的选择。如果你预计会更换 LLM 或在不同环境中运行 Agent,MCP 提供的解耦优势会显现出来。注意保持工具数量合理,以避免臃肿的系统提示词。
HTTP API 适用于无法安装驱动程序的受限环境——如无服务器函数、沙箱容器或基于浏览器的 Agent。
每种模式都假设你已经拥有值得查询的图谱。Agent 集成是“最后一公里”。在此之前,需要完成数据建模、关系设计和索引配置。
资源
社区演示
-
图数据库侦探 — 使用 POLE 数据集进行犯罪调查
-
GraphRAG 合同 Agent — 合同合规性分析
-
飞机维护与航班延误 — 上下文提供程序演示