文章目录
- 1.框架设计
-
- 1.1.EnterpriseDataService类:
- 1.2.创建用户代理
- 1.3.定义智能体角色
-
- 1.3.1. 客服接待智能体
- 1.3.2. 订单查询智能体
- 1.3.3. 物流跟踪智能体
- 1.3.4. 库存管理智能体
- 1.4 注册工具函数
- 1.5 企业级客服场景测试
-
- 1.5.1 创建群组聊天
- 1.5.2 创建群组经理
- 1.6 测试场景
- 2.场景1:订单状态查询
- 3.场景2:缺货问题处理
- 4.场景3:物流延误处理
- 5. 核心价值与结论
- 6.完整代码
1.框架设计
1.1.EnterpriseDataService类:
EnterpriseDataService类主要是创建一下假数据和四个功能
四个function: “”“查询订单信息”“” def get_order_info(self, order_id: str) -> Dict: “”“查询库存信息”“” def get_inventory_info(self, product: str) -> Dict: “”“查询物流信息”“” def get_logistics_info(self, tracking_number: str) -> Dict: “”“更新订单状态”“” def update_order_status(self, order_id: str, new_status: str) -> bool:
EnterpriseDataService类完整代码:
class EnterpriseDataService:
"""企业数据服务模拟类"""
def __init__(self):
# 模拟订单数据
self.orders = {
"ORD001": {
"order_id": "ORD001",
"customer_id": "CUST001",
"status": "已发货",
"items": [{"product": "iPhone 15", "quantity": 1, "price": 7999}],
"total": 7999,
"shipping_address": "北京市朝阳区xxx街道",
"tracking_number": "SF1234567890",
"order_date": "2024-01-15",
"expected_delivery": "2024-01-18"
},
"ORD002": {
"order_id": "ORD002",
"customer_id": "CUST002",
"status": "处理中",
"items": [{"product": "MacBook Pro", "quantity": 1, "price": 15999}],
"total": 15999,
"shipping_address": "上海市浦东新区xxx路",
"tracking_number": None,
"order_date": "2024-01-16",
"expected_delivery": None
}
}
# 模拟库存数据
self.inventory = {
"iPhone 15": {"stock": 100, "warehouse": "华北仓"},
"MacBook Pro": {"stock": 0, "warehouse": "华东仓"}
}
# 模拟物流数据
self.logistics = {
"SF1234567890": {
"status": "运输中",
"current_location": "北京分拣中心",
"estimated_arrival": "2024-01-18 14:00"
}
}
def get_order_info(self, order_id: str) –> Dict:
"""查询订单信息"""
return self.orders.get(order_id, {})
def get_inventory_info(self, product: str) –> Dict:
"""查询库存信息"""
return self.inventory.get(product, {})
def get_logistics_info(self, tracking_number: str) –> Dict:
"""查询物流信息"""
return self.logistics.get(tracking_number, {})
def update_order_status(self, order_id: str, new_status: str) –> bool:
"""更新订单状态"""
if order_id in self.orders:
self.orders[order_id]["status"] = new_status
return True
return False
1.2.创建用户代理
user_proxy = autogen.UserProxyAgent(
name="客户",
human_input_mode="NEVER",
max_consecutive_auto_reply=10,
is_termination_msg=lambda x: x.get("content", "") and ("问题已解决" in x.get("content", "") or "TERMINATE" in x.get("content", "")),
code_execution_config={"work_dir": "temp", "use_docker": False},
)
1.3.定义智能体角色
1.3.1. 客服接待智能体
customer_service_agent = autogen.AssistantAgent(
name="客服接待员",
system_message="""你是一名专业的电商客服接待员。你的职责是:
1. 友好接待客户,了解客户问题
2. 对问题进行初步分类(订单查询、退换货、物流问题、产品咨询等)
3. 收集必要的订单信息(订单号、客户信息等)
4. 将问题转交给相应的专业团队处理
请用简洁明了的语言与客户沟通。当客户提到具体订单号时,请直接转交给订单查询专员处理。
如果问题涉及多个方面,请协调相关专员共同解决。
回复格式:简洁专业,直接回答客户问题。""",
llm_config=llm_config,
)
1.3.2. 订单查询智能体
order_query_agent = autogen.AssistantAgent(
name="订单查询专员",
system_message="""你是订单查询专员,负责处理所有订单相关的查询。你的职责包括:
1. 根据订单号查询订单详细信息
2. 解释订单状态和处理进度
3. 提供预计发货和到货时间
4. 识别需要其他部门协助的问题
当客户提供订单号时,请立即使用 get_order_info 函数查询订单信息。
根据查询结果,如果发现需要物流或库存部门协助,请主动通知相关专员。
回复格式:提供详细的订单信息,包括状态、商品、金额等关键信息。""",
llm_config=llm_config,
)
1.3.3. 物流跟踪智能体
logistics_agent = autogen.AssistantAgent(
name="物流跟踪专员",
system_message="""你是物流跟踪专员,专门处理配送和物流相关问题。你的职责包括:
1. 查询包裹物流状态和位置
2. 提供准确的配送时间预估
3. 处理配送异常和延误问题
4. 协调配送地址修改
当需要查询物流信息时,请使用 get_logistics_info 函数。
请提供实时、准确的物流信息,并主动提醒客户注意事项。
回复格式:提供详细的物流状态,包括当前位置、预计到达时间等。""",
llm_config=llm_config,
)
1.3.4. 库存管理智能体
inventory_agent = autogen.AssistantAgent(
name="库存管理专员",
system_message="""你是库存管理专员,负责处理库存相关问题。你的职责包括:
1. 查询产品库存状态
2. 预估补货时间
3. 协调缺货订单处理
4. 提供替代产品建议
当需要查询库存信息时,请使用 get_inventory_info 函数。
请提供准确的库存信息,并为缺货情况提供合理的解决方案。
回复格式:提供库存状态,如果缺货请说明预计补货时间。""",
llm_config=llm_config,
)
1.4 注册工具函数
autogen.register_function(
get_order_info,
caller=order_query_agent,
executor=user_proxy,
description="根据订单号获取订单详细信息"
)
autogen.register_function(
get_inventory_info,
caller=inventory_agent,
executor=user_proxy,
description="根据产品名称获取库存信息"
)
autogen.register_function(
get_logistics_info,
caller=logistics_agent,
executor=user_proxy,
description="根据运单号获取物流跟踪信息"
)
1.5 企业级客服场景测试
autogen的核心:“创建群组聊天”, “创建群组经理”
1.5.1 创建群组聊天
把之前的客服agent,订单agent, 物流agent,库存agent放进autogen.GroupChat
# 创建群组聊天
groupchat = autogen.GroupChat(
agents=[customer_service_agent, order_query_agent, logistics_agent, inventory_agent, user_proxy],
messages=[],
max_round=12,
speaker_selection_method="auto"
)
1.5.2 创建群组经理
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)
run_scenario_with_autogen全部代码:
def run_scenario_with_autogen(scenario_name: str, customer_message: str):
"""使用 AutoGen 运行客服场景"""
print(f"\\n{'='*60}")
print(f"🎯 {scenario_name}")
print(f"{'='*60}")
print(f"客户问题:{customer_message}")
print(f"\\n🤖 AutoGen 多智能体协作处理:")
print("-" * 50)
try:
# 创建群组聊天
groupchat = autogen.GroupChat(
agents=[customer_service_agent, order_query_agent, logistics_agent, inventory_agent, user_proxy],
messages=[],
max_round=12,
speaker_selection_method="auto"
)
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)
# 开始对话
user_proxy.initiate_chat(
manager,
message=customer_message
)
print(f"\\n✅ 场景处理完成")
except Exception as e:
print(f"❌ 处理过程中出现错误: {e}")
print("这可能是由于API配置或网络问题导致的")
1.6 测试场景
scenarios = [
("场景1:订单状态查询", "你好,我想查询一下我的订单ORD001的状态,什么时候能到货?"),
("场景2:缺货问题处理", "我下单的MacBook Pro订单ORD002一直显示处理中,什么时候能发货?"),
("场景3:物流延误处理", "我的订单ORD001已经超过预计到货时间了,但还没收到货,这是怎么回事?")
]
for scenario_name, customer_message in scenarios:
run_scenario_with_autogen(scenario_name, customer_message)
time.sleep(2) # 避免API调用过于频繁
# 开始对话
user_proxy.initiate_chat(
manager,
message=customer_message
)
2.场景1:订单状态查询
客户:你好,我想查询一下我的订单ORD001的状态,什么时候能到货? 从日志上看,autogen将客户问题
订单查询专员 -> 物流跟踪专员-> 客服接待员
日志信息:
============================================================
🎯 场景1:订单状态查询
============================================================
客户问题:你好,我想查询一下我的订单ORD001的状态,什么时候能到货?
🤖 AutoGen 多智能体协作处理:
––––––––––––––––––––––––––––––––––––––––––––––––––
客户 (to chat_manager):
你好,我想查询一下我的订单ORD001的状态,什么时候能到货?
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 订单查询专员
订单查询专员 (to chat_manager):
***** Suggested tool call (call_Z0TGG18pFGnso5zT6dYJHsHo): get_order_info *****
Arguments:
{"order_id":"ORD001"}
*******************************************************************************
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
>>>>>>>> EXECUTING FUNCTION get_order_info...
Call ID: call_Z0TGG18pFGnso5zT6dYJHsHo
Input arguments: {'order_id': 'ORD001'}
>>>>>>>> EXECUTED FUNCTION get_order_info...
Call ID: call_Z0TGG18pFGnso5zT6dYJHsHo
Input arguments: {'order_id': 'ORD001'}
Output:
订单信息查询成功:
{
"order_id": "ORD001",
"customer_id": "CUST001",
"status": "已发货",
"items": [
{
"product": "iPhone 15",
"quantity": 1,
"price": 7999
}
],
"total": 7999,
"shipping_address": "北京市朝阳区xxx街道",
"tracking_number": "SF1234567890",
"order_date": "2024-01-15",
"expected_delivery": "2024-01-18"
}
客户 (to chat_manager):
***** Response from calling tool (call_Z0TGG18pFGnso5zT6dYJHsHo) *****
订单信息查询成功:
{
"order_id": "ORD001",
"customer_id": "CUST001",
"status": "已发货",
"items": [
{
"product": "iPhone 15",
"quantity": 1,
"price": 7999
}
],
"total": 7999,
"shipping_address": "北京市朝阳区xxx街道",
"tracking_number": "SF1234567890",
"order_date": "2024-01-15",
"expected_delivery": "2024-01-18"
}
**********************************************************************
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 物流跟踪专员
物流跟踪专员 (to chat_manager):
***** Suggested tool call (call_Arqe6dpZ2F2nTy30KScvKn5s): get_logistics_info *****
Arguments:
{"tracking_number":"SF1234567890"}
***********************************************************************************
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
>>>>>>>> EXECUTING FUNCTION get_logistics_info...
Call ID: call_Arqe6dpZ2F2nTy30KScvKn5s
Input arguments: {'tracking_number': 'SF1234567890'}
>>>>>>>> EXECUTED FUNCTION get_logistics_info...
Call ID: call_Arqe6dpZ2F2nTy30KScvKn5s
Input arguments: {'tracking_number': 'SF1234567890'}
Output:
物流信息查询成功:
{
"status": "运输中",
"current_location": "北京分拣中心",
"estimated_arrival": "2024-01-18 14:00"
}
客户 (to chat_manager):
***** Response from calling tool (call_Arqe6dpZ2F2nTy30KScvKn5s) *****
物流信息查询成功:
{
"status": "运输中",
"current_location": "北京分拣中心",
"estimated_arrival": "2024-01-18 14:00"
}
**********************************************************************
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 物流跟踪专员
物流跟踪专员 (to chat_manager):
您的订单(ORD001)状态如下:
– 商品:iPhone 15
– 当前物流状态:运输中
– 当前位置:北京分拣中心
– 预计到达时间:2024年1月18日14:00
请注意查收,如有任何问题或需要修改配送地址,请随时联系我。
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客服接待员
客服接待员 (to chat_manager):
如果您有其他问题需要帮助,请随时告知我。
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
>>>>>>>> TERMINATING RUN (8c15084c–6ed3–4f81–afe2–fb04bece67fc): Maximum rounds (12) reached
✅ 场景处理完成
3.场景2:缺货问题处理
客户:我下单的MacBook Pro订单ORD002一直显示处理中,什么时候能发货? 从日志上看,autogen将客户问题
订单查询专员 -> 库存管理专员-> 客服接待员
日志信息:
============================================================
🎯 场景2:缺货问题处理
============================================================
客户问题:我下单的MacBook Pro订单ORD002一直显示处理中,什么时候能发货?
🤖 AutoGen 多智能体协作处理:
––––––––––––––––––––––––––––––––––––––––––––––––––
客户 (to chat_manager):
我下单的MacBook Pro订单ORD002一直显示处理中,什么时候能发货?
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 订单查询专员
订单查询专员 (to chat_manager):
***** Suggested tool call (call_9j1zGlyJYUKjWJSFoJwepxSv): get_order_info *****
Arguments:
{"order_id":"ORD002"}
*******************************************************************************
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
>>>>>>>> EXECUTING FUNCTION get_order_info...
Call ID: call_9j1zGlyJYUKjWJSFoJwepxSv
Input arguments: {'order_id': 'ORD002'}
>>>>>>>> EXECUTED FUNCTION get_order_info...
Call ID: call_9j1zGlyJYUKjWJSFoJwepxSv
Input arguments: {'order_id': 'ORD002'}
Output:
订单信息查询成功:
{
"order_id": "ORD002",
"customer_id": "CUST002",
"status": "处理中",
"items": [
{
"product": "MacBook Pro",
"quantity": 1,
"price": 15999
}
],
"total": 15999,
"shipping_address": "上海市浦东新区xxx路",
"tracking_number": null,
"order_date": "2024-01-16",
"expected_delivery": null
}
客户 (to chat_manager):
***** Response from calling tool (call_9j1zGlyJYUKjWJSFoJwepxSv) *****
订单信息查询成功:
{
"order_id": "ORD002",
"customer_id": "CUST002",
"status": "处理中",
"items": [
{
"product": "MacBook Pro",
"quantity": 1,
"price": 15999
}
],
"total": 15999,
"shipping_address": "上海市浦东新区xxx路",
"tracking_number": null,
"order_date": "2024-01-16",
"expected_delivery": null
}
**********************************************************************
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 库存管理专员
库存管理专员 (to chat_manager):
***** Suggested tool call (call_J4RwuAN2czupY7XwNE2hRcgV): get_inventory_info *****
Arguments:
{"product":"MacBook Pro"}
***********************************************************************************
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
>>>>>>>> EXECUTING FUNCTION get_inventory_info...
Call ID: call_J4RwuAN2czupY7XwNE2hRcgV
Input arguments: {'product': 'MacBook Pro'}
>>>>>>>> EXECUTED FUNCTION get_inventory_info...
Call ID: call_J4RwuAN2czupY7XwNE2hRcgV
Input arguments: {'product': 'MacBook Pro'}
Output:
库存信息查询成功:
{
"stock": 0,
"warehouse": "华东仓"
}
客户 (to chat_manager):
***** Response from calling tool (call_J4RwuAN2czupY7XwNE2hRcgV) *****
库存信息查询成功:
{
"stock": 0,
"warehouse": "华东仓"
}
**********************************************************************
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 库存管理专员
库存管理专员 (to chat_manager):
目前MacBook Pro在我们的华东仓库处于缺货状态,因此订单ORD002暂无法发货。我们预计将在一周内补货。请您耐心等待,我们会在补货后尽快处理并发货。感谢您的理解与支持!
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客服接待员
客服接待员 (to chat_manager):
目前MacBook Pro在我们的华东仓库处于缺货状态,因此订单ORD002暂无法发货。我们预计将在一周内补货。请您耐心等待,我们会在补货后尽快处理并发货。感谢您的理解与支持!
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
>>>>>>>> TERMINATING RUN (421d40a8–f5fb–4762–ad8f–681516716e5c): Maximum rounds (12) reached
✅ 场景处理完成
4.场景3:物流延误处理
客户:我的订单ORD001已经超过预计到货时间了,但还没收到货,这是怎么回事? 从日志上看,autogen将客户问题
订单查询专员 -> 物流跟踪专员 -> 物流跟踪专员 -> 客服接待员
日志信息:
============================================================
🎯 场景3:物流延误处理
============================================================
客户问题:我的订单ORD001已经超过预计到货时间了,但还没收到货,这是怎么回事?
🤖 AutoGen 多智能体协作处理:
––––––––––––––––––––––––––––––––––––––––––––––––––
客户 (to chat_manager):
我的订单ORD001已经超过预计到货时间了,但还没收到货,这是怎么回事?
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 订单查询专员
订单查询专员 (to chat_manager):
***** Suggested tool call (call_wGgT2Cf2KhWbgy8i672mliZP): get_order_info *****
Arguments:
{"order_id":"ORD001"}
*******************************************************************************
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
>>>>>>>> EXECUTING FUNCTION get_order_info...
Call ID: call_wGgT2Cf2KhWbgy8i672mliZP
Input arguments: {'order_id': 'ORD001'}
>>>>>>>> EXECUTED FUNCTION get_order_info...
Call ID: call_wGgT2Cf2KhWbgy8i672mliZP
Input arguments: {'order_id': 'ORD001'}
Output:
订单信息查询成功:
{
"order_id": "ORD001",
"customer_id": "CUST001",
"status": "已发货",
"items": [
{
"product": "iPhone 15",
"quantity": 1,
"price": 7999
}
],
"total": 7999,
"shipping_address": "北京市朝阳区xxx街道",
"tracking_number": "SF1234567890",
"order_date": "2024-01-15",
"expected_delivery": "2024-01-18"
}
客户 (to chat_manager):
***** Response from calling tool (call_wGgT2Cf2KhWbgy8i672mliZP) *****
订单信息查询成功:
{
"order_id": "ORD001",
"customer_id": "CUST001",
"status": "已发货",
"items": [
{
"product": "iPhone 15",
"quantity": 1,
"price": 7999
}
],
"total": 7999,
"shipping_address": "北京市朝阳区xxx街道",
"tracking_number": "SF1234567890",
"order_date": "2024-01-15",
"expected_delivery": "2024-01-18"
}
**********************************************************************
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 物流跟踪专员
物流跟踪专员 (to chat_manager):
***** Suggested tool call (call_05oJ1HvhKbns4P4pFYcG0j4t): get_logistics_info *****
Arguments:
{"tracking_number":"SF1234567890"}
***********************************************************************************
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
>>>>>>>> EXECUTING FUNCTION get_logistics_info...
Call ID: call_05oJ1HvhKbns4P4pFYcG0j4t
Input arguments: {'tracking_number': 'SF1234567890'}
>>>>>>>> EXECUTED FUNCTION get_logistics_info...
Call ID: call_05oJ1HvhKbns4P4pFYcG0j4t
Input arguments: {'tracking_number': 'SF1234567890'}
Output:
物流信息查询成功:
{
"status": "运输中",
"current_location": "北京分拣中心",
"estimated_arrival": "2024-01-18 14:00"
}
客户 (to chat_manager):
***** Response from calling tool (call_05oJ1HvhKbns4P4pFYcG0j4t) *****
物流信息查询成功:
{
"status": "运输中",
"current_location": "北京分拣中心",
"estimated_arrival": "2024-01-18 14:00"
}
**********************************************************************
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 物流跟踪专员
物流跟踪专员 (to chat_manager):
您的订单ORD001(包含1部iPhone 15)已经在运输途中,目前位于北京分拣中心。根据最新的物流信息,预计到达时间为2024年1月18日下午2点。由于可能存在物流延误,建议您稍作等待,并关注接下来的物流更新。如果配送时间继续推迟,请随时与我们联系以便进一步协助。感谢您的耐心与理解!
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客服接待员
客服接待员 (to chat_manager):
如果您有其他问题或需要进一步帮助,请随时告知我。感谢您的理解与支持!
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Next speaker: 客户
客户 (to chat_manager):
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
>>>>>>>> TERMINATING RUN (aa1a72b0–48bf–408d–a84e–3303d4da2811): Maximum rounds (12) reached
✅ 场景处理完成
================================================================================
🎉 企业级多智能体协同演示完成!
💡 该系统基于 AutoGen 框架,展示了电商客服系统中的多任务协同和跨部门协作
Process finished with exit code 0
5. 核心价值与结论
本演示成功展示了 AutoGen 框架在构建复杂、多智能体协作系统方面的强大能力:
自动化处理: 能够高效、准确地自动化处理常见的电商客服订单相关查询和问题。 智能路由与协作: 群组经理能根据问题本质,智能地将任务分配给最合适的专业智能体,并协调它们之间的信息传递和协作。 模块化与扩展性: 通过定义清晰的智能体角色和数据服务接口,系统具有良好的模块化设计,易于扩展新的功能或智能体。 提升效率与体验: 此类系统可显著提升电商客服效率,减少人工干预,并为客户提供快速、一致的响应。
综上所述,AutoGen 为开发企业级智能客服系统,特别是需要多角色协作处理的场景(如电商订单全流程),提供了一个极具潜力的技术框架。本演示为其在电商领域的实际应用提供了清晰的实现路径和验证。
6.完整代码
"""
企业级多智能体协同系统 – 电商客服订单处理案例
使用 AutoGen 框架实现多任务协同,包括:
1. 客服流程拆解
2. 数据查询联动
3. 跨部门协作调度
适用场景:电商客服系统订单问题处理
"""
import autogen
import json
import time
import os
from typing import Dict, List, Any
from datetime import datetime, timedelta
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
os.environ["OPENAI_API_KEY"] = "sk-某宝oai-key"
api_key = os.getenv('OPENAI_API_KEY')
# 配置 LLM
config_list = [
{
"model": "gpt-4o",
"api_key": api_key,
"base_url": "https://api.openai.com/v1"
}
]
llm_config = {
"config_list": config_list,
"temperature": 0.7,
"timeout": 60,
}
# 模拟企业数据库和API接口
class EnterpriseDataService:
"""企业数据服务模拟类"""
def __init__(self):
# 模拟订单数据
self.orders = {
"ORD001": {
"order_id": "ORD001",
"customer_id": "CUST001",
"status": "已发货",
"items": [{"product": "iPhone 15", "quantity": 1, "price": 7999}],
"total": 7999,
"shipping_address": "北京市朝阳区xxx街道",
"tracking_number": "SF1234567890",
"order_date": "2024-01-15",
"expected_delivery": "2024-01-18"
},
"ORD002": {
"order_id": "ORD002",
"customer_id": "CUST002",
"status": "处理中",
"items": [{"product": "MacBook Pro", "quantity": 1, "price": 15999}],
"total": 15999,
"shipping_address": "上海市浦东新区xxx路",
"tracking_number": None,
"order_date": "2024-01-16",
"expected_delivery": None
}
}
# 模拟库存数据
self.inventory = {
"iPhone 15": {"stock": 100, "warehouse": "华北仓"},
"MacBook Pro": {"stock": 0, "warehouse": "华东仓"}
}
# 模拟物流数据
self.logistics = {
"SF1234567890": {
"status": "运输中",
"current_location": "北京分拣中心",
"estimated_arrival": "2024-01-18 14:00"
}
}
def get_order_info(self, order_id: str) –> Dict:
"""查询订单信息"""
return self.orders.get(order_id, {})
def get_inventory_info(self, product: str) –> Dict:
"""查询库存信息"""
return self.inventory.get(product, {})
def get_logistics_info(self, tracking_number: str) –> Dict:
"""查询物流信息"""
return self.logistics.get(tracking_number, {})
def update_order_status(self, order_id: str, new_status: str) –> bool:
"""更新订单状态"""
if order_id in self.orders:
self.orders[order_id]["status"] = new_status
return True
return False
# 初始化企业数据服务
data_service = EnterpriseDataService()
# 定义工具函数
def get_order_info(order_id: str) –> str:
"""获取订单信息的工具函数"""
try:
order_info = data_service.get_order_info(order_id)
if order_info:
return f"订单信息查询成功:\\n{json.dumps(order_info, ensure_ascii=False, indent=2)}"
else:
return f"未找到订单号 {order_id} 的信息,请检查订单号是否正确。"
except Exception as e:
return f"查询订单信息时出错:{str(e)}"
def get_inventory_info(product: str) –> str:
"""获取库存信息的工具函数"""
try:
inventory_info = data_service.get_inventory_info(product)
if inventory_info:
return f"库存信息查询成功:\\n{json.dumps(inventory_info, ensure_ascii=False, indent=2)}"
else:
return f"未找到产品 {product} 的库存信息。"
except Exception as e:
return f"查询库存信息时出错:{str(e)}"
def get_logistics_info(tracking_number: str) –> str:
"""获取物流信息的工具函数"""
try:
logistics_info = data_service.get_logistics_info(tracking_number)
if logistics_info:
return f"物流信息查询成功:\\n{json.dumps(logistics_info, ensure_ascii=False, indent=2)}"
else:
return f"未找到运单号 {tracking_number} 的物流信息。"
except Exception as e:
return f"查询物流信息时出错:{str(e)}"
# 创建用户代理
user_proxy = autogen.UserProxyAgent(
name="客户",
human_input_mode="NEVER",
max_consecutive_auto_reply=10,
is_termination_msg=lambda x: x.get("content", "") and ("问题已解决" in x.get("content", "") or "TERMINATE" in x.get("content", "")),
code_execution_config={"work_dir": "temp", "use_docker": False},
)
# 定义智能体角色
# 1. 客服接待智能体
customer_service_agent = autogen.AssistantAgent(
name="客服接待员",
system_message="""你是一名专业的电商客服接待员。你的职责是:
1. 友好接待客户,了解客户问题
2. 对问题进行初步分类(订单查询、退换货、物流问题、产品咨询等)
3. 收集必要的订单信息(订单号、客户信息等)
4. 将问题转交给相应的专业团队处理
请用简洁明了的语言与客户沟通。当客户提到具体订单号时,请直接转交给订单查询专员处理。
如果问题涉及多个方面,请协调相关专员共同解决。
回复格式:简洁专业,直接回答客户问题。""",
llm_config=llm_config,
)
# 2. 订单查询智能体
order_query_agent = autogen.AssistantAgent(
name="订单查询专员",
system_message="""你是订单查询专员,负责处理所有订单相关的查询。你的职责包括:
1. 根据订单号查询订单详细信息
2. 解释订单状态和处理进度
3. 提供预计发货和到货时间
4. 识别需要其他部门协助的问题
当客户提供订单号时,请立即使用 get_order_info 函数查询订单信息。
根据查询结果,如果发现需要物流或库存部门协助,请主动通知相关专员。
回复格式:提供详细的订单信息,包括状态、商品、金额等关键信息。""",
llm_config=llm_config,
)
# 3. 物流跟踪智能体
logistics_agent = autogen.AssistantAgent(
name="物流跟踪专员",
system_message="""你是物流跟踪专员,专门处理配送和物流相关问题。你的职责包括:
1. 查询包裹物流状态和位置
2. 提供准确的配送时间预估
3. 处理配送异常和延误问题
4. 协调配送地址修改
当需要查询物流信息时,请使用 get_logistics_info 函数。
请提供实时、准确的物流信息,并主动提醒客户注意事项。
回复格式:提供详细的物流状态,包括当前位置、预计到达时间等。""",
llm_config=llm_config,
)
# 4. 库存管理智能体
inventory_agent = autogen.AssistantAgent(
name="库存管理专员",
system_message="""你是库存管理专员,负责处理库存相关问题。你的职责包括:
1. 查询产品库存状态
2. 预估补货时间
3. 协调缺货订单处理
4. 提供替代产品建议
当需要查询库存信息时,请使用 get_inventory_info 函数。
请提供准确的库存信息,并为缺货情况提供合理的解决方案。
回复格式:提供库存状态,如果缺货请说明预计补货时间。""",
llm_config=llm_config,
)
# 注册工具函数
autogen.register_function(
get_order_info,
caller=order_query_agent,
executor=user_proxy,
description="根据订单号获取订单详细信息"
)
autogen.register_function(
get_inventory_info,
caller=inventory_agent,
executor=user_proxy,
description="根据产品名称获取库存信息"
)
autogen.register_function(
get_logistics_info,
caller=logistics_agent,
executor=user_proxy,
description="根据运单号获取物流跟踪信息"
)
# 企业级客服场景测试
def run_scenario_with_autogen(scenario_name: str, customer_message: str):
"""使用 AutoGen 运行客服场景"""
print(f"\\n{'='*60}")
print(f"🎯 {scenario_name}")
print(f"{'='*60}")
print(f"客户问题:{customer_message}")
print(f"\\n🤖 AutoGen 多智能体协作处理:")
print("-" * 50)
try:
# 创建群组聊天
groupchat = autogen.GroupChat(
agents=[customer_service_agent, order_query_agent, logistics_agent, inventory_agent, user_proxy],
messages=[],
max_round=12,
speaker_selection_method="auto"
)
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)
# 开始对话
user_proxy.initiate_chat(
manager,
message=customer_message
)
print(f"\\n✅ 场景处理完成")
except Exception as e:
print(f"❌ 处理过程中出现错误: {e}")
print("这可能是由于API配置或网络问题导致的")
def main():
"""主函数 – 演示企业级多智能体协同"""
print("🏢 企业级多智能体协同系统 – 电商客服订单处理演示")
print("基于 AutoGen 框架实现")
print("="*80)
print("系统特性:")
print("✅ 1. 客服流程自动拆解")
print("✅ 2. 多数据源联动查询")
print("✅ 3. 跨部门智能协作")
print("✅ 4. 问题升级和路由")
print("✅ 5. AutoGen 框架支持")
# 检查API配置
if not api_key or api_key == "your-actual-api-key":
print("\\n⚠️ 警告:请在 .env 文件中配置正确的 V3_API_KEY")
print("当前将演示系统架构和数据查询功能")
# 演示数据查询功能
print(f"\\n📋 企业数据服务功能演示:")
print("=" * 50)
print("1. 订单查询演示:")
print(get_order_info("ORD001"))
print("\\n2. 库存查询演示:")
print(get_inventory_info("MacBook Pro"))
print("\\n3. 物流查询演示:")
print(get_logistics_info("SF1234567890"))
print(f"\\n📊 系统架构说明:")
print("=" * 50)
print("• 客服接待员:负责问题分类和初步处理")
print("• 订单查询专员:调用 get_order_info() 查询订单详情")
print("• 物流跟踪专员:调用 get_logistics_info() 查询物流状态")
print("• 库存管理专员:调用 get_inventory_info() 查询库存信息")
print("• AutoGen GroupChat:实现多智能体自动协作")
return
# 测试场景
scenarios = [
("场景1:订单状态查询", "你好,我想查询一下我的订单ORD001的状态,什么时候能到货?"),
("场景2:缺货问题处理", "我下单的MacBook Pro订单ORD002一直显示处理中,什么时候能发货?"),
("场景3:物流延误处理", "我的订单ORD001已经超过预计到货时间了,但还没收到货,这是怎么回事?")
]
for scenario_name, customer_message in scenarios:
run_scenario_with_autogen(scenario_name, customer_message)
time.sleep(2) # 避免API调用过于频繁
print(f"\\n{'='*80}")
print("🎉 企业级多智能体协同演示完成!")
print("💡 该系统基于 AutoGen 框架,展示了电商客服系统中的多任务协同和跨部门协作")
if __name__ == "__main__":
main()
评论前必须登录!
注册