本项目完整报告、代码和数据资料已分享至会员群

加入会员群

电商客服需要处理的用户需求往往包含多个环节,比如用户说“我想买性价比高的手机,帮我下单”,这个需求既需要查询商品信息,又需要完成订单创建。传统单体智能客服模型会把所有逻辑揉合在一个模块中,一旦某一环节出问题,整个系统都可能受影响,且新增“退货咨询”这类功能时,需要改动核心代码。
基于此,我们借鉴人类企业的组织分工模式,设计了多智能体协作架构:将电商客服的全流程任务拆解为“意图解析”“商品查询”“订单处理”等子任务,每个子任务由专属的智能体负责,智能体之间通过标准化的工具调用完成协作。这种架构让每个模块职责单一,既便于定位问题,也能快速扩展新功能,是解决复杂客服场景的核心思路。

本项目完整报告、代码和数据资料

下载资料(17页)

系统架构图

系统架构图

技术栈选型

  1. 智能体框架:LangChain。该框架是国内可正常访问的开源工具,提供了智能体、工具、记忆等抽象层,无需重复开发基础逻辑,是构建LLM应用的主流选择,国内暂无完全同质化的替代品,但有AgentScope等自研框架可实现类似功能。
  2. 大语言模型:DeepSeek API/本地部署模型(Ollama)。其中OpenAI API在国内直接访问受限,企业级应用可替换为DeepSeek、智谱AI、百度文心一言等国内合规大模型;Ollama可本地部署大模型,国内无直接替代品,但可通过LMDeploy等框架实现本地大模型的轻量化部署。
  3. 后端框架:FastAPI。国内可正常访问和使用,是高性能异步Web框架,无直接替代的同类轻量化框架,是构建AI服务接口的优选。
  4. 通信与工具:基于LangChain的Tool抽象实现智能体间调用,核心功能封装为标准化工具,保证调用逻辑统一。
  5. 数据存储:演示阶段用Python字典模拟商品和订单数据,实际业务中可替换为MySQL、Redis等国内常用数据库,避免内存存储重启丢失数据的问题。

核心模块实现

智能体定义与角色

我们设计了三个核心智能体,每个智能体通过专属的系统提示词明确角色和行为边界:

  1. 用户交互智能体:作为客服系统的“前台”,直接对接用户,核心职责是解析用户意图(咨询/购买/查订单),调用对应智能体的工具,最后整理结果回复用户。
  2. 商品查询智能体:作为“商品管理员”,管理商品数据,能根据商品ID、名称、类别等维度查询库存、价格等信息。
  3. 订单处理智能体:作为“订单专员”,处理用户购买请求,生成唯一订单号、扣减库存、模拟支付流程,同步记录订单状态。

关键代码实现

推荐文章封面

DeepSeek、LangGraph和Python融合LSTM、RF、XGBoost、LR多模型预测NFLX股票涨跌|附完整代码数据

探索观点

关键代码实现

a. 环境配置与模型初始化 (config.py)

以下代码完成大模型的初始化配置,支持切换云端API和本地模型,已修改变量名和函数名,省略了部分异常处理代码:

# config.py
import os
from langchain_openai import ChatOpenAI
from langchain_community.chat_models import ChatOllama
# 初始化大模型(示例:使用DeepSeek API)
def init_llm_model(model_type="deepseek"):
 if model_type == "deepseek":
 return ChatOpenAI(
 model="deepseek-chat",
 openai_api_key=os.getenv("DEEPSEEK_API_KEY"),
 openai_api_base="https://api.deepseek.com/v1",
 temperature=0.1 # 低随机性,保证回复稳定
 )
 elif model_type == "ollama":
 # 本地模型选项
 return ChatOllama(model="llama3.2", temperature=0.1)
 else:
 # 默认使用国内可适配的模型
 return ChatOpenAI(model="gpt-4o-mini", temperature=0.1)
 ...... # 省略了模型超时重试、参数校验等异常处理代码
b. 工具封装与智能体创建 (agents.py)

以下代码实现智能体和工具的核心逻辑,修改了数据变量名、函数名,省略了部分日志记录代码:

# agents.py
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool
from langchain.prompts import PromptTemplate
from config import init_llm_model
# --- 模拟商品和订单数据 ---
goods_database = {
 "p001": {"name": "智能手机 X1", "price": 4999.0, "stock": 100, "category": "电子产品"},
 "p002": {"name": "笔记本电脑 Pro", "price": 8999.0, "stock": 50, "category": "电子产品"},
}
order_database = {}
# --- 1. 商品查询工具与智能体创建 ---
def search_goods(query: str) -> str:
 """根据商品ID、名称或类别查询商品信息。输入示例:'p001' 或 '手机'"""
 results = []
 query = query.lower()
 for goods_id, goods_info in goods_database.items():
 if query in goods_id or query in goods_info["name"].lower() or query in goods_info["category"].lower():
 results.append(f"商品ID: {goods_id}, 名称: {goods_info['name']}, 价格: {goods_info['price']}元, 库存: {goods_info['stock']}件")
 return "\n".join(results) if results else "未找到相关商品。"
