课程大纲 › 领域 5:上下文管理与可靠性
5.2 设计有效的升级(escalation)与歧义消解模式
タスクステートメント5.2:効果的なエスカレーションと曖昧さの解消のパターンを設計する
官方大纲原文(日文):知识 4 条 · 技能 5 条
需要掌握的知识
- 適切なエスカレーションのトリガー:顧客による人間の担当者への要求、ポリシーの例外や空白(複雑なケースだけではない)、有意義な進展が得られない状況
- 顧客が明示的に要求した場合に直ちにエスカレーションすることと、問題が単純な場合に解決を申し出ることの違い
- 感情に基づくエスカレーションや自己申告の確信度スコアが、実際のケースの複雑さを示す指標として信頼できない理由
- 複数の顧客が一致した場合に、ヒューリスティックによる選択ではなく、確認(追加の識別情報の要求)が必要となること
需要能做到的事
- エスカレーションすべき場合と自律的に解決すべき場合を示すfew-shotの例を伴う明示的なエスカレーション基準を、システムプロンプトに追加する
- 人間の担当者を求める顧客の明示的な要求には、先に調査を試みることなく直ちに応じる
- 問題がエージェントの対応可能な範囲内である場合は、不満を受け止めつつ解決を申し出て、顧客が希望を重ねて伝えた場合にのみエスカレーションする
- 顧客の具体的な要求についてポリシーが曖昧であるか何も定めていない場合にエスカレーションする(例:ポリシーが自社サイトでの価格調整のみを扱っている場合の、競合他社との価格マッチング)
- ツールの結果が複数の一致を返した場合に、ヒューリスティックに基づいて選択するのではなく、追加の識別情報を尋ねるようエージェントに指示する
课程讲解 · AI 草稿,未经人工审核 以官方文档为准
这一条考什么
这一条考你能不能给客服类 Agent 设计出靠谱的升级(escalation)规则:什么时候必须马上转人工,什么时候应该先尝试自己解决,什么时候因为政策没有覆盖而需要升级。你还要知道为什么情绪和模型自报的置信度不能作为升级依据,以及工具返回多个匹配结果时,为什么要追问更多识别信息,而不是凭启发式随便挑一个。
核心概念
正确的升级触发条件
可靠的升级触发条件主要有三类:
- 客户明确要求转人工:"我要找真人"、"转人工客服"。
- 政策有例外或空白:客户的请求落在政策没写清楚或根本没覆盖的地方。注意,判断依据是"政策能不能回答这个问题",而不是"这个案子复不复杂"。复杂的案子只要政策写得清楚,Agent 一样可以处理。
- 没有实质进展:多轮尝试之后问题依然原地打转,或者需要的权限超出了 Agent 的授权范围(比如退款金额超过授权上限)。
明确要求转人工:立刻满足
客户明确要求真人时,Agent 应该立刻升级,不要先说"我先帮您查一下",也不要试图劝客户留下。先调查再转是常见的错误:它无视了客户的明确意愿,还会让客户更不满。
要分清的是:客户只是在抱怨("太烦了,怎么还没到"),并没有要求转人工,而且问题在 Agent 能力范围内。这时正确的做法是先表示理解,然后主动提出解决方案("我可以马上为您办理补发")。只有客户再次坚持要找真人,才升级。
- 明确要求真人:立即转。
- 有情绪但问题简单:共情 + 提出解决方案;客户坚持要真人,再转。
为什么情绪和自报置信度不可靠
- 情绪不等于复杂度:客户很生气,可能只是因为快递晚了一天,Agent 完全能处理;客户语气平静,提的却可能是政策根本没覆盖的跨境退税问题。按情绪分数升级,会把简单问题推给人工,复杂问题反而被留下来。
- 模型自报的置信度没有校准:模型说"我 90% 确定能处理",并不代表它真的能处理好。模型常常在政策空白的地方很自信地编出一套规则。升级应该依据可以客观判断的条件:明确请求、政策覆盖范围、授权上限、进展情况。
政策空白:升级而不是自己发挥
例子:公司政策只写了"自家网站降价时,在 14 天内可以补差价",客户却要求"竞争对手卖得更便宜,你们给我匹配一下价格"。政策对竞品比价没有任何说明,Agent 不应该自己类推说"可以",也不应该类推说"不行",而是应该升级,交给有权限的人决定。
多个匹配:追问,而不是挑一个
工具按姓名查客户,返回了 3 个"王伟"。错误做法是按启发式选一个:最近下过单的、第一个、所在城市最像的。一旦选错,就会泄露别人的隐私,或者在错误的账户上退款。正确做法是让 Agent 追问更多识别信息:订单号、注册邮箱、手机号后四位。
在 system prompt 里写清标准,并配 few-shot 示例
升级规则如果只写成"复杂情况请升级",模型会自己去理解"复杂"是什么意思,结果很不稳定。应该写出明确的标准,再配上正反两类示例:
## 升级规则
立即升级(不要先调查):
- 客户明确要求人工/真人/主管
需要升级:
- 请求涉及政策未覆盖或有歧义的情形(例:竞争对手比价,政策只覆盖本站降价)
- 退款金额 > 500 USD(超出你的授权)
- 同一问题连续 3 次尝试无进展
不要升级(自行解决):
- 客户有情绪但问题在你能力范围内:先共情,再提出具体解决方案;客户再次要求人工时才升级
- 情绪强烈本身不是升级理由
查询返回多个匹配:要求客户提供订单号或注册邮箱,绝不自行挑选
## 示例
客户:"我受够了,给我转真人。" → 立即调用 escalate_to_human,不做调查。
客户:"快递又晚了,真烦!" → "非常抱歉让您久等。我可以现在为您申请加急补发,您看可以吗?"
客户:"B 店便宜 30 块,你们能不能匹配?" → 政策未覆盖竞品比价 → 升级。升级时交给人工的应该是结构化摘要(客户 ID、已核实的根因、金额、相关交易 ID、已做的操作、待决事项),而不是整份对话记录(参见 5.1)。
正确做法与反模式
- 正确:客户明确要求真人时立即升级。反模式:先查一下再说,或者劝客户留下。
- 正确:客户只是有情绪、问题又简单时,先共情并提出方案,客户再次要求才升级。反模式:一有负面情绪就转人工。
- 正确:政策模糊或空白时升级。反模式:Agent 自己类推出一条政策,或者只在"案子复杂"时升级。
- 正确:多个匹配时追问更多识别信息。反模式:按最近活跃、名单第一个等启发式规则自行选择。
- 正确:system prompt 里写明确标准,并配上该升级和不该升级的 few-shot 示例。反模式:只写一句"复杂时请升级",或者依赖情绪分析分数、模型自报置信度来触发升级。
常见陷阱
- "用情绪分析分数超过阈值来触发升级":情绪和问题复杂度没有可靠的对应关系。这类选项看起来很"工程化",但方向错了。
- "让模型自评置信度,低于 X 就升级":没校准过的自报置信度不可靠,模型在政策空白处往往反而很自信。
- "先收集信息、尝试解决,再根据结果决定是否转人工":用在客户明确要求真人的场景时是错的,应该立即转。
- "只在案子复杂时升级":漏掉了政策空白这一类,有些简单请求也必须升级(比如竞品比价)。
- "选最近一次下单的那个客户":多个匹配时,任何启发式都有选错的风险。正确做法是追问识别信息。
- 把完整对话记录交给人工:人工要从头读一遍,效率很低。应该交结构化的案件摘要。
实操练习
目标:写一个带升级规则和 few-shot 示例的 system prompt,用 4 个测试用例验证 Agent 的行为。
- 定义两个工具:
escalate_to_human(reason, summary)和find_customer(name),后者固定返回 3 个同名客户。 - 把上面的升级规则和示例保存为
escalation_rules.md,作为 system prompt 加载。 - 分别发送 4 条用户消息,观察是否调用
escalate_to_human。
import anthropic
client = anthropic.Anthropic()
SYSTEM = open("escalation_rules.md", encoding="utf-8").read() # 内容为上文的升级规则与示例
tools = [
{"name": "escalate_to_human", "description": "转人工。附结构化摘要。",
"input_schema": {"type": "object", "properties": {
"reason": {"type": "string", "enum": ["customer_request", "policy_gap", "over_authority", "no_progress"]},
"summary": {"type": "string"}}, "required": ["reason", "summary"]}},
{"name": "find_customer", "description": "按姓名查找客户",
"input_schema": {"type": "object", "properties": {"name": {"type": "string"}}, "required": ["name"]}},
]
cases = {
"明确要求真人": "别跟我废话了,我要找真人客服。",
"情绪但简单": "气死了!我的耳机到现在还没发货!订单 #5521。",
"政策空白": "隔壁店同款便宜 30 块,你们给我匹配价格。",
"多匹配": "我叫王伟,帮我查一下我的账户。",
}
for label, text in cases.items():
r = client.messages.create(model="claude-sonnet-4-5", max_tokens=600, system=SYSTEM,
tools=tools, messages=[{"role": "user", "content": text}])
calls = [(b.name, b.input) for b in r.content if b.type == "tool_use"]
reply = "".join(b.text for b in r.content if b.type == "text")
print(f"[{label}] tools={calls}\n reply={reply[:120]}\n")预期结果:"明确要求真人"直接调用 escalate_to_human,reason 为 customer_request,而且没有先调用其他工具;"情绪但简单"不升级,回复里提出了具体方案;"政策空白"升级,reason 为 policy_gap;"多匹配"会先调 find_customer,你需要在第二轮回传 3 个匹配结果,然后 Agent 应该追问订单号或邮箱,而不是自己选一个。
自测清单
- 列出三类正确的升级触发条件。为什么"案子复杂"本身不是触发条件?
- 客户明确要求转人工,和客户只是在抱怨,Agent 的处理有什么不同?
- 为什么情绪分数和模型自报的置信度不适合用来判断是否升级?
- 政策只覆盖本站降价、客户要求竞品比价时,Agent 应该怎么做?为什么?
- 工具返回多个匹配客户时,正确的做法是什么?启发式选择有什么风险?
- 升级规则写进 system prompt 时,few-shot 示例应该覆盖哪些情况?
对应题目(3)
题目归类由 AI 判断,仅供参考。
练习这 3 道题