云计算百科
云计算领域专业知识百科平台

基于 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_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
当前物流状态:运输中
当前位置:北京分拣中心
预计到达时间: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 (8c15084c6ed34f81afe2fb04bece67fc): 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 (421d40a8f5fb4762ad8f681516716e5c): 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 (aa1a72b048bf408da84e3303d4da2811): 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()

赞(0)
未经允许不得转载:网硕互联帮助中心 » 基于 AutoGen 框架实现 - 电商客服订单处理演示
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!