---
title: 分配助手
description: 主管说一句话，它把几十次操作做完 —— 选人、分人、确认、确认之后。
icon: Bot
---

主管说清这一批要召回谁，助手挑人、排客服、出确认单，**主管只要看一眼、点确认**。

功能本身见 [召回分配](./batch-assignment)。本文讲**那个助手**：它怎么走、谁做决定、哪些事它绝对不做。

---

## 一、一批召回是怎么走完的

整条线只有四步：**① 选人 → ② 分人 → ③ 确认 → ④ 确认之后**。

其中「选人」不是一次动作，而是**两个人各答一半**：主管先定运营意图，助手再用全景数据把它落成一版具体的人。

```mermaid
flowchart TD
  S(["召回策略<br/>一批召回要回答的四个问题"]) --> A1

  A1["① 选人 · 主管初选<br/>1 做哪一类还没启动的治疗<br/>2 找多久没来的人<br/>—— 凭运营经验，他张口就来"] --> A2

  A2["① 选人 · 助手精选<br/>3 要不要只挑高价值的 —— 先摆这批人的全景<br/>4 团队还吃得下多少 —— 先摆在岗人手与在手量<br/>—— · —— · —— · —— · —— · ——<br/>不等他给全，先按这几条默认出一版：<br/>没联系过的排前面，其余按优先级<br/>每人每天 15 通 · 时限 3 天<br/>这批多大 = 在岗人数 × 15 × 时限"]

  A2 --> D1{"这批人对吗？"}
  D1 --> G1["助手摆出的引导 —— 满足条件才出现<br/>「能加个条件」：候选 ≥50 人 · 他还没加过 · 切完还剩 ≥10 人<br/>　　消费高于本批平均 / 转介绍达人 / 权益身份 / 获客渠道<br/>「这批多大」：人数是系统估的（他没自己指定过）<br/>　　可改 每人每天几通 · 时限几天"]
  G1 --> R1["重新选一版<br/>⚠️ 已经排好的分法一并作废"]
  R1 --> A2

  D1 ==>|"人定了 —— 这一关过了才谈怎么分"| B

  B["② 分人 —— 谁去打<br/>先算目标水位 =（团队在手 + 本批人数）÷ 在岗人数<br/>一趟：有专属的回自己人，到水位为止<br/>二趟：无专属的补给当前手上最少的<br/>三趟：专属这轮排满的单列成一组，交他定"]

  B --> D2{"这么分行吗？"}
  D2 --> G2["助手摆出的引导 —— 满足条件才出现<br/>「专属排满了」：第三趟真有人排不进去<br/>　　换无专属的补上（池子还有人时才给）<br/>　　铺平给在岗 / 各自归专属 / 移出本批<br/>「最忙的那位」：分完后的量 > 每天通数 × 时限<br/>　　报最忙那位 + 另有几位也超<br/>　　整批时限改成 N 天（一个算好的数）"]
  G2 --> R2["不重新选人<br/>人不变，只动这一版的分法"]
  R2 --> D2

  D2 ==>|"行"| K["③ 确认<br/>点下去，这一刻才真的分下去"]
  K --> L["④ 确认之后<br/>限时撤销 · 补挂福利 · 跟踪进度"]

  style S fill:#fef3c7,stroke:#f59e0b
  style A1 fill:#fef3c7,stroke:#f59e0b
  style A2 fill:#e0e7ff,stroke:#6366f1
  style D1 fill:#fee2e2,stroke:#ef4444,stroke-width:2px
  style G1 fill:#fce7f3,stroke:#ec4899
  style R1 fill:#fee2e2,stroke:#ef4444
  style B fill:#e0e7ff,stroke:#6366f1
  style D2 fill:#fff,stroke:#94a3b8
  style G2 fill:#fce7f3,stroke:#ec4899
  style R2 fill:#ede9fe,stroke:#8b5cf6
  style K fill:#fef3c7,stroke:#f59e0b
  style L fill:#d1fae5,stroke:#10b981
```

图上两个环，**代价差一个数量级 —— 这是全图最要紧的一点**。红色那个菱形也是助手在这条线上**唯一实质的判断**：主管说一句话，它得先判断他动的是哪一层。

