工单路由

本指南介绍如何利用 Claude 先进的自然语言理解能力,根据客户意图、紧急程度、优先级、客户画像等因素大规模分类客户支持工单。


定义是否使用 Claude 进行工单路由

以下是一些关键指标,表明您应该使用像 Claude 这样的 LLM 而不是传统的 ML 方法来进行分类任务:

您可用的标注训练数据有限

传统的 ML 流程需要大量的标注数据集。Claude 的预训练模型只需几十个标注示例即可有效分类工单,显著减少数据准备时间和成本。

您的分类类别可能会随时间变化或演进

一旦传统的 ML 方法建立起来,更改它是一项费力且数据密集的工作。另一方面,随着产品或客户需求的演进,Claude 可以轻松适应类别定义的变更或新类别,而无需对训练数据进行大量重新标注。

您需要处理复杂的非结构化文本输入

传统的 ML 模型通常难以处理非结构化数据,并需要大量的特征工程。Claude 先进的语言理解能力允许基于内容和上下文进行准确分类,而不是依赖严格的本体结构。

您的分类规则基于语义理解

传统的 ML 方法通常依赖词袋模型或简单模式匹配。当类别由条件而非示例定义时,Claude 擅长理解和应用底层规则。

您需要可解释的分类决策推理

许多传统的 ML 模型对其决策过程提供的洞察很少。Claude 可以为其分类决策提供人类可读的解释,建立对自动化系统的信任,并在需要时便于调整。

您希望更有效地处理边缘情况和模糊工单

传统的 ML 系统通常难以处理异常值和模糊输入,经常将其错误分类或默认归入通用类别。Claude 的自然语言处理能力使其能够更好地解释支持工单中的上下文和细微差别,可能减少需要人工干预的误路由或未分类工单的数量。

您需要多语言支持而无需维护单独的模型

传统的 ML 方法通常需要为每种支持的语言维护单独的模型或进行大量翻译流程。Claude 的多语言能力使其能够在无需单独模型或大量翻译流程的情况下对各种语言的工单进行分类,从而简化全球客户群的支持。


构建和部署您的 LLM 支持工作流

了解您当前的支持方式

在深入自动化之前,了解您现有的工单系统至关重要。首先调查您的支持团队当前如何处理工单路由。

考虑以下问题:

  • 使用什么标准来确定应用哪种 SLA/服务级别?
  • 工单路由是否用于确定工单发送到哪个支持层级或产品专家?
  • 是否有任何自动化规则或工作流已经到位?在什么情况下它们会失败?
  • 如何处理边缘情况或模糊工单?
  • 团队如何确定工单的优先级?

您对人类如何处理某些情况了解得越多,您就越能与 Claude 合作完成任务。

定义用户意图类别

明确定义的用户意图类别列表对于使用 Claude 准确分类支持工单至关重要。Claude 在您的系统内有效路由工单的能力与您系统类别定义的好坏直接相关。

以下是一些示例用户意图类别和子类别。

技术问题

  • 硬件问题
  • 软件错误
  • 兼容性问题
  • 性能问题

账户管理

  • 密码重置
  • 账户访问问题
  • 账单查询
  • 订阅变更

产品信息

  • 功能查询
  • 产品兼容性问题
  • 定价信息
  • 可用性查询

用户指导

  • 操作指南问题
  • 功能使用帮助
  • 最佳实践建议
  • 故障排除指导

反馈

  • 错误报告
  • 功能请求
  • 一般反馈或建议
  • 投诉

订单相关

  • 订单状态查询
  • 物流信息
  • 退货和换货
  • 订单修改

服务请求

  • 安装帮助
  • 升级请求
  • 维护安排
  • 服务取消

安全问题

  • 数据隐私查询
  • 可疑活动报告
  • 安全功能帮助

合规和法律

  • 监管合规问题
  • 服务条款查询
  • 法律文档请求

紧急支持

  • 关键系统故障
  • 紧急安全问题
  • 时效性问题

培训和教育

  • 产品培训请求
  • 文档查询
  • 网络研讨会或工作坊信息

集成和 API

  • 集成帮助
  • API 使用问题
  • 第三方兼容性查询

除了意图之外,工单路由和优先级还可能受到其他因素的影响,如紧急程度、客户类型、SLA 或语言。在构建自动化路由系统时,请务必考虑其他路由标准。

