paper2skills Playbook

客服对话决策树 - 从日志中自学策略

Skill-Customer-Journey-Decision-Tree · 09-DataAgent-LLM

experimentrecommendationmulti_agent客服与VOC推荐与搜索MAS与智能体工程风控与合规WF-C 客服分诊WF-D 选品扫描WF-E Review监控WF-H 复购增长
年化 ROI600 万元
实现难度⭐⭐⭐☆☆
业务优先级⭐⭐⭐☆☆
业务视角
适用角色数据分析师 / 运营负责人 · CEO · 供应链负责人
适用平台Amazon SP API · Shopify · TikTok Ads API · 多平台数据整合
什么情况下用数据需求太多,数据团队排期 2 周;非技术人员(采购/客服/运营)有数据问题但不会 SQL;重复报表占用大量时间
成功是什么样的业务方用自然语言自助查数据,常规报表自动化,数据驱动决策响应速度从「天」变「分钟」
业务痛点
数据需求排期太长不会 SQL 只能等数据团队老板临时要数据没法马上出分析师时间都花在取数上

1. 解决的问题

母婴出海电商客服 70% 工单是"退换货咨询"(尺码错、漏发、过敏等),人工处理成本高,响应慢

2. 核心算法逻辑

从历史客服对话日志中归纳出可执行的决策树策略,而非手工编写规则。三步骤:对话状态聚类(将历史多轮对话聚类为典型 dialog state) → 策略树归纳(用决策树学习从 state 到 action 的转移) → LLM 增强叶节点(每个叶节点由 LLM 生成自然语言回复模板,保持灵活性同时锁定流程)。

3. 业务应用场景

- 业务问题:母婴出海电商客服 70% 工单是"退换货咨询"(尺码错、漏发、过敏等),人工处理成本高,响应慢。统一模板回复又不灵活 - 数据要求:历史退换货对话日志(≥10 万轮) + 处理结果(批准/拒绝/转人工) + 用户满意度评分 - 决策树配置: - 状态特征:订单时长、商品品类、退换理由 intent、用户历史投诉次数 - 决策节点:7 天内 vs 7-30 天 vs 30+ 天;品类敏感度(食品/护肤敏感 vs 服装) - 叶节点 action:自动批准 / 要求图片 / 转人工 / 拒绝 - LLM 叶节点:根据用户语气生成共情回复 - 业务价值: - 70% 工单自动化处理,客

- 业务问题:新手妈妈咨询"宝宝 3 月夜醒频繁怎么办"、"5 月辅食怎么添加"等场景,平台希望提供专业回答但医疗建议有合规风险,需要决策树锁定边界 - 数据要求:母婴专家撰写的咨询脚本 + 历史咨询日志 + 转专家次数 - 决策树配置: - 状态:宝宝月龄 + 症状 intent + 紧急度(发烧 38.5+ vs 一般夜醒) - 决策节点:紧急度阈值(高 → 直接推送医院/儿科;中 → 提供专业建议;低 → 一般育儿知识) - 合规叶节点:LLM 生成回复但加入"非医学建议,建议咨询儿科医生"声明 - 业务价值:专业咨询覆盖率从 20% → 80%,新妈妈活跃留存提升 30-40%;年化

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • 易处:决策树本身工程成熟,sklearn 即可
  • 难处:对话状态特征化需要 NLU 模块(BERT 或 LLM intent extraction)
  • 难处:合规叶节点的医疗/法律边界需要法务介入审核

7. 代码模板

代码块数量:1 · 路径:未检测到

"""
Customer Journey Decision Tree 最小骨架
综合 ConvLab + Reward-based Dialog Policy + LLM-as-Leaf 方向
"""
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Callable, Dict, List, Optional, Tuple


@dataclass
class DialogState:
    user_intent: str
    days_since_order: int
    product_category: str
    user_complaint_history: int
    severity: str = "low"


@dataclass
class DialogAction:
    action_type: str
    response_template: str


@dataclass
class DecisionNode:
    feature: str
    threshold: Optional[float] = None
    categories: Optional[Dict[str, "DecisionNode"]] = None
    left: Optional["DecisionNode"] = None
    right: Optional["DecisionNode"] = None
    leaf_action: Optional[DialogAction] = None

    def is_leaf(self) -> bool:
        return self.leaf_action is not None


def build_return_policy_tree() -> DecisionNode:
    """硬编码的退换货决策树(生产中由日志学习得来)"""
    return DecisionNode(
        feature="days_since_order",
        threshold=7,
        left=DecisionNode(
            feature="product_category",
            categories={
                "food": DecisionNode(leaf_action=DialogAction("auto_approve", "您好,食品类 7 天内无理由退货已为您批准,退款将在 24 小时内到账")),
                "clothing": DecisionNode(leaf_action=DialogAction("require_photo", "请提供商品图片以便快速处理")),
                "default": DecisionNode(leaf_action=DialogAction("auto_approve", "已为您批准退货申请")),
            },
        ),
        right=DecisionNode(
            feature="user_complaint_history",
            threshold=3,
            left=DecisionNode(leaf_action=DialogAction("manual_review", "您的申请已提交人工审核,1-2 工作日反馈")),
            right=DecisionNode(leaf_action=DialogAction("transfer_human", "为您转接资深客服处理")),
        ),
    )


def traverse_tree(node: DecisionNode, state: DialogState) -> DialogAction:

8. 论文来源

未自动抽取;请查看原始 Skill 卡片。