| 他动的是 | 比如他说 | 代价 |
|---|---|---|
| **分法** | 「王强移出这批」「待分配都还给专属」「给 5 天」「带个福利」 | **就地改**（同步）—— 同一版上动 |
| **这一版里的人** | 「换无专属客服的患者补上」 | **重排**（几秒）—— 重排一遍分法，不重新选人 |
| **人群** | 「只要商保直付的」「改成 200 人」「换成一两年没来的」 | **重出**（几十秒）—— 重新选一版，旧版当场作废 |

所以顺序不能颠倒：**人先定下来，才谈怎么分。** 先排分法再让他改人群，前面那趟排班就白做了 —— 助手讲这一版时也按这个顺序讲，理由一样。

三档里最容易看走眼的是中间那条：**「换无专属的补上」摆在分人环里，换的却是人。**「改时限」也有两条路 —— 从「这批多大」改会连人数一起重估（重出），从「最忙的那位」改只延长期限、人不变（就地改）。

<Callout type="warn">**代价不对称，判断也要跟着不对称**：把「改人群」误判成「改分法」→ 主管以为条件生效了、其实没有（**看不出来的错**）；反过来只是多算一次。⇒ **拿不准时一律走重出。**</Callout>

⚠️ 图里只画了按钮。主管随口说的（「换成正畸」「改成 200 人」「只要今年来过的」）同样能触发重出 —— 那条路不走按钮，靠助手听懂。旧版作废发生在**新版生成时**，不是确认时：主管要能看见自己出过几版、哪一版才是当前的。

### 召回策略：一批召回要回答的四个问题

**这一环在「选人」之前** —— 先把问题摆清楚，再看谁答得了。

| | 要回答的 | 谁答 | **为什么是他 / 为什么要助手先摆** |
|---|---|---|---|
| **1** | 做哪一类还没启动的治疗（种植 / 正畸 / 拔牙…） | **主管** | 这是诊所这个季度的经营重点 —— 医生排期、设备耗材、话术准备都围着它转。**这件事只有他知道**，系统里没有任何数据能推出来 |
| **2** | 找多久没来的人（三个月内 … 三年以上） | **主管** | **他能从这个时间估出大概能回来多少** —— 见下，这一条是整套策略里最值钱的判断 |
| **3** | 要不要只挑高价值的（消费额、商保、意向） | 主管定，**助手先摆数据** | **他答不了**：不看数据，他不知道这批里有多少是高价值的，也不知道切完还剩几个 —— 可能一刀下去只剩三个人 |
| **4** | 团队还吃得下多少、几天内打完 | 主管定，**助手先摆数据** | **捞太多打不完，到期回池等于白发一轮**。而「还吃得下多少」要看在岗几人、各自手上压着多少 —— 这些数在系统里，不在他脑子里 |

**1、2 是运营意图，问他就有；3、4 问他他也说不出**，得先把全景摆到他面前。这就是为什么选人要拆成两半。

1 和 2 交叉出来的那批人，下文一律称**候选人群**（比如「种植 · 一到两年没来」这一批）—— 助手后面所有的比较、平均、门槛，算的都是这一批人自己的数，不是全库的数。

{/* ⚠️ 多段落的 Callout：开闭标签必须**各自独占一行**，且与正文之间留空行。
    写成 `<Callout>正文…` 再空行，MDX 会把它当成段落内的行内 JSX，
    要求在同一段里闭合 → Build Error: Expected a closing tag before the end of `paragraph`。 */}
<Callout type="info">

**「多久没来」不只是一个筛选条件 —— 它是这套策略里最值钱的那个判断。**

有经验的主管能从它估出这批大概能回来多少：一两年没来的和三年以上的，回头率不是一个量级。

而这个估算往下游走一步，就是**诊所的排班**：预计能回来多少人、其中多少要做种植，医生和科室要不要提前留出位置。**捞回来了却没人接诊，比没捞更伤客户。**

⇒ 所以这一项必须由主管拍板，系统不代劳、也不推荐 —— 它算得出人数，算不出诊所那边接得住多少。

</Callout>

### 主管只说了 1 和 2，剩下的助手拿默认值先跑通

助手在这一步不是等他再下一个指令，而是**先把该看的摆出来、顺手把方案做出来**：这批人的画像构成、消费分布、在岗几人、各自手上压着多少、这批发下去谁最忙。主管看着这些改，或者直接确认。