建立成功标准

与您的支持团队合作,定义清晰的成功标准,包括可衡量的基准、阈值和目标。

以下是使用 LLM 进行支持工单路由时的一些标准标准和基准:

分类一致性

此指标评估 Claude 随时间对类似工单分类的一致性。这对于维护路由可靠性至关重要。通过定期使用一组标准化输入测试模型来衡量,目标是一致性率达到 95% 或更高。

适应速度

此指标衡量 Claude 适应新类别或变化的工单模式的速度。通过引入新的工单类型并测量模型在这些新类别上达到令人满意的准确性(例如 >90%)所需的时间来测试。目标是在 50-100 个样本工单内适应。

多语言处理

此指标评估 Claude 准确路由多种语言工单的能力。衡量不同语言的路由准确性,目标是非主要语言的准确性下降不超过 5-10%。

边缘情况处理

此指标评估 Claude 在不寻常或复杂工单上的性能。创建一组边缘情况的测试集并衡量路由准确性,目标是在这些具有挑战性的输入上至少达到 80% 的准确性。

偏见缓解

此指标衡量 Claude 在不同客户群体之间路由的公平性。定期审核路由决策以发现潜在偏见,目标是在所有客户群体中保持一致的路由准确性(在 2-3% 以内)。

提示效率

在最小化 token 数量至关重要的情况下,此标准评估 Claude 在最小上下文下的表现。在提供不同数量上下文的情况下衡量路由准确性,目标是仅使用工单标题和简要描述即可达到 90% 以上的准确性。

可解释性评分

此指标评估 Claude 对其路由决策的解释质量和相关性。人工评分员可以对解释进行打分(例如 1-5 分),目标是平均得分达到 4 分或更高。

以下是一些无论是否使用 LLM 都可能有用的常见成功标准:

路由准确性

路由准确性衡量工单在首次尝试时被正确分配给适当团队或个人的频率。这通常以正确路由的工单占总工单的百分比来衡量。行业基准通常目标是 90-95% 的准确性,但这可能因支持结构的复杂性而异。

分配时间

此指标跟踪工单在提交后被分配的速度。更快的分配时间通常导致更快的解决和更高的客户满意度。一流的系统通常实现平均分配时间低于 5 分钟,许多系统目标是近乎即时的路由(通过 LLM 实现是可能的)。

重新路由率

重新路由率表示工单在初始路由后需要重新分配的频率。较低的比率表明初始路由更准确。目标是重新路由率低于 10%,表现最好的系统实现低至 5% 或更低的比率。

首次联系解决率

此指标衡量在与客户首次交互期间解决的工单百分比。更高的比率表示高效的路由和准备充分的支持团队。行业基准通常在 70-75% 之间,表现最好的达到 80% 或更高的比率。

平均处理时间

平均处理时间衡量从开始到解决工单所需的时间。高效的路由可以显著减少此时间。基准因行业和复杂性而异,但许多组织的目标是将非关键问题的平均处理时间保持在 24 小时以内。

客户满意度评分

通常通过交互后调查来衡量,这些分数反映客户对支持流程的整体满意度。有效的路由有助于提高满意度。目标是 CSAT 评分达到 90% 或更高,表现最好的通常达到 95% 以上的满意度。

升级率

此指标衡量工单需要升级到更高支持层级的频率。较低的升级率通常表示更准确的初始路由。力争升级率低于 20%,一流的系统实现 10% 或更低的比率。

客服人员生产力

此指标查看实施路由解决方案后客服人员可以有效处理的工单数量。改进的路由应提高生产力。通过跟踪每个客服人员每天或每小时解决的工单来衡量,目标是在实施新路由系统后提高 10-20%。

自助服务偏转率

此指标衡量在进入路由系统之前通过自助服务选项解决的潜在工单百分比。更高的比率表示有效的路由前分诊。目标是偏转率达到 20-30%,表现最好的达到 40% 或更高的比率。

每工单成本

此指标计算解决每个支持工单的平均成本。高效的路由应有助于随时间降低此成本。虽然基准差异很大,但许多组织的目标是在实施改进的路由系统后将每工单成本降低 10-15%。

选择合适的 Claude 模型

模型的选择取决于成本、准确性和响应时间之间的权衡。

