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

以下是一些关键指标,表明您应该使用像 Claude 这样的 LLM 而不是传统的机器学习方法来完成分类任务:
传统机器学习流程需要大量标记数据集。Claude 的预训练模型只需几十个标记示例就能有效分类工单,显著减少数据准备时间和成本。
一旦建立了传统机器学习方法,改变它是一项费力且数据密集的工作。另一方面,随着您的产品或客户需求的发展,Claude 可以轻松适应类别定义的变化或新类别,无需大量重新标记训练数据。
传统机器学习模型通常难以处理非结构化数据,需要大量特征工程。Claude 的高级语言理解能力允许基于内容和上下文进行准确分类,而不是依赖严格的本体结构。
传统机器学习方法通常依赖词袋模型或简单模式匹配。当类别由条件而非示例定义时,Claude 擅长理解和应用底层规则。
许多传统机器学习模型对其决策过程提供很少的洞察。Claude 可以为其分类决策提供人类可读的解释,建立对自动化系统的信任,并在需要时便于轻松适应。
传统机器学习系统通常难以处理异常值和模糊输入,经常错误分类或默认为通用类别。Claude 的自然语言处理能力使其能够更好地解释支持工单中的上下文和细微差别,可能减少需要人工干预的错误路由或未分类工单数量。
传统机器学习方法通常需要为每种支持的语言建立单独的模型或进行大量翻译过程。Claude 的多语言能力使其能够分类各种语言的工单,无需单独的模型或大量翻译过程,简化了对全球客户群的支持。

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

了解您当前的支持方法

在深入自动化之前,了解您现有的工单系统至关重要。首先调查您的支持团队目前如何处理工单路由。 考虑以下问题:
  • 使用什么标准来确定应用什么 SLA/服务产品?
  • 工单路由是否用于确定工单分配给哪个支持层级或产品专家?
  • 是否已有任何自动化规则或工作流?在什么情况下它们会失败?
  • 如何处理边缘情况或模糊工单?
  • 团队如何优先处理工单?
您对人类如何处理某些情况了解得越多,就越能更好地与 Claude 合作完成任务。

定义用户意图类别

明确定义的用户意图类别列表对于使用 Claude 进行准确的支持工单分类至关重要。Claude 在您系统内有效路由工单的能力与您系统类别的明确定义程度成正比。 以下是一些示例用户意图类别和子类别。
  • 硬件问题
  • 软件错误
  • 兼容性问题
  • 性能问题
  • 密码重置
  • 账户访问问题
  • 账单查询
  • 订阅变更
  • 功能查询
  • 产品兼容性问题
  • 价格信息
  • 可用性查询
  • 操作方法问题
  • 功能使用协助
  • 最佳实践建议
  • 故障排除指导
  • 错误报告
  • 功能请求
  • 一般反馈或建议
  • 投诉
  • 订单状态查询
  • 运输信息
  • 退货和换货
  • 订单修改
  • 安装协助
  • 升级请求
  • 维护安排
  • 服务取消
  • 数据隐私查询
  • 可疑活动报告
  • 安全功能协助
  • 监管合规问题
  • 服务条款查询
  • 法律文档请求
  • 关键系统故障
  • 紧急安全问题
  • 时间敏感问题
  • 产品培训请求
  • 文档查询
  • 网络研讨会或工作坊信息
  • 集成协助
  • API 使用问题
  • 第三方兼容性查询
除了意图之外,工单路由和优先级也可能受到其他因素的影响,如紧急程度、客户类型、SLA 或语言。在构建自动化路由系统时,请务必考虑其他路由标准。

建立成功标准

