Task 生命周期(Prompt 设计视角)
Historical research(2026-07-23 校准):本文基于 2026-05 prompt snapshot,不能代表 current code 或未来设计。当前 Task V2 parity 和 Task V2+ 路线见 工程审计与实施基线;Task V3 proposal 尚未 finalized。
本文从四个 AI prompt 的实际逻辑反推 Task 的整个生命周期——即「prompt 是怎么设计 Task 的」,与 Task 生成、更新与关闭机制(产品设计视角)互补。
来源:基于 2026-05 四 prompt 改动版(triage / classification / coaching / contact-analyzer)逐句提取。
Prompt 是 AI 行为的最终权威;本文如实记录 prompt 怎么写,不替 prompt 做产品判断。文末「与现有 spec 的差异」标出了 prompt 与设计文档对不上的地方。
一、全景:四个 prompt 的 Task 分工
Task 设计高度集中在 contact-analyzer(99 处提及)。其余三个 prompt 对 Task 只做一件事——显式声明「我不碰 Task」,这是刻意的职责隔离。
两条核心设计原则:
-
Task 不在「单通电话」层产生,在「跨通话 + SMS + 历史」层产生。单通信息不足以判断一个「未解决的人工工作目标」。
-
Task 由「未解决的目标」驱动,不由「事件」驱动——原文出自 contact-analyzer prompt § TASK LIFECYCLE DECISION FRAMEWORK:
A task represents one open human-work objective for one contact. Do not create tasks from events alone. First identify the unresolved objective staff can act on.
For every new call, SMS, voicemail, lead record, or system event, decide:
- Does this event create a specific customer-level human-work objective?
- Is that objective still unresolved?
- Can staff action change the business outcome?
- Is there already a pending task for the same objective?
- Is the contact blocked from outreach or outside this workflow?
二、上游信号 → 下游决策
上游三个 prompt 不下结论,只给 contact-analyzer 喂信号;contact-analyzer 才把信号变成 Task 决策。
Classification 的 follow_up reason 码(三选一,禁止自创):
完整的 task 触发信号集合
follow_up.needed 是最显式的一条,但 contact-analyzer 还从这些地方读信号做决策:
双用途关闭信号
DNC/STOP、wrong-number、corporate/vendor 这 3 类信号既阻止建新 task,也关闭已有 pending task(closeResult 是关键):
prompt 原文(DNC 段):close existing pending outreach/customer-workflow tasks with
closeResult = do_not_contactwhen a matching taskId is shown
Per-Call AI(Pipeline 1)设
follow_up_needed=yes还会直接触发 Pipeline 2(contact-analyzer)运行——触发机制详见 Task 生成机制 §一。
三、Contact Analyzer 的 Task 决策机制
定位:每日批处理(或员工 Refresh AI),读全量通话 + SMS + 历史 + 当前 Contacts 快照,输出
taskDecisions[]写入 Tasks 表。一个 Task = 一个联系人的一个开放的人工工作目标。
3.1 决策框架:5 问 → 4 路径
对每一个新通话 / SMS / voicemail / lead 记录 / 系统事件,先问 5 个问题:
- 这个事件是否产生了一个客户级的人工工作目标?
- 该目标是否仍未解决?
- 员工行动能否改变业务结果?
- 同一目标是否已有 pending task?
- 联系人是否被 block(DNC / 不属于本流程)?
然后为该目标选恰好一条路径:
NO CHANGE这条最容易被忽略,但它正是 prompt 反复强调的"不要见到事件就反射性建 / 改 task"。4 条路径互斥,prompt 原文要求 "choose exactly one task path for that objective"(每个目标恰好选一条)。
外呼电话/短信只算外联尝试,不自动完成任务。禁止普遍套用「一次有效尝试就关闭任务」——只有场景规则明确允许时才在一次尝试后关闭(如:已充分外联且无新高意向回应的 lead follow-up;已发付款链接但付款未确认的 billing 补救)。cancellation/complaint/upgrade/manager-callback/referral/win-back 类必须保持 pending,直到系统数据变化、员工手动关闭、对话明确解决,或满足场景关闭规则。
3.2 typeCategory(按 lifecycleStage 分发)
CREATE 时按联系人当前 lifecycleStage 选 typeCategory:
排除:
lead_outreach(Lead 首次联系)由 lead-tracking 系统在 Lead 到达时创建,不归这条 pipeline——prompt 明确「these are created by the lead-tracking system, not by this pipeline」。
3.3 closeResult(关闭结果枚举)
CLOSE 时按结果匹配 closeResult(必须引用 PENDING TASKS 里的真实 taskId):
约束:
converted仅在有可靠会员购买/会员数据时用,不因 lead 订了 intro 就用converted。attempted谨慎用:可用于充分外联仍无回应的 lead follow-up;禁止对 cancellation/complaint/billing/manager-callback 在一次失败尝试后就关为attempted。
后端 enum 缺口(backend-gated):
booked和cancelled是业务需要的 closeResult,但后端TASK_CLOSE_RESULT尚未支持。过渡期用other+ 明确 reason 兜底,禁止误用converted(给已订课的 lead)或cancel_saved(给确认取消的)。原因:lead 可以完成预约但还没成为会员;取消也可以在挽留失败时继续推进。
3.4 priority
3.5 suggestedActions(OTF 场景模板)
重大设计点:suggestedActions 是自由文本,禁止输出泛化 CRM 标签(call_back / send_sms / book_trial / book_appointment / schedule_tour / send_pricing)。
每条建议至少包含:① 渠道(call / SMS / manager callback / 无人工动作);② OTF 具体业务目标。有上下文时再加:③ 支撑证据;④ playbook 话术方向;⑤ 关闭/完成条件。
反编造:不准凭空造证据、先前上下文、话术、报价、促销、价格或关闭条件。最新通话引用了之前的对话时,用历史互动记录和 pending tasks 补上下文,不强求最新这通包含所有细节。
prompt 给了 8 个 OTF 场景模板:new lead / pricing question / already-booked / post-class follow-up / cancellation risk / billing recovery / complaint-retention / do-not-contact。
3.6 "DO NOT create task" 清单(V1 范围控制)
以下情况不建 task(共 13 类):
lifecycleState = "terminal"(除主动回归的 churned →win_back)- 无明确可行下一步(
actionNeeded应为 false) - 同
typeCategory已有 pending task → 改为 UPDATE/CLOSE/留着 doNotContact = true或客户明确说不要联系- corporate/vendor/partner/非客户业务询问(V1)
- 唯一新事件是无客户回应的外呼尝试
- 唯一新事件是无个人回复的群发消息
- 仅无人接听、信箱满、无意义 voicemail、无高意向的例行确认
- 客户已预约且只剩确认短信、intake/waiver 提醒、到场指引
- 唯一原因是缺 intake form(V1 忽略)
- 互动中已解决且无投诉/升级/承诺下一步/遗留目标
typeCategory会是lead_outreach(由 lead-tracking 系统建)
3.7 关键约束
- 每个 contact 每个
typeCategory最多 1 个 pending task(DB 强制),不许建重复。 - close/update 引用的
taskId必须来自 PENDING TASKS 输入,伪造会被拒。 actionNeeded/suggestedActions/taskDecisions三者一致:需后续人工跟进 → 建/更新真实 task 且actionNeeded=true;不需要 →actionNeeded=false且suggestedActions=[](仍可在taskDecisions里关闭已完成/失效/被阻断的 pending task)。- 空的
taskDecisions[]表示「已考虑所有场景,无人工 task 动作需要」。
四、Task 决策的输入依据
contact-analyzer 读哪些输入区来做 Task 判断:
五、与现有 spec 的差异(需对齐)
从 prompt 反推时发现 prompt 与现有设计文档对不上,如实记录,不在本文做产品判断:
这与 CLAUDE.md「Docs vs DB Schema 漂移(#199)」追踪的不一致同源。要不要据此对齐
tasks-field-design.md/task-lifecycle.md,是产品决策,需另行确认。