许多客户发现 claude-haiku-4-5-20251001 是工单路由的理想模型,因为它是 Claude 4 系列中最快、最具成本效益的模型,同时仍能提供出色的结果。如果您的分类问题需要深厚的主题专业知识或大量意图类别的复杂推理,您可以选择更大的 Sonnet 模型

构建强大的提示词

工单路由是一种分类任务。Claude 分析支持工单的内容,并根据问题类型、紧急程度、所需专业知识或其他相关因素将其分类到预定义的类别中。

让我们编写一个工单分类提示词。我们的初始提示词应包含用户请求的内容,并返回推理和意图。

Tip

尝试在 Claude 控制台上的提示词生成器,让 Claude 为您编写初稿。

以下是工单路由分类提示词的示例:

def classify_support_request(ticket_contents):
    # 定义分类任务的提示词
    classification_prompt = f"""You will be acting as a customer support ticket classification system. Your task is to analyze customer support requests and output the appropriate classification intent for each request, along with your reasoning.

        Here is the customer support request you need to classify:

        <request>{ticket_contents}</request>

        Please carefully analyze the above request to determine the customer's core intent and needs. Consider what the customer is asking for has concerns about.

        First, write out your reasoning and analysis of how to classify this request inside <reasoning> tags.

        Then, output the appropriate classification label for the request inside a <intent> tag. The valid intents are:
        <intents>
        <intent>Support, Feedback, Complaint</intent>
        <intent>Order Tracking</intent>
        <intent>Refund/Exchange</intent>
        </intents>

        A request may have ONLY ONE applicable intent. Only include the intent that is most applicable to the request.

        As an example, consider the following request:
        <request>Hello! I had high-speed fiber internet installed on Saturday and my installer, Kevin, was absolutely fantastic! Where can I send my positive review? Thanks for your help!</request>

        Here is an example of how your output should be formatted (for the above example request):
        <reasoning>The user seeks information in order to leave positive feedback.</reasoning>
        <intent>Support, Feedback, Complaint</intent>

        Here are a few more examples:
        <examples>
        <example 2>
        Example 2 Input:
        <request>I wanted to write and personally thank you for the compassion you showed towards my family during my father's funeral this past weekend. Your staff was so considerate and helpful throughout this whole process; it really took a load off our shoulders. The visitation brochures were beautiful. We'll never forget the kindness you showed us and we are so appreciative of how smoothly the proceedings went. Thank you, again, Amarantha Hill on behalf of the Hill Family.</request>

        Example 2 Output:
        <reasoning>User leaves a positive review of their experience.</reasoning>
        <intent>Support, Feedback, Complaint</intent>
        </example 2>
        <example 3>

        ...

        </example 8>
        <example 9>
        Example 9 Input:
        <request>Your website keeps sending ad-popups that block the entire screen. It took me twenty minutes just to finally find the phone number to call and complain. How can I possibly access my account information with all of these popups? Can you access my account for me, since your website is broken? I need to know what the address is on file.</request>

        Example 9 Output:
        <reasoning>The user requests help accessing their web account information.</reasoning>
        <intent>Support, Feedback, Complaint</intent>
        </example 9>

        Remember to always include your classification reasoning before your actual intent output. The reasoning should be enclosed in <reasoning> tags and the intent in <intent> tags. Return only the reasoning and the intent.
        """

让我们分解此提示词的关键组成部分:

  • 我们使用 Python f 字符串创建提示词模板,允许将 ticket_contents 插入到 <request> 标签中。
  • 我们给 Claude 一个明确定义的角色,作为仔细分析工单内容以确定客户核心意图和需求的分类系统。
  • 我们指示 Claude 正确的输出格式,在此情况下是在 <reasoning> 标签中提供其推理和分析,然后在 <intent> 标签中提供适当的分类标签。
  • 我们指定有效的意图类别:"Support, Feedback, Complaint"、"Order Tracking" 和 "Refund/Exchange"。
  • 我们包含了一些示例(即少样本提示),说明输出应如何格式化,这提高了准确性和一致性。

我们希望将 Claude 的响应分成各个 XML 标签部分的原因是,这样我们可以使用正则表达式分别从输出中提取推理和意图。这允许我们在工单路由工作流中创建有针对性的后续步骤,例如仅使用意图来决定将工单路由给哪个人。

