微信扫码
添加专属顾问
这篇文章详细介绍了如何使用 Neo4j 图数据库和 Milvus(https://zilliz.com/what-is-milvus) 向量数据库构建一个 GraphRAG Agent。该智能体结合了 图数据库和向量搜索的强大功能,能够为用户查询提供准确和相关的答案。在这个示例中,我们将使用 LangGraph、Llama 3.1 8B 结合 Ollama 和 GPT-4o。
传统的检索增强生成(RAG)系统仅依赖向量数据库来检索相关文档。我们的方法更进一步,通过结合 Neo4j (https://neo4j.com/) 来捕捉实体和概念之间的关系,提供更细致的信息理解。通过结合这两种技术,我们希望创建一个更强大和信息丰富的 RAG 系统。
我们的智能体遵循三个关键概念:路由、后备机制和自我校正。这些原则通过一系列 LangGraph 组件实现:
• 路由 – 一个专门的路由机制决定是使用向量数据库、知识图谱,还是两者的组合,具体取决于查询。
• 后备 – 在初次检索不足的情况下,智能体会使用 Tavily 进行网络搜索。
• 自我校正 – 智能体评估自身的回答并尝试纠正幻觉或不准确之处。
我们还有其他组件,例如:
• 检索 – 我们使用 Milvus,这是一款开源且高性能的向量数据库,根据与用户查询的语义相似度存储和检索文档块。
• 图增强 – 使用 Neo4j 从检索的文档中构建知识图,丰富包含关系和实体的上下文。
• LLMs 集成 – 使用本地 LLM Llama 3.1 8B 生成答案并评估检索信息的相关性和准确性,而 GPT-4o 用于生成 Neo4j 使用的查询语言 Cypher。
我们 GraphRAG Agent 的架构可以被视为一个包含多个互联节点的工作流:
• 问题路由 – 智能体首先分析问题,以确定最佳的检索策略(向量搜索、图搜索或两者)。
• 检索 – 根据路由决定,从 Milvus 中检索相关文档,或从 Neo4j 图中提取信息。
• 生成 – LLM 使用检索到的上下文生成答案。
• 评估 – 智能体评估生成的答案的相关性、准确性和潜在的幻觉。
• 改进(如有必要)– 如果答案不令人满意,智能体可以改进其搜索或尝试纠正错误。
为了展示我们的 LLM 智能体的能力,让我们看看两个不同的组件:图生成和复合智能体。
虽然完整代码在博文底部可用,但这些代码片段将提供更好的理解这些智能体在 LangChain 框架中如何工作。
该组件旨在通过利用 Neo4j 的能力来改善问答过程。它通过利用嵌入在 Neo4j 图数据库中的知识回答问题。其工作原理如下:
1. GraphCypherQAChain – 允许 LLM 与 Neo4j 图数据库交互。它以两种方式使用 LLM:
• cypher_llm – 该 LLM 实例负责生成 Cypher 查询,以根据用户的问题从图中提取相关信息。
• 验证 – 确保 Cypher 查询有效,以确保它们在语法上是正确的。
1. 上下文检索 – 验证后的查询在 Neo4j 图上执行,以检索必要的上下文。
2. 答案生成 – 语言模型使用检索到的上下文生成用户问题的答案。
llm = ChatOllama(model=local_llm, temperature=0)
# 链
graph_rag_chain =GraphCypherQAChain.from_llm(
cypher_llm=llm,
qa_llm=llm,
validate_cypher=True,
graph=graph,
verbose=True,
return_intermediate_steps=True,
return_direct=True,
)
# 运行
question ="agent memory"
generation = graph_rag_chain.invoke({"query": question})该组件使 RAG 系统能够利用 Neo4j,从而提供更全面和准确的答案。
魔法发生在这里:我们的智能体能够结合来自 Milvus 和 Neo4j 的结果,从而更好地理解信息,提供更准确和细致的答案。其工作原理如下:
1. 提示 – 我们定义一个提示,指示 LLM 使用来自 Milvus 和 Neo4j 的上下文回答问题。
2. 检索 – 智能体从 Milvus(使用向量搜索)和 Neo4j(使用图生成)中检索相关信息。
3. 答案生成 – Llama 3.1 8B 处理提示并生成简洁答案,利用来自向量和图数据库的综合知识。
cypher_prompt = PromptTemplate(
template="""你是 Neo4j Cypher 查询生成的专家。
使用以下架构生成一个 Cypher 查询,以回答给定问题。
通过使用不区分大小写的匹配和适当的部分字符串匹配,使查询灵活。
专注于搜索论文标题,因为它们包含最相关的信息。
架构:
{schema}
问题:{question}
Cypher 查询:""",
input_variables=["schema","question"],
)
# QA 提示
qa_prompt =PromptTemplate(
template="""你是一个问答任务的助手。
使用以下 Cypher 查询结果回答问题。如果你不知道答案,就说你不知道。
最多使用三句话,保持答案简洁。如果没有主题信息可用,关注论文标题。
问题:{question}
Cypher 查询:{query}
查询结果:{context}
答案:""",
input_variables=["question","query","context"],
)
llm =ChatOpenAI(model="gpt-4o", temperature=0)
# 链
graph_rag_chain =GraphCypherQAChain.from
_llm(
cypher_llm=llm,
qa_llm=llm,
validate_cypher=True,
graph=graph,
verbose=True,
return_intermediate_steps=True,
return_direct=True,
cypher_prompt=cypher_prompt,
qa_prompt=qa_prompt,
)让我们看看我们的搜索结果,结合图和向量数据库的优势,以增强我们对研究论文的发现。
我们首先使用 Neo4j 进行图搜索:
question = "什么论文讨论多智能体?"
generation = graph_rag_chain.invoke({"query": question})
print(generation)> 进入新的 GraphCypherQAChain 链...
生成的 Cypher:
cypher
MATCH (p:Paper)
WHERE toLower(p.title) CONTAINS toLower("多智能体")
RETURN p.title AS PaperTitle, p.summary AS Summary, p.url AS URL
> Finished chain.
{'query': '什么论文讨论多智能体?', 'result': [{'PaperTitle': '协作多智能体、多推理路径(CoMM)提示框架', 'Summary': '在这项工作中,我们旨在推动 LLM 的推理能力的上限,提出一个协作多智能体、多推理路径(CoMM)提示框架。具体来说,我们提示 LLM 在问题解决团队中扮演不同角色,并鼓励不同角色的代理协同解决目标任务。我们发现为不同角色应用不同的推理路径是一种有效策略,可以在多智能体场景中实现少样本提示方法。实证结果证明了所提方法在两个大学级科学问题上的有效性。我们的进一步分析显示提示 LLM 扮演不同角色或专家是必要的。', 'URL': 'https://github.com/amazon-science/comm-prompt'}]}
图搜索在查找关系和元数据方面表现出色。它可以快速识别基于标题、作者或预定义类别的论文,提供数据的结构化视图。
接下来,我们转向我们的向量搜索以获得不同的视角:
question = "什么论文讨论多智能体?"
# 获取向量 + 图答案
docs = retriever.invoke(question)
vector_context = rag_chain.invoke({"context": docs, "question": question})> 该论文讨论了“适应性对话团队构建为语言模型代理”并讨论多智能体。它提出了一种新的适应性团队构建范例,为构建 LLM 代理团队以有效解决复杂任务提供灵活的解决方案。该方法称为 Captain Agent,动态形成和管理每个任务解决过程中的团队,利用嵌套的群体对话和反思,以确保多样化的专业知识并防止刻板输出。
向量搜索在理解上下文和语义相似度方面表现优异。它能够发现与查询在概念上相关的论文,即使它们没有明确包含搜索词。
最后,我们结合这两种搜索方法:
这是我们 RAG Agent 的重要部分,使得能够同时使用向量和图数据库。
composite_chain = prompt | llm | StrOutputParser()
answer = composite_chain.invoke({"question": question, "context": vector_context, "graph_context": graph_context})
print(answer)> 论文“协作多智能体、多推理路径(CoMM)提示框架”讨论了多智能体。它提出了一种框架,提示 LLM 在问题解决团队中扮演不同角色,并鼓励不同角色的代理协同解决目标任务。该论文呈现了在两个大学级科学问题上的实证结果,证明了所提方法的有效性。
通过集成图搜索和向量搜索,我们利用了两种方法的优势。图搜索提供精确度并导航结构化关系,而向量搜索通过语义理解增加深度。
这种组合方法提供了几个优势:
1. 提高召回率:找到更多相关的答案和上下文信息。
2. 增强准确性:通过图数据库确保检索的答案在结构上是正确的,提供可靠的信息源。
3. 丰富理解:结合向量搜索的语义能力,能够更好地理解问题的含义和上下文,从而提供更相关的答案。
GraphRAG Agent 结合了 Neo4j 和 Milvus 的优势,为问答系统提供新颖强大的解决方案。通过集成图数据库和向量数据库,我们能够为用户提供更精确、全面和信息丰富的答案。未来,我们将继续探索这两种技术的结合,提升智能体的能力。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-07-03
企业级知识图谱项目之:数据库选型
2026-07-02
企业级知识图谱的实体架构治理实践
2026-07-02
一文讲清:“统一语义”、“构建本体”、“AI推理”这三者的关系
2026-07-02
graphify + claude 图谱关系
2026-07-01
把运维能力装进 Qoder,一句话就能定位根因
2026-07-01
Gbrain、GraphRAG、LLM Wiki、Graphify:4 种知识图谱方案怎么选
2026-07-01
一文讲清:本体(Ontology)与语义(Semantics)到底是什么关系?
2026-06-30
从 OOP 到本体:用形式语义支撑 AI 协作方法论
2026-04-07
2026-04-19
2026-04-23
2026-04-22
2026-06-03
2026-04-23
2026-05-26
2026-05-07
2026-05-28
2026-05-23
欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。
在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。
一、 定义
本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。
会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。
知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。
二、 账号注册与登录
登录方式:本网站支持以下登录方式,您可根据实际情况选择:
微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。
手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。
账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。
实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。
未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。
三、 服务内容与规范
知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。
服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。
禁止行为:您在使用服务时不得实施以下行为:
利用技术手段批量爬取、下载、转存知识库内容;
将知识库内容用于商业目的或未经授权地向第三方传播;
干扰本网站正常运行或侵犯其他用户合法权益;
发布违法违规信息或从事违反公序良俗的活动。
四、 知识产权声明
权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。
有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。
侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。
五、 个人信息保护
我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。
您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。
您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。
六、 免责声明
内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。
不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。
第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。
七、 违约责任
如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。
如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。
八、 法律适用与争议解决
本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。
因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。
九、 其他
本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。
本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。
我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。