| 默认的是 | 取值 | 他想改，说一句就行 |
|---|---|---|
| **谁排前面** | 没联系过的排前面，其余按优先级从高到低 | 「先打消费高的」 |
| **每人每天打几通** | 15 通 | 「按 20 通算」 |
| **多久要打完** | 3 天 | 「给 5 天」 |
| **这批发多大** | 在岗人数 × 每天通数 × 时限 | 「改成 200 人」 |

<Callout type="warn">**默认值一个都不许藏。** 出方案时式子摊开写：「本批 405 人 = 在岗 9 人 × 每天 15 通 × 3 天」。
一个他看不见的默认值，等于系统替他做了一个他不知道的决定 —— 而这批人是真发下去了。
⇒ 摆出来他才有得改；不摆，他连「原来还能改这个」都不知道。</Callout>

人手在**两个地方**主动摆给他看，不用他去找：出方案时是上面那个式子；确认单上是每位客服一行「约 5 天」，算的是**分完之后他手上的总量**（在手 + 本批），不只是本批那几条。超出时限的用**颜色**提示，⛔ 不写「打不完 / 超了 / 过载」—— 手上压着旧单的人本来就会超，那是常态不是故障；说成故障，主管会开始怀疑系统，而不是做他该做的判断。

### 能加哪几个条件

助手只在**这批人还值得再收窄一层**时才提，一次给四条，每条都直接写清切完还剩多少人：

| 加什么条件 | 门槛怎么来的 | 这一条什么时候不给 |
|---|---|---|
| **只选消费高于本批平均的** | 门槛是**这批候选自己的平均**，⛔ 不是全库分位 —— 全库平均 ¥4,442，而某一批实测 ¥0 起，用全库的数会把人几乎筛空 | 高于平均的不足 10 人 |
| **只选转介绍达人** | 推荐过 ≥3 人**且带来成交**（家庭型和社交型合并成一条 —— 主管要的是「有没有这个能力」，不是哪一型） | 不足 10 人 |
| **只选某个权益身份的** | 取这批候选里**人最多的那一项** | 最多的那项不足 10 人 |
| **只选某个获客渠道的** | 同上 | 同上 |
| ＋ **按别的条件选** | 兜底：助手把其余十几个维度各多少人报一遍，他再挑 | 始终给 |

<Callout type="warn">**加条件 = 重新选一版**，⛔ 不是在已经排好的那些人里再挑一遍。
点下去之后这批候选重新选进来多少人、这批发多大，都会跟着重算。
按钮上那个数字是**换完之后还剩多少人**，不是「从本批里筛掉几个」。</Callout>

### 引导什么时候才冒出来

⛔ 不是每次都全给 —— 出场条件写在图上，卡这些条件的理由是：

| 引导 | 为什么卡那个条件 |
|---|---|
| **专属排满了** | 它是唯一「不处理就真的有人被漏掉」的一条，所以只要真排不进去就必出 |
| **能加个条件** | 人太少时「平均数」「最多的那一项」本身就是噪音；已经加过就不再一层层往下切 |
| **这批多大** | 他自己说过「就发 200 人」，就不必再解释这个数哪来的 |
| **最忙的那位** | 没超就不提，⛔ 不制造无谓的告警 |

⚠️ **符合条件的人比这批还少时，「这批多大」照样给他**：往上调确实不会更多，但**往下调可以少发一些** —— 那句话据实写清方向，⛔ 不把入口藏起来。

### ② 分人怎么分：又满又平，三趟走完

三趟怎么走见图。先按「这批多大」算出一条**目标水位**给第一趟封顶 —— ⭐ 它**不是一个新的可调项**，完全由「这批多大」推出来：

```
目标水位 = ⌈（团队现有在手总量 + 本批人数）÷ 在岗人数 ⌉      至少 1
```

<Callout type="warn">

**为什么必须三趟、不能合成两趟。** 二、三趟都是水位法、都填最空的人，合并起来总量一模一样 —— 但**被拆散的专属关系数不一样**。先用无专属的去补空手的人，能少动一个有主患者；合成一趟，系统就会随机地把某个有主患者改派出去，而同时某个无专属患者落给了别人。

**为什么第一趟要封顶。** 本地实测：池子 1,081 人里 **755 人（70%）挂在同一个客服名下**。不封顶，他一批拿走 248 条；而 17 位在岗客服里有 10 位名下一个患者都没有，全队只有 119 个无专属患者可分。

