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

作者:Prince Krampah
编译:活水智能
准备好将您的 RAG(检索增强生成)应用提升到新高度了吗?欢迎来到本系列的最新章节,我们将探索图数据库与大语言模型(Large Language Model, LLM)强大结合的奥秘。在上一期中,我们讨论了如何通过智能体 AI(Agentic AI)将自然语言转换为 Cypher 查询代码。
今天,我们将更进一步,通过构建智能 AI 智能体(AI Agent),充分利用 Neo4j 的图数据库能力和 LangChain 工具,为用户查询提供更加精准、上下文相关的答案。
我们将讨论以下内容:
• 构建我们自己的自定义 AI 工具供智能体使用
• 创建智能体并为其提供我们构建的自定义工具
• 构建一个工具,用于使用 Neo4j 向量索引进行向量搜索
• 构建另一个工具,将自然语言转换为 Cypher 查询代码

什么是 AI 智能体?
可以将 AI 智能体想象成一个配备了精心设计工具箱的数字助手。通过为 AI 系统配备特定工具与外部世界交互,它从被动的语言模型转变为动态问题解决者,能够主动采取行动。
创建 Neo4j GraphRAG 智能体
如今,您可能已经注意到,生成式 AI(Generative AI, GenAI)的发展正朝着智能体化方向迈进,至少在撰写本文时是这样。因此,理解什么是智能体非常重要,我们在 LangChain 的入门部分已经介绍过。在本节中,我们将更专注于构建用于聊天机器人的智能体。您还记得这张图吗?
您还记得这张图吗?

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

向 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 的地址是什么?")

“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("数据库中最贵的产品是什么?")

“数据库中最贵的产品是 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 的地址是什么?"
}
)

是的,它确实选择了正确的工具并提供了正确的答案。
测试 2!这次我想问一个更常规的问题:
response = agent_executor.invoke(
{
"input": "提供每个托运人的详细信息以及他们运送了多少订单。"
}
)
print(response.get("output"))
生成的响应:
以下是托运人的信息:
1. 托运人 ID: 3,公司名称:Federal Shipping,电话:(503) 555–9931
2. 托运人 ID: 1,公司名称:Speedy Express,电话:(503) 555–9831
3. 托运人 ID: 2,公司名称:United Package,电话:(503) 555–3199

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

这就是我们构建 AI 智能体所需的一切。
结论
恭喜您达成这一里程碑!您现在已经掌握了构建智能 GraphRAG 应用的基础知识,将图数据库的结构化能力与智能 AI 智能体结合起来。但这仅仅是我们旅程的开始。在下一期精彩内容中,我们将把这些概念带到生产环境中,通过以下方式:
• 使用 FastAPI 构建强大的后端 API 服务
• 使用 Docker 对解决方案进行容器化,实现无缝部署
• 创建干净且文档齐全的端点,允许其他应用程序利用我们的 GraphRAG 系统
• 实现可扩展性和安全性的最佳实践
准备好将您的实验代码转变为可以支持真实应用的生产级服务吧!无论您是构建内部工具还是面向客户的解决方案,您都将拥有一个专业级的 GraphRAG 系统,随时准备投入使用。
祝您编码愉快!下次见,世界一直在转动。
学习资源
若要了解更多知识图谱或图数据库相关教学,你可以查看公众号的其他文章:
Neo4j+Milvus双剑合璧!打造更强大的GraphRAG知识图谱 Neo4j GraphRAG:1个Python包,轻松搞定RAG + 知识图谱! Neo4j + LangChain:如何构建基于知识图谱的最强RAG系统? 利用AI大模型,将任何文本语料转化为知识图谱,可本地运行 解读 Graph RAG:从大规模文档中发现规律,找到相互关系,速度更快,信息更全面! 利用LLM构建非结构化文本的知识图谱
活水智能成立于北京,致力于通过AI教育、AI软件和社群提高知识工作者生产力。中国AIGC产业联盟理事。
活水现有AI线下工作坊等10+门课程,15+AI软件上线,多款产品在研。知识星球中拥有2600+成员,涵盖大厂程序员、公司高管、律师等各类知识工作者。在北、上、广、深、杭、重庆等地均有线下组织。
欢迎加入我们的福利群,每周都有一手信息、优惠券发放、优秀同学心得分享,还有赠书活动~
👇🏻👇🏻👇🏻





