暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

5步打造 GraphRAG 智能体,让 Neo4j 和 AI 完美协作!

活水智能 2025-01-07
107

点击上方↗️活水智能关注 + 星标🌟

作者:Prince Krampah

编译:活水智能

 

准备好将您的 RAG(检索增强生成)应用提升到新高度了吗?欢迎来到本系列的最新章节,我们将探索图数据库与大语言模型(Large Language Model, LLM)强大结合的奥秘。在上一期中,我们讨论了如何通过智能体 AI(Agentic AI)将自然语言转换为 Cypher 查询代码。

今天,我们将更进一步,通过构建智能 AI 智能体(AI Agent),充分利用 Neo4j 的图数据库能力和 LangChain 工具,为用户查询提供更加精准、上下文相关的答案。

我们将讨论以下内容:

  • • 构建我们自己的自定义 AI 工具供智能体使用

  • • 创建智能体并为其提供我们构建的自定义工具

  • • 构建一个工具,用于使用 Neo4j 向量索引进行向量搜索

  • • 构建另一个工具,将自然语言转换为 Cypher 查询代码

图片来源:Code With Prince

什么是 AI 智能体?

可以将 AI 智能体想象成一个配备了精心设计工具箱的数字助手。通过为 AI 系统配备特定工具与外部世界交互,它从被动的语言模型转变为动态问题解决者,能够主动采取行动。

创建 Neo4j GraphRAG 智能体

如今,您可能已经注意到,生成式 AI(Generative AI, GenAI)的发展正朝着智能体化方向迈进,至少在撰写本文时是这样。因此,理解什么是智能体非常重要,我们在 LangChain 的入门部分已经介绍过。在本节中,我们将更专注于构建用于聊天机器人的智能体。您还记得这张图吗?

您还记得这张图吗?

让我们稍微修改一下这张图,以反映智能体可以访问的工具。

图片来源:Code With Prince

向 AI 智能体提问时,它会选择“员工问答工具”(Employee QA Tool)或“通用问答工具”(General QA Tool)。根据所选工具,AI 智能体将执行相应工具并生成最终答案。

我将使用一个 Python 函数来创建 employee_qa_tool
。如果您愿意,也可以使用类。以下是创建该工具的代码,与我们之前讨论的内容差不多:

employee_details_chat_template_str = """
你的任务是使用提供的员工数据回答
关于他们在公司中的角色、绩效和经历的问题。
使用以下上下文来回答问题。
尽可能详细,但不要编造上下文中没有的信息。
如果你不知道答案,就说不知道。
{context}
"""

@tool("employee-qa-tool", return_direct=True)
def employee_qa_tool(query: str) -> str:
    """回答公司员工相关问题的工具。"""
    employee_details_chat_system_prompt = SystemMessagePromptTemplate(
        prompt=PromptTemplate(
            input_variables=["context"],
            template=employee_details_chat_template_str
        )
    )

    human_prompt = HumanMessagePromptTemplate(
        prompt=PromptTemplate(
            input_variables=["question"],
            template="你能提供以下问题的详细信息吗:{question}?"
        )
    )

    messages = [employee_details_chat_system_prompt, human_prompt]

    qa_prompt = ChatPromptTemplate(
        messages=messages,
        input_variables=["context""question"]
    )

    llm = ChatOpenAI(model="gpt-3.5-turbo")

    qa_chain = RetrievalQA.from_chain_type(
        llm=llm,
        retriever=neo4j_graph_vector_index.as_retriever(),
        chain_type="stuff",
    )

    qa_chain.combine_documents_chain.llm_chain.prompt = qa_prompt

    response = qa_chain.invoke(query)

    return response.get("result")

我们可以这样使用该工具:

employee_qa_tool.invoke("Andrew 的地址是什么?")
图片来源:Code With Prince

“Andrew 的地址是 908 W. Capital Way, Tacoma, WA 98401。”