**为什么第三趟不自动改派。** 把患者从他的专属客服手里挪走，是**关系层面的决定，助手没资格替主管做**。所以这些人不是被丢掉，是原地不动、单列出来交他定 —— 关系还在，只是这轮没轮到。主管自己改派当然可以，那条会标成「他手动改的」。

</Callout>

⚠️ 同水位时按固定顺序打破平局 —— **同样的输入两次必须算出同样的分法**，这是主管敢按确认键的前提。

三趟只是默认。主管可以在这一版上移出某几个人、改派给谁、单独给某位少分点（「李莉这周带教，这批最多给 5 条」）—— 程序按规则落，主管微调。

### ③ 确认 · ④ 确认之后

**③ 确认**只有主管能做 —— 他点下去这一刻才真的分下去。**④ 确认之后**是发出去怎么管：发错了限时撤回、临时加个福利、跟踪这批打得怎么样，主管发起、程序执行。

---

## 二、这个助手是怎么装出来的

### 它是登录那一刻装出来的，⛔ 不是一个常驻的「对象」

系统里没有一个叫「助手」的东西守在那儿等人来问。**每次请求都按当前登录人现装一份**，装配的输入只有一个：他的权限。

```
登录人的权限 ──┬──→ 会话        主管的会话 / 客服的会话，各归各的
               ├──→ 工具清单     21 个 / 9 个
               ├──→ 数据范围     能查哪几家诊所的人
               └──→ ④角色 ⑤现场  他是谁的助手、此刻在做哪条线

①②③ 与谁登录无关，永远是同一份。（①—⑤ 指下一节的提示词五层）
```

### 为什么必须按身份装，而不是「一个助手换个说法」

| 这一维 | 要不要按身份分 |
|---|---|
| **会话** | **必须分** |
| **工具清单** | **必须分** —— 由登录态下发，**看不见比看见被拒更安全** |
| **数据范围** | **必须分** —— 下推到查询条件里，⛔ 不是查全量再过滤 |
| 系统提示词（④⑤） | 分，**但这是其中最不重要的一条** |
| 模型 | 不用分 |
| 代码实现 | 不用分 |

<Callout type="warn">

**为什么同一个会话里不能「切换身份」。** 上下文是**单向**的：高权限会话里已经载入的数据，不会因为一句「你现在是低权限角色」而消失。

**提示词不是删除操作，也从来不是安全边界。**

</Callout>

所以「主管一个 agent、客服一个 agent」这个说法要拆开看：**同一套实现，按身份参数化**。这不是「多 agent 编排」—— 编排指 agent 之间互相调用，而不同身份之间**不需要通信**。

边界全都落在结构上而非嘴上：身份随每次调用传递、授权在工具内部执行、数据范围写进查询条件、工具清单按身份下发。

> **判据：如果模型不传某个参数，越权就不可能发生 —— 那这个参数就不该是参数。**
> 顺带的好处：模型不用猜，少一个必错的空格。

由此还得到一个平时容易忘的推论：**它没有「记性」** —— 不是存着状态的对象，上一轮的东西要么在对话历史里，要么就得重新查。所以主管在确认单上动过手之后，助手**必须重新去看那张单**，⛔ 不能拿出方案那一版的数接着算（「看当前确认单」那个工具就是为此存在的）。

### 提示词分层：判据是「什么会让它变」

助手的行为由一段系统提示词决定。它不是一篇散文，是**五层拼起来的**，装配顺序就是模型的阅读顺序：**通用 → 特殊**。

分层⛔ 不按话题分。同一个话题的话可能分属两层，只因为它们变化的原因不同。

| | 层 | 管什么 | 什么会让它变 | 占篇幅 |
|---|---|---|---|---|
| **①** | **装置** | 你是谁、和使用者什么关系、**你看不见什么** | 产品形态变才变 | 9% |
| **②** | **诚实** | 数从哪来、什么不许编、怎么忠于工具返回值 | 几乎不变 | 20% |
| **③** | **人设语气** | 衔接、顺序、分寸、排版 | **可换**（配一套人设即可） | 32% |
| **④** | **角色** | 他有什么权责、你不许替他决定什么 | 登录人的权限变 | 7% |
| **⑤** | **现场** | 他此刻在做的那条业务线 | 加一条新业务线 | 32% |