与您的支持团队合作,定义明确的成功标准,包括可衡量的基准、阈值和目标。 以下是使用 LLM 进行支持工单路由时的一些标准标准和基准:
此指标评估 Claude 随时间对相似工单分类的一致性。这对于维护路由可靠性至关重要。通过定期使用一组标准化输入测试模型来衡量,目标是达到 95% 或更高的一致性率。
这衡量 Claude 适应新类别或变化的工单模式的速度。通过引入新的工单类型并测量模型在这些新类别上达到满意准确率(例如 >90%)所需的时间来测试。目标是在 50-100 个样本工单内适应。
这评估 Claude 准确路由多种语言工单的能力。测量不同语言的路由准确率,目标是非主要语言的准确率下降不超过 5-10%。
这评估 Claude 在异常或复杂工单上的表现。创建边缘情况测试集并测量路由准确率,目标是在这些具有挑战性的输入上至少达到 80% 的准确率。
这衡量 Claude 在不同客户人口统计数据间路由的公平性。定期审核路由决策的潜在偏见,目标是在所有客户群体中保持一致的路由准确率(在 2-3% 范围内)。
在最小化令牌数量至关重要的情况下,此标准评估 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-3-5-haiku-20241022 是工单路由的理想模型,因为它是 Claude 3 系列中最快且最具成本效益的模型,同时仍能提供出色的结果。如果您的分类问题需要深度主题专业知识或大量意图类别的复杂推理,您可以选择更大的 Sonnet 模型

构建强大的提示

工单路由是一种分类任务。Claude 分析支持工单的内容,并根据问题类型、紧急程度、所需专业知识或其他相关因素将其分类到预定义类别中。 让我们编写一个工单分类提示。我们的初始提示应包含用户请求的内容,并返回推理和意图。
Claude Console 上尝试提示生成器,让 Claude 为您编写初稿。
以下是工单路由分类提示的示例:
def classify_support_request(ticket_contents):
    # Define the prompt for the classification task
    classification_prompt = f"""您将充当客户支持工单分类系统。您的任务是分析客户支持请求,并为每个请求输出适当的分类意图以及您的推理。

        以下是您需要分类的客户支持请求:

        <request>{ticket_contents}</request>

        请仔细分析上述请求以确定客户的核心意图和需求。考虑客户询问的内容以及关心的问题。

        首先,在 <reasoning> 标签内写出您对如何分类此请求的推理和分析。

        然后,在 <intent> 标签内输出请求的适当分类标签。有效意图为:
        <intents>
        <intent>支持、反馈、投诉</intent>
        <intent>订单跟踪</intent>
        <intent>退款/换货</intent>
        </intents>

        一个请求只能有一个适用的意图。只包含最适用于请求的意图。

        例如,考虑以下请求:
        <request>您好!我在周六安装了高速光纤互联网,我的安装员 Kevin 非常棒!我可以在哪里发送我的正面评价?谢谢您的帮助!</request>

        以下是您的输出应如何格式化的示例(针对上述示例请求):
        <reasoning>用户寻求信息以便留下正面反馈。</reasoning>
        <intent>支持、反馈、投诉</intent>

        以下是更多示例:
        <examples>
        <example 2>
        示例 2 输入:
        <request>我想写信亲自感谢您在上周末我父亲葬礼期间对我家人表现出的同情。您的员工在整个过程中如此体贴和乐于助人;这真的减轻了我们肩上的负担。探视手册很漂亮。我们永远不会忘记您对我们的善意,我们非常感谢仪式进行得如此顺利。再次感谢,Amarantha Hill 代表 Hill 家族。</request>

        示例 2 输出:
        <reasoning>用户对他们的体验留下正面评价。</reasoning>
        <intent>支持、反馈、投诉</intent>
        </example 2>
        <example 3>

        ...

        </example 8>
        <example 9>
        示例 9 输入:
        <request>您的网站不断发送阻挡整个屏幕的广告弹窗。我花了二十分钟才最终找到电话号码来打电话投诉。在所有这些弹窗的情况下,我怎么可能访问我的账户信息?您能为我访问我的账户吗,因为您的网站坏了?我需要知道档案中的地址是什么。</request>

        示例 9 输出:
        <reasoning>用户请求帮助访问他们的网络账户信息。</reasoning>
        <intent>支持、反馈、投诉</intent>
        </example 9>

        记住始终在实际意图输出之前包含您的分类推理。推理应包含在 <reasoning> 标签中,意图包含在 <intent> 标签中。只返回推理和意图。
        """