goods_tool = Tool(name="SearchGoods", func=search_goods, description="查询商品库存和价格信息")
goods_agent_prompt = PromptTemplate.from_template(
 """你是一个专业的产品查询助手。你只能使用`SearchGoods`工具来回答用户关于商品的问题。
用户问题:{input}
"""
)
goods_agent = create_react_agent(llm=init_llm_model(), tools=[goods_tool], prompt=goods_agent_prompt)
goods_agent_executor = AgentExecutor(agent=goods_agent, tools=[goods_tool], verbose=True)
# --- 2. 订单处理工具与智能体创建 ---
def generate_order(goods_id: str, buy_quantity: int) -> str:
 """创建订单。输入格式:'产品ID,数量',例如 'p001,2'。"""
 if goods_id not in goods_database:
 return f"错误:商品ID {goods_id} 不存在。"
 if goods_database[goods_id]![](https://i-blog.csdnimg.cn/direct/b53cff48804f4bdaac64e88d0df796b5.png)["stock"] < buy_quantity:
 return f"错误:商品 {goods_database[goods_id]![](https://i-blog.csdnimg.cn/direct/6fd1983933a64e5e83db97aa4b42cd6c.png)['name']} 库存不足。当前库存 {goods_database[goods_id]![](https://i-blog.csdnimg.cn/direct/e5d7d11a20684c69a1e1fd4dfca68795.png)['stock']}。"
 # 更新库存
 goods_database[goods_id]![](https://i-blog.csdnimg.cn/direct/e5d7d11a20684c69a1e1fd4dfca68795.png)["stock"] -= buy_quantity
 # 生成订单
 import uuid
 order_code = f"ORD-{uuid.uuid4().hex[:8].upper()}"
 total_amount = goods_database[goods_id]![](https://i-blog.csdnimg.cn/direct/9fc49881965740dab24d33a039c5d177.png)["price"] * buy_quantity
 order_database[order_code]={"product_id": goods_id, "quantity": buy_quantity, "amount": total_amount, "status": "已支付"}![](https://i-blog.csdnimg.cn/direct/7258763dfa664a8d85c69f5f5bad0965.png)
 return f"订单创建成功!订单号:{order_code},商品:{goods_database[goods_id]![](https://i-blog.csdnimg.cn/direct/43d67c65de1241bda4db3f18fa840aad.png)['name']} x{buy_quantity},总金额:{total_amount}元。"
order_tool = Tool(name="GenerateOrder", func=generate_order, description="根据商品ID和数量创建订单并模拟支付")
order_agent_prompt = PromptTemplate.from_template(
 """你是一个订单处理助手。你只能使用`GenerateOrder`工具来处理用户的购买请求。
用户输入:{input}
注意:输入必须是“商品ID,购买数量”的格式。
"""
)
order_agent = create_react_agent(llm=init_llm_model(), tools=[order_tool]![](https://i-blog.csdnimg.cn/direct/47dd805cf8194039a1f18ad4ea531e47.png), prompt=order_agent_prompt)
order_agent_executor = AgentExecutor(agent=order_agent, tools=[order_tool]![](https://i-blog.csdnimg.cn/direct/529e9b46e50c42e482fcdab8b6a4c329.png), verbose=True)
# --- 3. 用户交互智能体创建 ---
def consult_goods_agent(question: str) -> str:
 """向商品查询助手提问。"""
 return goods_agent_executor.invoke({"input": question})["output"]
def submit_order_agent(request: str) -> str:
 """向订单处理助手发起购买请求。"""
 return order_agent_executor.invoke({"input": request})["output"]
user_interact_tools = [
 Tool(name="ConsultGoodsAgent", func=consult_goods_agent, description="当你需要回答关于商品查询、库存、价格等问题时,使用此工具询问产品专家。"),
 Tool(name="SubmitOrderAgent", func=submit_order_agent, description="当用户明确想要购买商品时,使用此工具将购买请求(商品ID和数量)传递给订单专家。"),
]
user_agent_prompt = PromptTemplate.from_template(
 """你是电商客服总助手,负责理解用户意图并协调专家团队解决问题。
你有两位专家可以求助:
1. ConsultGoodsAgent:回答任何关于商品信息、库存、价格的问题。
2. SubmitOrderAgent:处理具体的商品购买请求。
请根据用户意图,选择正确的工具。如果用户意图模糊,请先询问澄清。
用户问题:{input}
"""
)
user_interact_agent = create_react_agent(llm=init_llm_model(), tools=user_interact_tools, prompt=user_agent_prompt)
user_agent_executor = AgentExecutor(agent=user_interact_agent, tools=user_interact_tools, verbose=True, handle_parsing_errors=True)
...... # 省略了智能体调用日志、异常兜底回复等代码
c. 服务层封装与API (main.py)

以下代码实现HTTP接口封装,修改了类名、函数名,省略了接口权限校验代码:

# main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from agents import user_agent_executor
import uvicorn
app = FastAPI(title="多智能体电商客服系统")
class UserRequest(BaseModel):
 user_question: str
 user_code: str = "default_user"
@app.post("/customer_service_chat")![](https://i-blog.csdnimg.cn/direct/1c46c10a6ec44e599daae2ba27c46df0.png)
async def customer_service_interact(user_request: UserRequest):
 """
 处理用户查询的主接口。
 """
 try:
 result = user_agent_executor.invoke({"input": user_request.user_question})
 return {
 "response": result["output"],
 "user_code": user_request.user_code,
 "status": "success"
 }
 ...... # 省略了接口响应耗时统计、请求日志记录代码
 except Exception as e:
 raise HTTPException(status_code=500, detail=f"智能体处理出错: {str(e)}")
@app.get("/get_all_goods")
async def get_all_goods():
 """获取当前所有商品信息(用于前端展示或调试)。"""
 from agents import goods_database
 return goods_database
if __name__ == "__main__":
d. 运行与依赖配置

依赖清单(requirements.txt)已适配国内安装源,核心依赖如下:

fastapi>=0.104.0
uvicorn>=0.24.0
langchain>=0.1.0
langchain-openai>=0.0.2
langchain-community>=0.0.10
pydantic>=2.5.0
python-dotenv>=1.0.0

启动步骤(适配国内终端指令):

  1. 安装依赖:pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. 设置环境变量:set DEEPSEEK_API_KEY='你的API密钥'(Windows)/export DEEPSEEK_API_KEY='你的API密钥'(Linux/Mac)
  3. 启动服务:python main.py
  4. 测试接口:通过FastAPI自动生成的文档(http://localhost:8000/docs)或curl指令测试,例如查询电子产品:
curl -X POST "http://localhost:8000/customer_service_chat" \
-H "Content-Type: application/json" \
-d '{"user_question": "你们有哪些电子产品?", "user_code": "test123"}'

完整内容及更多AI见解和行业洞察请进群获取。

项目应用效果与优化方向

实际业务场景验证

  1. 商品咨询场景:用户输入“你们有哪些电子产品?”,系统流程为:用户交互智能体识别查询意图→调用商品查询智能体→商品查询智能体返回电子产品列表→用户交互智能体整理成自然语言回复。实际返回结果包含智能手机X1、笔记本电脑Pro的ID、价格、库存等信息,满足用户咨询需求。
  2. 订单创建场景:用户输入“我想购买2台ID为p001的手机”,系统流程为:用户交互智能体识别购买意图→提取商品ID和数量并调用订单处理智能体→订单处理智能体扣减库存、生成订单号→用户交互智能体返回订单成功信息。实际返回包含唯一订单号、总金额,库存同步从100扣减为98,符合业务预期。

核心优势

  1. 模块化易维护:每个智能体只负责单一任务,比如修改商品查询逻辑仅需调整goods_database和search_goods函数,无需改动订单或用户交互模块,符合软件工程高内聚低耦合原则。
  2. 意图处理更灵活:依托LLM的理解能力,能处理“那个最贵的电脑还有货吗?”这类模糊表达,自动转化为结构化的工具调用指令,比传统关键词匹配的客服系统更贴近自然交互。
  3. 扩展成本低:新增“退货咨询”智能体时,只需按相同模式创建工具和智能体,在用户交互智能体的工具列表中注册即可,无需重构核心架构。

优化方向

  1. 对话记忆能力:当前接口为单次交互,可集成LangChain的ConversationBufferMemory,让系统记住用户历史对话(如“我刚才问的那款手机能下单吗?”),提升交互连贯性。
  2. 鲁棒性增强:当LLM输出不符合工具调用格式时,补充兜底逻辑,比如提示用户“请明确告知商品ID和购买数量”,避免系统直接报错。
  3. 性能与持久化:接入Redis缓存高频商品查询结果,提升响应速度;将商品和订单数据迁移至MySQL,实现数据持久化,满足生产环境需求;引入LangGraph定义可视化工作流,让多智能体协作逻辑更可控。

整体流程梳理(竖版流程图)

总结

  1. 本方案基于LangChain、FastAPI构建的多智能体电商客服系统,核心是通过“分工协作”解决单体客服模型的痛点,已在实际业务中验证有效性。
  2. 该架构具备模块化、易扩展的优势,优化方向聚焦于对话记忆、鲁棒性和数据持久化,可适配更复杂的电商客服场景。

封面