部署您的提示词

如果不部署到测试生产环境并运行评估,很难知道提示词的效果如何。

让我们构建部署结构。首先定义包装我们对 Claude 调用的方法签名。我们将使用已经开始编写的方法,该方法以 ticket_contents 作为输入,现在返回 reasoningintent 的元组作为输出。如果您有使用传统 ML 的现有自动化,您将希望遵循该方法签名。

import anthropic
import re

# 创建 Claude API 客户端实例
client = anthropic.Anthropic()

# 设置默认模型
DEFAULT_MODEL = "claude-haiku-4-5-20251001"


def classify_support_request(ticket_contents):
    # 定义分类任务的提示词
    classification_prompt = f"""You will be acting as a customer support ticket classification system.
        ...
        ... The reasoning should be enclosed in <reasoning> tags and the intent in <intent> tags. Return only the reasoning and the intent.
        """
    # 将提示词发送到 API 以分类支持请求。
    message = client.messages.create(
        model=DEFAULT_MODEL,
        max_tokens=500,
        temperature=0,
        messages=[{"role": "user", "content": classification_prompt}],
        stream=False,
    )
    reasoning_and_intent = message.content[0].text

    # 使用 Python 的正则表达式库提取 `reasoning`。
    reasoning_match = re.search(
        r"<reasoning>(.*?)</reasoning>", reasoning_and_intent, re.DOTALL
    )
    reasoning = reasoning_match.group(1).strip() if reasoning_match else ""

    # 同样地,也提取 `intent`。
    intent_match = re.search(r"<intent>(.*?)</intent>", reasoning_and_intent, re.DOTALL)
    intent = intent_match.group(1).strip() if intent_match else ""

    return reasoning, intent

此代码:

  • 使用您的 API 密钥创建客户端实例。
  • 定义一个 classify_support_request 函数,接受 ticket_contents 字符串。
  • 使用 classification_promptticket_contents 发送给 Claude 进行分类。
  • 从响应中提取模型的 reasoningintent 并返回。

由于我们需要在解析之前等待整个推理和意图文本生成完毕,因此设置 stream=False(默认值)。


评估您的提示词

提示词通常需要测试和优化才能达到生产就绪状态。要确定解决方案的就绪状态,请根据您之前建立的成功标准和阈值评估性能。

要运行评估,您需要测试用例来运行。本指南的其余部分假设您已经开发了测试用例

构建评估函数

本指南中的示例评估从三个关键指标衡量 Claude 的性能:

  • 准确性
  • 每次分类成本

您可能需要根据对您重要的其他因素在其他轴上评估 Claude。

为此,我们首先必须修改编写的脚本,并添加一个函数来比较预测意图和实际意图,并计算正确预测的百分比。我们还必须添加成本计算和时间测量功能。

import anthropic
import re

# 创建 Claude API 客户端实例
client = anthropic.Anthropic()

# 设置默认模型
DEFAULT_MODEL = "claude-haiku-4-5-20251001"


def classify_support_request(request, actual_intent):
    # 定义分类任务的提示词
    classification_prompt = f"""You will be acting as a customer support ticket classification system.
        ...
        ...The reasoning should be enclosed in <reasoning> tags and the intent in <intent> tags. Return only the reasoning and the intent.
        """

    message = client.messages.create(
        model=DEFAULT_MODEL,
        max_tokens=500,
        temperature=0,
        messages=[{"role": "user", "content": classification_prompt}],
    )
    usage = message.usage  # 获取 API 调用的使用统计信息,包括使用了多少输入和输出 token。
    reasoning_and_intent = message.content[0].text

    # 使用 Python 的正则表达式库提取 `reasoning`。
    reasoning_match = re.search(
        r"<reasoning>(.*?)</reasoning>", reasoning_and_intent, re.DOTALL
    )
    reasoning = reasoning_match.group(1).strip() if reasoning_match else ""

    # 同样地,也提取 `intent`。
    intent_match = re.search(r"<intent>(.*?)</intent>", reasoning_and_intent, re.DOTALL)
    intent = intent_match.group(1).strip() if intent_match else ""

    # 检查模型的预测是否正确。
    correct = actual_intent.strip() == intent.strip()

    # 返回 reasoning、intent、correct 和 usage。
    return reasoning, intent, correct, usage

