电商智能客服实战(一)—概要设计
电商智能客服实战(二)需求感知模块模型微调实现
电商智能客服实战(三)-需求感知模块具体实现
一、模块整体设计思路
1.1 模块定位与核心价值
• 业务目标:将需求感知模块输出的意图(intent)、实体(entities)、情感(sentiment)转化为可执行动作序列
• 技术价值:实现规则驱动与LLM驱动的双模式决策,构建灵活的多工具执行体系
1.2 模块交互关系
[需求感知模块]
│
▼ 意图/实体/情感
[规划模块] → 生成步骤序列(PlanStep)
│
▼ 步骤指令
[工具模块] → 返回执行结果(ToolResult)
│
▼ 结构化数据
[应答生成模块]
二、规划模块实现详解
2.1 核心类设计
class PlanningEngine:
def __init__(self):
self.rules = {} # 规则配置
self.tool_mapping = {} # 意图-工具映射表
self.llm = ChatTongyi() # 通义千问模型实例
# 规则引擎(核心决策逻辑)
def rule_plan(self, sentiment, intent, entities) -> List[PlanStep]
# LLM动态规划(复杂场景处理)
def generate_plan(self, sentiment, intent, entities) -> List[PlanStep]
2.2 规则引擎实现逻辑
2.2.1 规则加载机制
def _load_rules(self, path):
"""从YAML文件加载规则配置(示例规则结构)"""
return {
"escalation": {
"threshold": 0.8, # 情感强度阈值
"action": "notify_supervisor" # 触发动作
}
}
2.2.2 规则应用流程
2.2.3 代码实现说明
def rule_plan(self, sentiment, intent, entities):
# 情感阈值判断
if sentiment.get("intensity", 0) > self.rules["escalation"]["threshold"]:
return [PlanStep(...)] # 强制升级
# 常规意图映射
tool = self.tool_mapping.get(intent, "rag")
return [PlanStep(
step_id="step_1",
description=intent,
tool_required=tool,
entities=entities
)]
2.3 LLM动态规划实现
2.3.1 Prompt工程实现
# 模板设计要点:
# 1. 明确输出格式要求
# 2. 约束步骤数量(最多3步)
prompt_template = PromptTemplate(
input_variables=["intent", "entities", "sentiment"],
template="""请生成处理步骤:
意图:{intent}
实体:{entities}
情感:{sentiment}
要求:
- 使用中文短句描述
- 每行一个步骤
- 最多3个步骤"""
)
2.3.2 步骤解析逻辑
# 示例LLM输出:
"""
1. 验证订单号有效性
2. 查询订单物流信息
3. 生成查询报告
"""
steps = [
PlanStep(step_id="step_0", ...),
PlanStep(step_id="step_1", ...),
PlanStep(step_id="step_2", ...)
]
2.3.3 工具映射策略
def _map_tool(self, step_desc: str) -> str:
"""基于步骤描述的关键词匹配"""
if "订单" in step_desc and ("查询" or "验证") in step_desc:
return "order_query"
elif "工单" in step_desc and "创建" in step_desc:
return "work_order"
return "rag"
三、工具模块实现详解
3.1 执行器核心架构
class ToolExecutor:
def __init__(self):
# API端点配置
self.endpoints = {
"order_query": "http://api.example.com/order",
"work_order": "http://api.example.com/workorder",
"notify_supervisor": "http://api.example.com/notify"
}
# 知识库组件(示例伪代码)
self.rag = "示例向量库"
def execute(self, step: PlanStep) -> ToolResult:
# 统一执行入口
if step.tool_required in self.endpoints:
return self._call_api(step)
elif step.tool_required == "rag":
return self._rag_search(step)
else:
return ToolResult(status="error", ...)
3.2 API工具执行流程
3.3 RAG工具实现
def _rag_search(self, step):
"""知识库检索逻辑(当前为示例实现)"""
return ToolResult(
status="success",
data={"text": self.rag} # 实际应替换为向量检索
)
3.4 异常处理机制
try:
resp = requests.get(url, timeout=3)
if resp.status_code != 200:
# 记录错误日志
return ToolResult(status="error", message=f"API响应异常:{resp.status_code}")
except requests.exceptions.Timeout:
return ToolResult(status="error", message="请求超时")
except Exception as e:
return ToolResult(status="error", message=str(e))
四、业务流程完整示例
4.1 典型业务场景
用户输入:“我的订单12345为什么还没发货?”
需求感知输出:
• intent: 订单查询
• entities: {“order_number”: “12345”}
• sentiment: {“sentiment”: “负面”, “intensity”: 0.75}
4.2 规划模块处理流程
- 规则引擎判断情感强度0.75 < 0.8,不触发升级
- 匹配意图"订单查询"到order_query工具
- 生成步骤:
PlanStep( step_id="step_1", description="查询订单状态", tool_required="order_query", entities={"order_number": "12345"} )
4.3 工具模块执行
- 调用订单查询API:
GET http://api.example.com/order/12345
- 返回结果:
{ "status": "success", "data": { "order_status": "已发货", "tracking_number": "SF123456789" } }
五、扩展性设计
5.1 规则动态加载
# 实现热更新能力
def reload_rules(self, new_rules_path):
self.rules = self._load_rules(new_rules_path)
logging.info("规则配置已更新")
5.2 工具扩展方法
- 新增API端点:
self.endpoints["new_tool"] = "http://new.api.endpoint"
- 添加工具映射:
Config.tool_mapping["新意图"] = "new_tool"
5.3 性能优化建议
# 连接池优化(在ToolExecutor中添加)
self.session = requests.Session()
adapter = requests.adapters.HTTPAdapter(
pool_connections=50,
pool_maxsize=100
)
self.session.mount('http://', adapter)