模块 4 · 口吻与转人工

专业口吻怎么「锁住」?
什么时候该转人工?

机制课讲了 LangGraph 怎么走,但客服线还有两条你指挥 AI 时最常碰的线: 回复别漂成投顾/推销员,以及什么时候打「建议转人工」。 代码里不是单靠「写个好 prompt」,而是三层滤网 + 一条主动转人工路径(sanitize 命中不再自动转人工,拍板 1B)。

三层滤网:防止口吻漂移

可以把客服回复想成「过三道闸」——前面两道尽量写对,最后一道不管 LLM 说什么都要拦违规词。

①

Prompt 层 · 客户线各分支 System Prompt 模板(customer_prompts.py)
每个生成分支有独立 system 模板(INTERPRET_SYSTEM / GENERATE_SYSTEM / CHITCHAT_SYSTEM),开头就定身份:「金融客服助手(已登录客户模式)」——禁止投顾话术、禁止预测、画像只调措辞不能念出。

②

记忆层 · recall_memory
咨询走 consult_memory、闲聊走 chitchat_memory,再注入 profile_context。让回复有连续语境,但 prompt 里写死:不得主动复述年龄/收入等画像字段。

③

事后扫描 · finalize_sanitized_reply()(sanitize_postprocess.py)
interpret / generate / chitchat 产出后过违禁词正则。命中后:数据查询类(含 nav_query)回退 Core fact_text;RAG/闲聊替换 COMPLIANCE_REJECT——均不自动 transfer_to_human。游客线已对齐。

入口还有第 0 道闸: 四 Agent 对话 HTTP 入口(chat.py)的 input_guard 在进图之前就拦注入/超长——这类请求根本到不了 LLM。
事后扫描 · 共用分治(sanitize_postprocess.py)
def finalize_sanitized_reply(reply, *, intent, fact_text):
    safe, hit = sanitize_reply(reply)
    if not hit: return safe, False
    if intent in DATA_QUERY and fact_text:
        return fact_text, False  # 1B:保真账,不转人工
    return COMPLIANCE_REJECT, False
白话

数据查询分支:LLM 嘴瓢时回退 Core fact_text,客户仍能看到「持有 3 只产品」等真数。

RAG/闲聊分支:替换为固定拒答,但不打转人工标志——除非用户原话已是投诉/转人工。

底层 sanitize_reply 仍负责扫违禁词;分治逻辑在 customer 编排层。

转人工 vs 直接拒绝:别混成一条线

模块 2 列出了 reject 和 transfer_human 两个节点,但触发条件完全不同。指挥 AI 改逻辑时最容易搞混这里。

💬intent_classify
👤transfer_human
🚫reject
🔍sanitize_reply

点击「下一步」看决策分叉

路径 A · 主动转人工

关键词:转人工、投诉、纠纷、账户异常、被盗 等 → TRANSFER_TEXT + transfer_to_human=True。

路径 B · LLM 越界被拦(1B)

数据查询 interpret 违禁 → 回退 fact_text,transfer=false。RAG/闲聊违禁 → COMPLIANCE_REJECT,transfer=false。

路径 C · 边界外但不必转人工

问「推荐稳赚基金」「明天会涨吗」→ reject 静态话术(如 REJECT_ADVICE_TEXT)。不自动打转人工标志;话术中可引导用户自行说「转人工」。

演示环境边界: 「建议转人工」只是 API 字段 + 前端橙色 Tag(ChatPanel),不会真的排队接入真人坐席——真转接要接呼叫中心/工单系统,那是产品层后续工作。

群聊动画:LLM 嘴瓢后被扫描层拦住

客户问持仓,Tool 返回正常 fact_text,但 interpret 的 LLM 多嘴加了「建议您加仓」——扫描层介入。

RAG 咨询还要加风险提示

产品/政策/FAQ 类意图在 generate 通过后,若 intent 属于咨询类,会追加 RISK_DISCLAIMER(should_add_disclaimer)。这是「口吻」的另一面:该免责时必须免责,不是只有拦违规词。

客户说「推荐一个稳赚不赔的基金」,系统会怎么标记?

指挥 AI 改客服时的检查清单: ① 改口吻 → 动客户线各分支 System Prompt 模板(customer_prompts.py)对应 SYSTEM,别只改前端; ② 加新禁语 → 同时更新 FORBIDDEN_TERMS 和意图关键词路由; ③ 加「必须转人工」场景 → 改 _TRANSFER_KEYWORDS 或 INTENT_SYSTEM 规则,别误放进 reject。