前三层**所有人一样**；④⑤ 与工具清单**跟着登录账号走**。

### 只有主职责常驻

常驻的成本不是「多几百字」，是**每条业务线都常驻之后的总和** —— 分配、追踪、排班、复盘、盘点，每加一条，其余所有会话都在白白背着它的篇幅，而**规则越多，每条被遵守的概率越低**。所以只有**主职责**（分配）常驻，次要的活写成单独一篇，常驻里**只留一行索引**。

⭐ 实测问「我前面分下去那两批现在怎么样了」，模型**第一步就自己去把做法取了**，然后才查批次 —— 提示词里没有一句叫它这么做。

---

## 三、它手上的工具

工具是助手唯一能做事的通道。**没有对应工具的事，它做不了，也不会假装做了。**

### 设计思路：能靠结构解决的，⛔ 不靠叮嘱

模型会说出 `cold_3y`、`implant` 这种内部取值码，而主管看到不认识的词，第一反应是**系统坏了**。

最初的对策是在提示词里写两页「不许说出取值码」—— **拦不住**。因为模型调工具时**必须**拿这些码当参数，回话时自然就带出来了。

真正的解法是**在返回值里就给它现成的中文**：既回显它传进来的条件，又把内部分档的名字换成中文。**它手里有话可说，就不会去说码。**

<Callout type="info">这是这套工具设计反复用的那条判据：**能让它「说不出来」的，就别写成「不许说」。** 提示词里的禁令只拦得住你预想到的那些；把码换成中文是结构上的 —— 它想说也说不出来。</Callout>

### 工具描述怎么写

工具描述是模型**决定调不调**时唯一能看的东西。一条描述要答三件事：

| | 写什么 |
|---|---|
| **干什么** | 一句话说清它回答哪个问题 —— 「回答『现在该联系谁 / 今日推荐』」 |
| **什么时候用、什么时候别用** | 「出方案**不需要**先调它，方案自己会取名册」「试探性调一次没有『预览』，那一次就是真撤」 |
| **怎么用** | 参数怎么填、跟哪个工具配套 —— 「先用它给摘要，再用名单取明细」 |

**「什么时候别用」是最值钱的那一条，也几乎每条背后都有一次实测事故。**「不需要先调看人手」是抓到模型写字前白调了一次、返回的数一个没用上；「撤销没有预览」是因为它真的没有。**一个工具能干什么，看名字就猜得到；什么时候不该用，只能踩出来。**

⚠️ 两条硬边界：

- **返回值只给事实，⛔ 不给成品句子** —— 踩过：某个返回值里混了给模型的指令，模型照抄，内部指令原样贴进了主管的对话框。护栏要写成**规范**，⛔ 不写成台词。
- **描述里⛔ 不留正面举例。** 也踩过：描述里写「他会说『只要商保直付的』」，模型把这个例子**逐字念给主管听**了，而那一版数据里根本没有这一类。⇒ 反例可以留，正例不留。

### 全部工具

<Callout type="info">**两个人拿到的清单不一样** —— 不是靠提示词叮嘱它「别看别人的」，是那些工具**根本没发给它**。</Callout>

**两种人都有（9 个）**

| 工具 | 一句话 |
|---|---|
| 我是谁 | 当前登录人、能管哪几家诊所 |
| 找患者 | 按姓名 / 手机 / 患者号模糊找人 |
| 患者全貌 | 一次拉全：画像要点 + 近期事实 + 当前召回计划 |
| 患者画像 | 全量画像 —— PAC **推断**出来的那一层 |
| 患者事实 | 真实发生过的事，按时间排 —— **不含推断** |
| 这次为什么召回他 | 当前召回计划：场景、原因、优先级 |
| 召回池名单 | 现在该联系谁，按优先级排 |
| 召回池概览 | 总量 + 优先级分档 + 病种分布 |
| 画出来 | 把适合看不适合读的东西渲染成图 |

**只有主管有（另 12 个）**

