用Google的Gen AI工具箱和Neo4j知識圖譜構(gòu)建AI代理
这篇博客由以下作者共同撰写:
- Michael Hunger,Neo4j 产品创新负责人
- Kurtis Van Gent,Google 资深软件工程师
想了解更多吗?加入我们在2025年3月12日(3月12日,2025年)美国太平洋时间上午10点(欧洲中部时间下午6点)举行的Gen AI Toolbox + Neo4j直播。https://youtube.com/live/0p3S56JnTCg
Neo4j Live:用Google的GenAI工具箱构建AI代理程序 🎉 加入我们,一起探索如何使用这个工具,现在支持Neo4j数据库!上个月,Google 宣布了 Gen AI 工具箱的公共测试版启动,这是一种专为数据库设计的工具箱。今天,我们很高兴地宣布,工具箱现在支持 Neo4j,一种图数据库系统。Neo4j 一直是支持和开发工具箱的关键合作伙伴。使用 Neo4j 的开发人员和组织现在可以通过流行的 GraphRAG 技术创建代理工具,从而增强工具箱在 Gen AI 应用中的实用性。
Neo4j 是领先的图数据库——它管理信息的方式不是通过表格,而是通过实体(节点)及其之间的关系,这使得连接信息的表示更加灵活和强大。在生物医学、供应链、制造、欺诈检测和运输物流等多个领域,图形提供了独特的功能。知识图 可以被视为您组织的数字孪生(人员、流程、产品、合作伙伴等),是大型语言模型语言技能的理想“事实记忆”伴侣。使用 GraphRAG 有助于提高生成式人工智能应用的准确性和可解释性,同时保持其可靠性。
Gen AI生成工具箱当涉及到创建访问数据库的工具时,开发人员在生产环境中构建AI代理时会迅速遇到一系列挑战:身份验证、授权、数据清洗、连接池等等。这些挑战可能变得非常繁琐,减慢开发速度,并在每次重复实现相同的样板代码时为错误留下空间。
欢迎进入Gen AI工具箱——这是一个开源服务器,可以帮助您更轻松、更快捷、更安全地创建工具。工具箱位于您的应用程序和数据库之间,处理诸如连接池管理、认证等复杂问题。工具箱允许您在集中位置定义工具,只需不到3行代码即可与您的代理进行集成:
from toolbox_langchain import ToolboxClient
# 将URL更新为指向您的服务器的地址
client = ToolboxClient("http://127.0.0.1:5000")
# 这些工具可以传递给您的代理程序。
tools = await client.aload_toolset()
工具箱确实是一个开源项目:作为发布的一部分,Google Cloud 与其他数据库供应商(例如 Neo4j)合作,为许多开源和专有数据库提供了支持。
- PostgresSQL(包括 AlloyDB 和 适用于MySQL的Cloud SQL)
- MySQL(包括 适用于MySQL的Cloud SQL)
- SQL Server(包括 适用于SQL Server的Cloud SQL)
- Spanner
- Neo4j(图数据库)
在安装了Toolbox服务器后,您可以准备安装说明,并确保提供了通往GitHub仓库的清晰路径。之后,你就可以准备配置tools.yaml文件。要创建一个用于查询Neo4j的工具,你需要配置以下两项内容:
一个 Neo4j 来源,它定义了如何连接和认证到你的 Neo4j 实例。这里是我们示例中的 Neo4j 源代码:
(注:以下代码保持原文格式)
(注:以下代码保持原文格式)
[源代码内容]
# 来源配置
sources:
# 公司图谱的Neo4j数据库配置
companies-graph:
kind: "neo4j"
uri: "neo4j+s://demo.neo4jlabs.com"
user: "companies"
password: "companies"
database: "companies"
一旦定义了来源数据,接下来定义工具。这个neo4j-cypher工具规定了在代理调用它时应该运行的cypher查询。工具可以执行任何你能通过cypher语句表达的操作,包括读取和写入!为了使工具能够在代理设置中使用,详细描述工具、参数和结果非常重要,这样LLM才能判断其是否适用。
以下是我们示例中工具配置的一部分,包括来源信息、陈述文本、描述信息和参数设置:
工具:
月内文章:
类型: neo4j-cypher
来源: companies-graph
查询语句: |
MATCH (a:Article)
WHERE date($date) <= date(a.date) < date($date) + duration('P1M')
RETURN a.id AS article_id, a.author AS author, a.title AS title, toString(a.date) AS date, a.sentiment AS sentiment
LIMIT 25
描述: 一个月内文章列表(article_id, author, title, date, sentiment)
参数:
- 名称: date
类型: 字符串
描述: yyyy-mm-dd 格式的开始日期
文章中的公司:
类型: neo4j-cypher
来源: companies-graph
查询语句: |
MATCH (a:Article)-[:MENTIONS]->(c)
WHERE a.id = $article_id AND NOT EXISTS { (c)<-[:HAS_SUBSIDARY]-() }
RETURN c.id AS company_id, c.name AS name, c.summary AS summary
描述: 文章中提到的公司(company_id, name, summary)
参数:
- 名称: article_id
类型: 字符串
描述: 提及该公司的文章 id
投资研究员
这展示了一个代理型的LangChain应用示例,该应用使用了结合全文搜索和图搜索功能的GraphRAG模式工具。
这个例子代表一个投资研究分析师,它可以用来查找关于公司、投资者、竞争对手、合作伙伴和相关行业的最新新闻。它通过导入Diffbot知识图谱中的数据到Neo4j来运行,通过基本实体之间的关系来捕捉该领域的复杂性。
这个例子的代码可以在这个仓库里找到。
主要分支的公司工具箱 · Neo4j 扩展和与 Vertex AI 和 LangChain 的集成 来探索一个公共图数据集该数据集是一张图,其中包含公司、与这些公司相关的行业、在这些公司工作或对其进行投资的人,以及报道这些公司的新闻文章。
新闻文章被分割成小块,这些小块也被存放在图中。
数据库是公开的,并提供了一个只读用户账号,您可以访问以下网址查看数据: https://demo.neo4jlabs.com:7473/browser/
- URI (统一资源标识符): neo4j+s://demo.neo4jlabs.com
- 用户: companies
- 密码: companies
- 公司名称: companies
在我们的配置中,我们提供了使用全文索引的工具和功能,以及用于获取如下额外信息的图检索查询:
- 文章的主条目(聚合同一文章的所有碎片)
- 提到的组织
- 组织所属的行业
- 与组织有关的人及其角色(例如投资人、董事长、首席执行官)
我们利用代理型LangChain与Vertex AI的集成,这样一来,可以自动将Toolbox中注册的工具传递给LLM进行调用。我们将同时使用混合搜索和GraphRAG检索器。
把我们的代理连接到工具箱我们现在可以使用LangChain和Vertex AI Gemini 2.0 Flash模型,并将我们的工具定义输入到模型中进行快速测试。可以参考工具箱文档中的快速入门示例。
import asyncio
import os
from langgraph.prebuilt import create_react_agent
from langchain_google_vertexai import ChatVertexAI
from langgraph.checkpoint.memory import MemorySaver
from toolbox_langchain import ToolboxClient
prompt = """
你是一个乐于助人的投资研究助手哦。
你可以使用提供的工具来搜索公司、人员、行业以及2023年的新闻文章。
不要向用户寻求确认哦。
用户:
"""
queries = [
"哪些行业与计算机制造有关?",
"列出计算机制造行业中的5家公司及其简述。",
]
def main():
model = ChatVertexAI(model_name="gemini-1.5-pro")
client = ToolboxClient("http://127.0.0.1:5000")
tools = client.load_toolset()
agent = create_react_agent(model, tools, checkpointer=MemorySaver())
config = {"configurable": {"thread_id": "thread-1"}}
for query in queries:
inputs = {"messages": [("user", prompt + query)]}
response = agent.invoke(inputs, stream_mode="values", config=config)
print(response["messages"][-1].content)
main()
以下是与计算机制造相关的行业:计算机硬件公司、电子产品的制造商和计算机存储设备公司。
以下是计算机硬件行业中的5家公司及其描述:
1. **微软埃及分公司**:微软在埃及的分支机构
2. **Apigee**:位于美国加州圣何塞的软件公司,现为谷歌所有
3. **Microsemi**:微半导体公司
4. **Intermec**:美国因特麦克电子制造公司
5. **Elitegroup Computer Systems**:暂无描述
示例对话
为代理提供工具来检查数据的各个方面,使其能够回答甚至复杂的后续问题,如下例所示。
2023年1月新闻中有哪些公司被提及并且带有正面评价?
这个问题需要调用多个工具并进行适当的参数转换。我们给定的部分日期是2023年1月,需要将其转换为yyyy-mm-dd格式以供工具调用。代理需要明白“良好的情感”是指一个数值评分,并且需要对文章结果进行后续过滤。然后,需要将每篇文章的结果分别输入到companies_in_article工具中以获取公司信息。
那里的董事会成员是哪些人?这里是一些2023年1月带有积极情绪评分的文章,以及文章中提到的公司:
Mozilla的Pocket应用刚更新了一个大版本 (0.838, 0.83): Mozilla
Onapsis宣布与Wipro合作以此来解决数字转型中的安全问题 (0.804, 0.735): Onapsis, Wipro和SAP公司
等等
这里指的是前文提到的那些公司,并且仅模糊地指明了选择API调用所需的岗位需求。代理需要多次调用people_at_company这个端点,使用之前从代理记忆中获取的公司ID,然后汇总并筛选信息到响应中。
下一步是我没能找到所有公司的董事会成员信息。以下是找到的信息:
Wipro:
- Azim Premji
- Rishad Premji
SAP:
- Hasso Plattner
- Jennifer Morgan
…
在本文中,我们展示了如何通过构建代理应用程序,这些应用程序可以轻松地将数据库工具与谷歌的Gen AI工具箱集成。虽然我们专注于与Neo4j中的知识图谱相关的GraphRAG用例,但你可以在一个代理应用程序中结合不同的数据源和数据库类型。
如果你对探索Toolbox和Neo4j感兴趣,不妨参考这些资源。
随着Toolbox与不同的代理框架集成,你可以一次性定义工具并重复利用它们来处理多个应用场景。Neo4j发现为Toolbox做贡献很容易,我们希望你也能利用相关的反馈和讨论机制来添加你自己的数据源并提供反馈和改进。
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章