
释放多智能体AI的力量:使用Neon、Langchain、Autogen和Azure Openai构建数据驱动的解决方案!
多智能体人工智能解决方案:Neon、Langchain、AutoGen 和 Azure OpenAI
让人工智能为您的数据服务
人工智能代理正在成为数据管理的积极参与者。如今,您可以简单地与您的数据对话,而不是编写 SQL 查询:
“显示我所有当前在运的货物。”
或者更好的是,人工智能代理可以对您的数据进行操作:
“为 Marc 创建一个新的货物并将其状态更新为已离开发货地。”
听起来很有前景?是的!在这篇文章中,我们将探讨如何构建一个简单的多代理人工智能解决方案,不仅可以检索数据,还可以使用 Azure OpenAI、LangChain、AutoGen 和 Neon 无服务器 Postgres 执行操作。
您可以在 GitHub 仓库 上找到运行示例项目的逐步说明。
什么是多智能体人工智能?
多智能体人工智能是多个智能体的集合,它们协同工作以完成任务。每个智能体都有特定的角色,并相互沟通以共享信息和协调行动。
不同的人工智能智能体可能根据其角色需要不同级别的访问权限。如果所有智能体都能访问每个表格,它们将处理不必要的数据,并引入数据冲突。我们希望每个智能体在其领域内工作,保持数据的清晰和准确。在我们的案例中,运输管理软件使用多智能体人工智能,不同的智能体以结构化的方式处理运输、客户和产品数据。例如,我们需要管理:
- 客户和产品信息 — 谁在购买?他们在购买什么?
- 运输和物流 — 运输在哪里?它们的状态是什么?
而不是将所有内容混合到一个大型数据库中(这可能变得复杂和缓慢)。这两个数据集服务于不同的目的:
- CRM 数据库跟踪客户及其订单。
- 运输数据库跟踪交付细节和物流。
使用的技术
我们结合了四种技术来构建示例:
第一步:定义AI代理及其角色
我们将为每个AI代理分配一个具有特定目的的角色。例如:
- ShipmentAgent → 处理与运输相关的查询和操作。
- CRMAgent → 管理客户和产品相关的数据。
- SchemaAgent → 检索和共享架构信息。
## agents.py
import autogen
from app.database import crm_db, shipment_db
from app.schema_functions import (
get_schema_info,
add_customer,
send_shipment,
)
from langchain_openai import AzureChatOpenAI
from langchain_experimental.sql import SQLDatabaseChain
from app.config import AZURE_OPENAI_KEY, AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_DEPLOYMENT
...
shipment_agent = autogen.ConversableAgent(
name="ShipmentAgent",
llm_config=llm_config,
description="Manage shipments in the main database.",
system_message=(...),
)
crm_agent = autogen.ConversableAgent(
name="CRMAgent",
llm_config=llm_config,
description="Manages customer and product information in the second database.",
system_message=(...),
)
schema_agent = autogen.ConversableAgent(
name="SchemaAgent",
llm_config=llm_config,
description="Understands and shares database schema information.",
system_message=(...),
)
第2步:将代理连接到数据库
每个代理必须能够与Neon 数据库交互,以获取或更新信息。为此,我们使用 LangChain SQLDatabaseChain,它允许代理在数据库上执行 SQL 查询。
## agents.py
...
## Initialize the database chains
shipment_chain = SQLDatabaseChain(llm=azure_llm, database=shipment_db, verbose=True)
crm_chain = SQLDatabaseChain(llm=azure_llm, database=crm_db, verbose=True)
## Query functions for each database
def query_shipment(query):
return shipment_chain.invoke(query)
def query_crm(query):
return crm_chain.invoke(query)
第3步:为每个AI代理分配操作
每个代理都有其可以执行的特定功能。例如,ShipmentAgent 应能够调用 send_shipment
函数,而 CRMAgent 应能够调用 add_customer
函数。
## agents.py
...
## Register functions with the agents
shipment_agent.register_function(
function_map={"query_shipment": query_shipment, "send_shipment": send_shipment}
)
crm_agent.register_function(
function_map={"query_crm": query_crm, "add_customer": add_customer}
)
schema_agent.register_function(
function_map={
"get_schema_info": get_schema_info,
"get_shared_schema_info": get_shared_schema_info,
}
)
第 4 步:管理 AI 对话与协作
这些代理使用 AutoGen 进行协作,这是微软推出的一个开源框架,支持多代理的编排与协调。AutoGen 允许 AI 代理:
- 通过传递消息共享知识。
- 基于结构化工作流做出决策。
- 采取现实世界的行动,如插入数据或调用存储过程。
对于那些喜欢低代码方式构建 Agentic 工作流的用户,Autogen 提供了一个 工作室。
如果我们将这三个代理组合在一起,流程如下:
- 用户提问:“当前有哪些产品在运输中?”Langchain 将基于文本的用户请求转换为结构化的数据库查询。
- ShipmentAgent 查询 Neon Shipment 数据库并返回结果。
- 用户请求一个行动:“为 Marc 创建一个新货物。”
- CRMAgent 将 Marc 添加为客户,ShipmentAgent 创建货物。
## agents.py
...
## Create a user proxy agent
user_proxy = autogen.UserProxyAgent(
name="User_proxy",
system_message="A human admin.",
code_execution_config={
"last_n_messages": 4,
"work_dir": "groupchat",
"use_docker": False,
},
human_input_mode="ALWAYS", # Using this mode to give input to agents
)
## Set up the group chat and manager
groupchat = autogen.GroupChat(
agents=[user_proxy, schema_agent, shipment_agent, crm_agent],
messages=[],
max_round=30, # Maximum number of rounds in the conversation
)
manager = autogen.GroupChatManager(groupchat=groupchat)
其他示例查询
与您的数据聊天
- “Alice Johnson 是客户吗?”
AI辅助的数据库管理
- “我需要一个存储过程来删除客户。你能生成一个吗?”
AI驱动的操作
- “为 Marc 创建一批 1 台笔记本电脑和 1 部智能手机,并将其状态更新为从纽约出发到洛杉矶。”
为什么选择Neon用于AI代理?
AI生成的查询可能强大但不可预测。Neon的分支功能允许我们在单独的数据库分支上测试AI生成的查询。如果AI代理生成了不正确的SQL查询,损害将限制在其分支内,而不会影响主生产数据库。这意味着我们可以在将更改合并到生产环境并上线之前进行实验、执行质量保证和验证数据。
通常情况下,AI代理可能会使用只在几分钟内使用的数据库,然后变得不活跃。使用Neon,这不是问题——您可以拥有数千个数据库,而不必为未使用的数据库支付费用。可以在需要时唤醒数据库。
您还可以为每个AI代理分配不同的角色,并使用Neon的行级安全性(RLS)控制它们对数据的访问。例如,CRM代理可以对客户和产品表具有读写访问权限,而运输代理则被限制在与运输相关的数据上。