| | 工具 | 一句话 |
|---|---|---|
| **选人** | 看人手 | 在岗客服名册 + 各自在手量 |
| | 看这批人构成 | 这批人各画像维度各多少人 |
| **出方案** | 出一版方案 | 选人 + 排客服 + 算引导，一次算完 |
| | 看当前确认单 | 那张单**现在**什么样（他动过手之后助手看不见） |
| | 改确认单 | 移出谁 · 改派 · 改时限 · 设福利 |
| | 摆确认单 / 摆引导 | 决定它们落在正文哪一句之后（两个工具） |
| **追踪** | 分过哪几批 | 批次列表 + 每批汇总 |
| | 某批怎么样了 | 进度 · 按客服拆 · 退回原因 · 通话成效 · 逐条纪要 |
| | 为什么分给了他 | 从分配**当时**的决策快照查 |
| **收回** | 撤销整批 | 限时收回 —— **唯一会改数据的工具** |
| **取做法** | 取一份做法 | 某一类活按什么顺序做（见 §2） |

---

## 四、三者分工

```mermaid
flowchart LR
  H["👤 主管<br/>做决定"] -->|说一句话| A["🤖 助手<br/>组织语言 · 调工具"]
  A -->|调用| P["⚙️ 程序<br/>算数 · 取数 · 落库"]
  P -->|事实| A
  A -->|一段话 + 一张确认单| H
  H -->|点确认| P

  style H fill:#fef3c7,stroke:#f59e0b
  style A fill:#e0e7ff,stroke:#6366f1
  style P fill:#d1fae5,stroke:#10b981
```

| | 负责 | ⛔ 不负责 |
|---|---|---|
| **主管** | 所有决定 | —— |
| **助手** | 理解他的话、组织成人话、把决定翻译成动作 | **任何数字**、谁分给谁、要不要落库 |
| **程序** | 挑人、落人、算判据、写库 | 措辞 |

**一条铁律**：凡是能算的，都由程序算。助手只转述。

---

## 五、要主管定的事，做成按钮

程序算出「这一版还有什么没定」，**摆成按钮**，不让主管打字。

| 节点 | 它对主管说什么 | 不处理会怎样 |
|---|---|---|
| **专属排满了** | 「182 人的专属客服这轮已排满」——**第三趟那一组**，四个选择：换无专属的补上（池子还有人时才给）/ 铺平给在岗 / 各自归专属客服 / 移出本批 | 这批不发给他们 |
| **能加个条件** | 「这批候选 2,663 人，也可以只选其中一类」+ 四个带人数的选项（见 §1） | 就按这批候选全部人来 |
| **这批多大** | 「本批 405 人 = 在岗 9 人 × 每天 15 通 × 3 天」，式子摊开给他看 | 就按这个数发 |
| **最忙的那位** | 「这批发下去，最忙的是王强：手上共 75 条，约 5 天的量；**另有 2 位也超过 3 天**」 | 就按这个时限发，到期没打完的自动回池 |

⚠️ **为什么要报「另有几位」**：只说最忙的一个，主管分不出两种局面 —— 而这两种局面该做的事**正好相反**：只有王强超，就给他少分点、改派几个；全队都超，就得减少这批、延长时限。只有他一个人超时那半句不出现，⛔ 不制造无谓噪音；也⛔ 不在这里铺开每个人 —— 确认单上每位客服那一行已经写着「约 N 天」，引导只负责**点出要他定的事**，不负责展示数据。

⚠️ **「最忙的那位」只给一个选项，而且必须带数**：「整批时限改成 **5** 天」—— 那个 5 是按最忙那位的量算出来的。曾经还有「改每人每天打几通」「减少本批人数」两个，删掉了：它们**一个数都不带**，点下去等于替主管说了句「减少一些」—— **一个不带数的按钮，严格弱于他自己开口说一句。**

每条按钮都带三样：**是什么**、**为什么**、**不处理等于什么**。三条设计原则：

| | |
|---|---|
| **只陈述事实** | ⛔ 不写「建议你铺平」「打不完」「人太多了」「建议减到 200」—— 给建议就是替主管做决定 |
| **默认永远是「不动」** | 一条不点、直接确认，**在任何情况下都安全** |
| **有后果的全亮** | ⛔ 不许省、不许弱化成「另有若干」—— 藏一条，他就不知道有东西卡着 |

按钮和说话**走同一套动作**：他点按钮，和他开口说「把待分配的都还给专属客服」，落到程序里是同一件事。

---

## 六、红线