让我们分解所做的编辑:

  • 我们将测试用例中的 actual_intent 添加到 classify_support_request 方法中,并设置比较以评估 Claude 的意图分类是否与我们的黄金标准意图分类匹配。
  • 我们提取了 API 调用的使用统计信息,以根据使用的输入和输出 token 计算成本。

运行评估

适当的评估需要明确的阈值和基准来确定什么是好的结果。上面的脚本给出了准确性、响应时间和每次分类成本的运行时值,但我们仍然需要明确建立的阈值。例如:

  • 准确性: 95%(100 次测试中)
  • 每次分类成本: 与当前路由方法相比平均(100 次测试中)降低 50%

拥有这些阈值使您能够快速轻松地大规模判断,以公正的经验主义确定哪种方法最适合您,以及可能需要进行哪些更改以更好地满足您的要求。


提升性能

在复杂场景中,考虑在标准提示工程技术护栏实施策略之外的额外策略来提升性能可能会有所帮助。以下是一些常见场景:

对 20+ 意图类别使用分类层次结构

随着类别的增长,所需的示例数量也会增加,可能导致提示词变得笨重。作为替代方案,您可以考虑使用混合分类器实现分层分类系统。

  1. 将您的意图组织在分类树结构中。
  2. 在树的每一层创建一系列分类器,实现级联路由方法。

例如,您可能有一个顶层分类器,将工单大致分为"技术问题"、"账单问题"和"一般查询"。然后每个类别可以有自己的子分类器来进一步细化分类。

  • 优点 - 更大的细微差别和准确性: 您可以为每个父路径创建不同的提示词,允许更有针对性和上下文特定的分类。这可以提高准确性并更细致地处理客户请求。

  • 缺点 - 增加的延迟: 请注意,多个分类器可能导致延迟增加,我们建议使用最快的模型 Haiku 来实施此方法。

使用向量数据库和相似性搜索检索处理高度可变的工单

尽管提供示例是提高性能的最有效方式,但如果支持请求高度可变,可能难以在单个提示词中包含足够的示例。

在这种情况下,您可以使用向量数据库从示例数据集中进行相似性搜索,并检索给定查询的最相关示例。

此方法在我们的分类配方中有详细概述,已被证明可以将性能从 71% 的准确性提高到 93% 的准确性。

具体考虑预期的边缘情况

以下是一些 Claude 可能错误分类工单的场景(可能还有其他对您的情况独特的场景)。在这些场景中,考虑在提示词中提供关于 Claude 应如何处理边缘情况的明确指令或示例:

客户发出隐含请求

客户通常间接表达需求。例如,"我已经等包裹两个多星期了"可能是对订单状态的间接请求。

  • 解决方案: 为 Claude 提供一些真实的客户示例以及底层意图是什么。如果您为特别细微的工单意图包含分类理由,Claude 可以更好地将逻辑泛化到其他工单,从而获得更好的结果。

Claude 优先处理情感而非意图

当客户表达不满时,Claude 可能优先解决情感而不是解决底层问题。

  • 解决方案: 为 Claude 提供关于何时优先处理客户情感的指示。可以是简单的内容,如"忽略所有客户情感。只专注于分析客户请求的意图以及客户可能询问的信息。"

多个问题导致问题优先级混淆

当客户在单次交互中提出多个问题时,Claude 可能难以识别主要关注点。

  • 解决方案: 澄清意图的优先级,以便 Claude 可以更好地对提取的意图进行排名并识别主要关注点。

将 Claude 集成到更大的支持工作流中

适当的集成要求您就基于 Claude 的工单路由脚本如何适应更大的工单路由系统的架构做出一些决定。有两种方式可以做到:

  • 基于推送: 您使用的支持工单系统(例如 Zendesk)通过向您的路由服务发送 webhook 事件来触发您的代码,然后对意图进行分类并路由。
    • 此方法更具 Web 可扩展性,但需要您公开一个公共端点。
  • 基于拉取: 您的代码根据给定的时间表拉取最新工单,并在拉取时进行路由。
    • 此方法更容易实现,但当拉取频率过高时可能会对支持工单系统产生不必要的调用,或者当拉取频率过低时可能过于缓慢。

对于这两种方法中的任何一种,您都需要将脚本包装在服务中。方法的选择取决于您的支持工单系统提供哪些 API。