让我们分解这个提示的关键组件:
  • 我们使用 Python f-strings 创建提示模板,允许将 ticket_contents 插入到 <request> 标签中。
  • 我们给 Claude 一个明确定义的角色,作为仔细分析工单内容以确定客户核心意图和需求的分类系统。
  • 我们指导 Claude 正确的输出格式,在这种情况下,在 <reasoning> 标签内提供其推理和分析,然后在 <intent> 标签内提供适当的分类标签。
  • 我们指定有效的意图类别:“支持、反馈、投诉”、“订单跟踪”和”退款/换货”。
  • 我们包含一些示例(即少样本提示)来说明输出应如何格式化,这提高了准确性和一致性。
我们希望 Claude 将其响应分成各种 XML 标签部分的原因是,我们可以使用正则表达式从输出中分别提取推理和意图。这允许我们在工单路由工作流中创建有针对性的下一步,例如仅使用意图来决定将工单路由给哪个人。

部署您的提示

在不在测试生产环境中部署提示并运行评估的情况下,很难知道您的提示效果如何。 让我们构建部署结构。首先定义包装我们对 Claude 调用的方法签名。我们将采用已经开始编写的方法,该方法以 ticket_contents 作为输入,现在返回 reasoningintent 的元组作为输出。如果您有使用传统机器学习的现有自动化,您将希望遵循该方法签名。
import anthropic
import re

# Create an instance of the Claude API client
client = anthropic.Anthropic()

# Set the default model
DEFAULT_MODEL="claude-3-5-haiku-20241022"

def classify_support_request(ticket_contents):
    # Define the prompt for the classification task
    classification_prompt = f"""您将充当客户支持工单分类系统。
        ...
        ... 推理应包含在 <reasoning> 标签中,意图包含在 <intent> 标签中。只返回推理和意图。
        """
    # Send the prompt to the API to classify the support request.
    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

    # Use Python's regular expressions library to extract `reasoning`.
    reasoning_match = re.search(
        r"<reasoning>(.*?)</reasoning>", reasoning_and_intent, re.DOTALL
    )
    reasoning = reasoning_match.group(1).strip() if reasoning_match else ""

    # Similarly, also extract the `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
此代码:
  • 导入 Anthropic 库并使用您的 API 密钥创建客户端实例。
  • 定义一个接受 ticket_contents 字符串的 classify_support_request 函数。
  • 使用 classification_promptticket_contents 发送给 Claude 进行分类
  • 返回从响应中提取的模型的 reasoningintent
由于我们需要等待整个推理和意图文本生成完成后才能解析,我们设置 stream=False(默认值)。

评估您的提示

提示通常需要测试和优化才能准备好投入生产。要确定您解决方案的准备情况,请根据您之前建立的成功标准和阈值评估性能。 要运行您的评估,您需要测试用例来运行它。本指南的其余部分假设您已经开发了测试用例

构建评估函数

我们本指南的示例评估沿三个关键指标衡量 Claude 的性能:
  • 准确性
  • 每次分类的成本
根据对您重要的因素,您可能需要在其他轴上评估 Claude。 为了评估这一点,我们首先必须修改我们编写的脚本,并添加一个函数来比较预测意图与实际意图,并计算正确预测的百分比。我们还必须添加成本计算和时间测量功能。
import anthropic
import re

# Create an instance of the Claude API client
client = anthropic.Anthropic()

# Set the default model
DEFAULT_MODEL="claude-3-5-haiku-20241022"

def classify_support_request(request, actual_intent):
    # Define the prompt for the classification task
    classification_prompt = f"""您将充当客户支持工单分类系统。
        ...
        ...推理应包含在 <reasoning> 标签中,意图包含在 <intent> 标签中。只返回推理和意图。
        """

    message = client.messages.create(
        model=DEFAULT_MODEL,
        max_tokens=500,
        temperature=0,
        messages=[{"role": "user", "content": classification_prompt}],
    )
    usage = message.usage  # Get the usage statistics for the API call for how many input and output tokens were used.
    reasoning_and_intent = message.content[0].text

    # Use Python's regular expressions library to extract `reasoning`.
    reasoning_match = re.search(
        r"<reasoning>(.*?)</reasoning>", reasoning_and_intent, re.DOTALL
    )
    reasoning = reasoning_match.group(1).strip() if reasoning_match else ""

    # Similarly, also extract the `intent`.
    intent_match = re.search(r"<intent>(.*?)</intent>", reasoning_and_intent, re.DOTALL)
    intent = intent_match.group(1).strip() if intent_match else ""

      # Check if the model's prediction is correct.
    correct = actual_intent.strip() == intent.strip()

    # Return the reasoning, intent, correct, and usage.
    return reasoning, intent, correct, usage