现在让我们继续构建 general_qa_tool
。它将用于回答与员工无关的其他问题。您可以随意构建任意数量的工具,但请记住,工具越多,大语言模型在选择相关工具时可能越容易感到困惑。

@tool("general-qa-tool", return_direct=True)
def general_qa_tool(query: str) -> str:
    """回答订单、订单详情、托运人、客户和产品相关问题的工具。"""
    response = cypher_chain.invoke(query)

    return response.get("result")

您可以如下调用该工具:

general_qa_tool.invoke("数据库中最贵的产品是什么?")
图片来源:Code With Prince

“数据库中最贵的产品是 Côte de Blaye,价格为 $263.50。”

使用 Neo4j 实现 GraphRAG 智能体

现在我们可以如下实现 GraphRAG 智能体。

首先引入我们需要使用的基础库:

from langchain import hub
from langchain.agents import (
    AgentExecutor,
    create_tool_calling_agent
)

接下来,从 LangChain Hub 加载智能体提示:

agent_prompt = hub.pull("hwchase17/openai-functions-agent")

创建工具列表,我们的例子中只有两个工具:

tools = [employee_qa_tool, general_qa_tool]

最后创建智能体!

llm = ChatOpenAI(model="gpt-3.5-turbo")
agent = create_tool_calling_agent(llm, tools, agent_prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

让我们测试一下,首先我想看看智能体是否选择了正确的工具。在这种情况下,我希望它使用 employee-qa-tool
,让我们看看结果。

agent_executor.invoke(
    {
        "input""Andrew 的地址是什么?"
    }
)

图片来源:Code With Prince

是的,它确实选择了正确的工具并提供了正确的答案。

测试 2!这次我想问一个更常规的问题:

response = agent_executor.invoke(
    {
        "input""提供每个托运人的详细信息以及他们运送了多少订单。"
    }
)

print(response.get("output"))

生成的响应:

以下是托运人的信息:

  1. 1. 托运人 ID: 3,公司名称:Federal Shipping,电话:(503) 555–9931

  2. 2. 托运人 ID: 1,公司名称:Speedy Express,电话:(503) 555–9831

  3. 3. 托运人 ID: 2,公司名称:United Package,电话:(503) 555–3199

图片来源:Code With Prince

它并没有完全回答“每个托运人运送了多少订单”。无论如何,这就是智能体,它能够选择正确的工具。

图片来源:Code With Prince

这就是我们构建 AI 智能体所需的一切。

结论

恭喜您达成这一里程碑!您现在已经掌握了构建智能 GraphRAG 应用的基础知识,将图数据库的结构化能力与智能 AI 智能体结合起来。但这仅仅是我们旅程的开始。在下一期精彩内容中,我们将把这些概念带到生产环境中,通过以下方式:

  • • 使用 FastAPI 构建强大的后端 API 服务

  • • 使用 Docker 对解决方案进行容器化,实现无缝部署

  • • 创建干净且文档齐全的端点,允许其他应用程序利用我们的 GraphRAG 系统

  • • 实现可扩展性和安全性的最佳实践

准备好将您的实验代码转变为可以支持真实应用的生产级服务吧!无论您是构建内部工具还是面向客户的解决方案,您都将拥有一个专业级的 GraphRAG 系统,随时准备投入使用。

祝您编码愉快!下次见,世界一直在转动。



学习资源

若要了解更多知识图谱或图数据库相关教学,你可以查看公众号的其他文章:


活水智能成立于北京,致力于通过AI教育、AI软件和社群提高知识工作者生产力。中国AIGC产业联盟理事。

活水现有AI线下工作坊等10+门课程,15+AI软件上线,多款产品在研。知识星球中拥有2600+成员,涵盖大厂程序员、公司高管、律师等各类知识工作者。在北、上、广、深、杭、重庆等地均有线下组织。

欢迎加入我们的福利群,每周都有一手信息、优惠券发放、优秀同学心得分享,还有赠书活动~

👇🏻👇🏻👇🏻

 点击阅读原文,立即入群

文章转载自活水智能,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论