| ⛔ 绝不 | 为什么 |
|---|---|
| 报没查过的数字 | 曾对主管说「共 70 人，重要价值 4 人」，而工具一次没调，真值 278 / 97 |
| 说「已撤销」而没真撤 | 那 9 个患者还挂在客服名下，主管以为人已回池、不会再补救 |
| 说「已经分配好了」 | **点确认的是他的手**，助手只是把方案摆出来 |
| 把患者从他的专属客服手里挪走 | 关系层面的决定，只有主管能拍板 |
| 讲「成功率 / 转化率」 | 本系统**不统计成功与否**，那个结论编不出来 |
| 替他加福利的条件、期限、承诺 | 他说什么就原样写进去 |
| 说「我做不到」「你先自己弄完再说」 | 他能改的东西助手手上都有工具；把几十次手工操作推回给主管，不是保护，是推卸 |

---

## 七、怎么知道它没变坏

助手这层**天生有波动** —— 同一句话问两次，它未必走同一条路。所以验收分三层：

| 层 | 测什么 | 判据 |
|---|---|---|
| **算法与取数** | 挑人 · 落人 · 判据 | 单元测试，过 / 不过 |
| **交接** | 谁传什么、谁压过谁 | 契约测试，过 / 不过 |
| **助手行为** | 该调的工具调没调 | 用例集跑批，**通过率** |

**第三层的判据是「动作」，不是「文字」。** 同一个意思十种说法都对；而最贵的那类失败恰恰是**话说得挺好、工具一次没调**。

<Callout type="warn">**跑一次不算数。** 同一份配置跑 3 轮得到 1/3、跑 10 轮得到 9/10 —— 是同一个行为。判断「它是不是退步了」必须看多轮通过率。</Callout>

用例全部来自**真实踩过的坑**，每条都写明由来 —— 没有一条是设想出来的场景。

---

## 八、跟一般的助手不一样在哪

这些差别都不是技术选择，是**产品选择** —— 每一条背后都有一个「如果按常规做会怎样」。

| | 一般的助手 | 这一个 | 为什么 |
|---|---|---|---|
| **会话** | 有「新建会话」、有历史列表 | **都没有** —— 会话跟着他此刻在做的事，离开工作台就结束 | 它不是一个聊天产品，是**工作台的一部分**。让他管理「会话」，等于给他一件本来不存在的活 |
| **搞不清时** | 反问澄清，一轮一轮问 | **不追问，直接出一版** | 追问一轮 = 他等一轮。而**一版具体的方案本身就是最好的问题** —— 他看着改，比回答抽象提问快得多 |
| **让他做选择** | 让他打字说清楚 | **摆成按钮**，按钮和说话**走同一套动作**（见 §5） | 打字要过「模型理解 → 翻成动作」，而按钮是固定的，没有理解错的余地 |
| **输出** | 一段文字，卡片位置由模板定 | **模型自己排版** —— 卡片和按钮落在正文哪一句之后，由它调工具的位置决定 | 「先讲怎么排的，再摆明细」和「先甩一屏名单」是两种阅读体验，而只有它知道自己讲到哪了 |
| **和界面的关系** | 把知道的都说一遍 | **界面已经显示的不再说** —— 只写界面说不出来的那半句 | 同一件事读两遍，他下次就开始跳读，而跳读时最先丢的正是最要紧的那句 |
| **数字** | 模型自己算、自己推 | **一个数都不许自己产生**（见 §4） | 凡是能算的都由程序算，助手只转述 |
| **出错的兜底** | 出错了给个提示 | **默认永远安全** —— 一条引导不点、直接确认，在任何情况下都不会出事 | 他可以完全不理会助手的建议，而这不该有任何代价 |
| **怎么算验收通过** | 跑通一次就算 | **看多轮通过率**（见 §7） | 这一层天生有波动，跑一次说明不了任何事 |

<Callout type="info">**贯穿这些差别的是同一条：助手是工作台的一部分，不是工作台旁边的一个聊天机器人。** 它没有自己的「产品面」—— 没有会话管理、没有历史、没有设置。**主管手上那件事，就是它存在的全部理由。**</Callout>

---

**一句话**：主管做决定，助手把决定落成动作，程序保证数是真的。三者边界不靠自觉，靠**结构** —— 算得出来的不让它算，看不到的不发给它，做不了的不给工具。