让我们分解我们所做的编辑:
  • 我们将测试用例中的 actual_intent 添加到 classify_support_request 方法中,并设置比较以评估 Claude 的意图分类是否与我们的黄金意图分类匹配。
  • 我们提取 API 调用的使用统计信息,以根据使用的输入和输出令牌计算成本

运行您的评估

适当的评估需要明确的阈值和基准来确定什么是好结果。上面的脚本将为我们提供准确性、响应时间和每次分类成本的运行时值,但我们仍需要明确建立的阈值。例如:
  • 准确性: 95%(100 次测试中)
  • 每次分类成本: 比当前路由方法平均降低 50%(100 次测试中)
拥有这些阈值使您能够快速轻松地大规模判断,并以公正的经验主义确定哪种方法最适合您,以及可能需要进行哪些更改以更好地满足您的要求。

提高性能

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

对于 20+ 意图类别的情况使用分类层次结构

随着类别数量的增长,所需示例的数量也会扩大,可能使提示变得笨重。作为替代方案,您可以考虑使用分类器混合实施分层分类系统。
  1. 将您的意图组织成分类树结构。
  2. 在树的每个级别创建一系列分类器,实现级联路由方法。
例如,您可能有一个顶级分类器,将工单大致分类为”技术问题”、“账单问题”和”一般查询”。然后,这些类别中的每一个都可以有自己的子分类器来进一步细化分类。
  • 优点 - 更大的细微差别和准确性: 您可以为每个父路径创建不同的提示,允许更有针对性和特定于上下文的分类。这可以提高准确性并更细致地处理客户请求。
  • 缺点 - 增加延迟: 请注意,多个分类器可能导致延迟增加,我们建议使用我们最快的模型 Haiku 实施此方法。

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

尽管提供示例是提高性能的最有效方法,但如果支持请求高度可变,很难在单个提示中包含足够的示例。 在这种情况下,您可以使用向量数据库从示例数据集中进行相似性搜索,并检索给定查询的最相关示例。 这种方法在我们的分类配方中有详细概述,已被证明可以将性能从 71% 的准确率提高到 93% 的准确率。

专门考虑预期的边缘情况

以下是 Claude 可能错误分类工单的一些场景(可能还有其他对您的情况独特的场景)。在这些场景中,考虑在提示中提供明确的指令或示例,说明 Claude 应如何处理边缘情况:
客户经常间接表达需求。例如,“我已经等我的包裹超过两周了”可能是对订单状态的间接请求。
  • 解决方案: 为 Claude 提供这些类型请求的一些真实客户示例,以及潜在意图是什么。如果您为特别细致的工单意图包含分类理由,您可以获得更好的结果,以便 Claude 可以更好地将逻辑推广到其他工单。
当客户表达不满时,Claude 可能优先处理情绪而不是解决潜在问题。
  • 解决方案: 为 Claude 提供何时优先考虑客户情绪或不优先考虑的指导。可以简单如”忽略所有客户情绪。只专注于分析客户请求的意图以及客户可能询问的信息。”
当客户在单次互动中提出多个问题时,Claude 可能难以识别主要关注点。
  • 解决方案: 澄清意图的优先级,以便 Claude 可以更好地对提取的意图进行排名并识别主要关注点。

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

适当的集成需要您就基于 Claude 的工单路由脚本如何适应您更大的工单路由系统架构做出一些决定。您可以通过两种方式做到这一点:
  • 推送式: 您使用的支持工单系统(例如 Zendesk)通过向您的路由服务发送 webhook 事件来触发您的代码,然后分类意图并路由它。
    • 这种方法更具网络可扩展性,但需要您公开一个公共端点。
  • 拉取式: 您的代码根据给定的时间表拉取最新工单并在拉取时路由它们。
    • 这种方法更容易实施,但当拉取频率过高时可能对支持工单系统进行不必要的调用,或者当拉取频率过低时可能过于缓慢。
对于这两种方法中的任何一种,您都需要将脚本包装在服务中。方法的选择取决于您的支持工单系统提供的 API。