当前位置: 首页 > news >正文

基于 AutoGen 框架实现 - 电商客服订单处理演示

文章目录

  • 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_statusreturn Truereturn 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
- 当前物流状态:运输中
- 当前位置:北京分拣中心
- 预计到达时间:202411814: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)已经在运输途中,目前位于北京分拣中心。根据最新的物流信息,预计到达时间为2024118日下午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_statusreturn Truereturn 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()
http://www.dtcms.com/a/333325.html

相关文章:

  • 【Java虚拟机】垃圾回收机制
  • 从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.15
  • 安全防范方案
  • 网络安全蓝队常用工具全景与实战指南
  • 从C到C++入门:C++有而C语言没有的基础知识总结
  • 机器学习之 KNN 算法学习总结
  • CK_Label_v51(外接供电版)
  • C#WPF实战出真汁07--【系统设置】--菜品类型设置
  • OpenCV---morphologyEx形态学操作
  • MCP Server Java 开发框架的体验比较(spring ai mcp 和 solon ai mcp)和实现示例对比
  • Linux网络基础概念
  • Navicat 询问 AI | 轻松修复 SQL 错误
  • go应用注册到kong
  • Linux入门(十九)定时备份数据库
  • week1-[循环嵌套]画正方形
  • Java调用bat执行python脚本
  • 阿里云出里两款新的云服务器
  • 数据库(3)
  • 【Canvas与玻璃光】铝圈蓝底玻璃光按钮
  • 储能逆变器中的无功补偿,实现原理
  • 大数据分析:电商商品数据分析实操指南之获取淘宝商品数据API
  • 【计算机视觉与深度学习实战】01基于直方图优化的图像去雾技术
  • 【Golang】:数据类型
  • 如何写好大模型的提示词prompt
  • ollama大模型
  • 【昇腾】Atlas 500 A2智能小站M.2 SATA盘启动Ubuntu22.04系统莫名丢卡问题处理_20250815
  • GTSAM中先验位姿(Prior Factor)详解应用
  • STC8单片机驱动I2C屏幕:实现时间、日期与温湿度显示
  • 单片机闪烁灯实验
  • 健身房预约系统SSM+Mybatis实现(二、增删改查的具体实现)