欢迎光临
我们一直在努力

17-solution-scoping-方案范围与架构设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

在这里插入图片描述

第 17 课:Problem Scoping + Solution Architecture——把"大需求"收敛成 2 周 MVP

客户说"我们要一个 AI 全自动员工",你的回话不该是报价,是该砍什么。

系列:AI FDE 20 课 | 主线项目:北岸智造企业 AI Assistant
本课在主线中的位置:把"企业 AI 全自动员工"收敛成 2 周可交付 MVP(先自动处理 30% 客服分类与知识检索)

学习目标

  • 能按 Problem → User → Workflow → Pain Point → Data → AI Capability → MVP → KPI → Architecture → Timeline 完整链路,把一句模糊需求填成结构化 scope 文档
  • 能用 80/20 收敛法,把"企业 AI 全自动员工"收敛到"先自动处理 30% 的客服分类和知识检索",并为每个被砍项写明理由和 V2 升级条件
  • 能核算 2 周 MVP 的工程容量(人天表),并说明哪些部分复用前序课程的既有资产
  • 能为 MVP 设计可测量的 KPI:每个 KPI 都有分母、分子、测量方式和数据来源,且至少一个是业务指标
  • 能做 MVP 的 ROI 速算,判断"这个 MVP 值不值得花 2 周"

FDE 场景导入

北岸客服总监王琳在需求会上只说了一句话:"给我们一个 AI 全自动员工,分类、答疑、建工单、催办,全都要。"她手下 24 名客服,日均 400 张工单,旺季积压到隔日才能清零。如果照单全收,两周后的 Demo 会变成三个半成品拼在一起,每个都不可靠,验收大概率黄掉。

我带着她做了两件小事。第一件:抽 100 张真实工单看处置流程,发现其中 60% 只需要两步——分好类,把知识库里现成的答案贴给客户;真正需要建工单、查 ERP、走审批的复杂单占四成。第二件:把她的"全自动员工"翻译成可验证的目标——先自动处理 30% 的客服分类和知识检索,其余进 V2 清单,附上升级条件。两周后 MVP 交付:自动处理率 30%,抽检准确率 86%。王琳签了验收,并且主动要了 V2 排期。scope 不是省事的借口,它是用数据换来的客户信任。

核心概念

1. Scope 全链路(Problem → Timeline)
Problem(要解决什么)、User(谁在痛)、Workflow(现在的流程)、Pain Point(痛在哪一步、一天多少次、错一次成本多少)、Data(数据在哪、谁拥有、哪些可信)、AI Capability(AI 具体干什么)、MVP(最小可交付单元)、KPI(什么算成功)、Architecture(组件怎么长出来)、Timeline(两周怎么排)。十个环节是一条推导链:前五个环节是 Discovery 的产物(第 16 课的访谈数据),后五个环节是工程决策。缺任何一环,后面的决策就是在猜。
为什么 FDE 必须懂:客户只会给第一环(“我们要提效”)。FDE 的活儿就是把十环全部填实,并且让客户签认——签的不是文档,是承诺。

图:Scope 十环推导链与签字线

#mermaid-svg-7h0HbDTEcm9vR96V{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7h0HbDTEcm9vR96V .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7h0HbDTEcm9vR96V .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7h0HbDTEcm9vR96V .error-icon{fill:#552222;}#mermaid-svg-7h0HbDTEcm9vR96V .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7h0HbDTEcm9vR96V .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7h0HbDTEcm9vR96V .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7h0HbDTEcm9vR96V .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7h0HbDTEcm9vR96V .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7h0HbDTEcm9vR96V .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7h0HbDTEcm9vR96V .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7h0HbDTEcm9vR96V .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7h0HbDTEcm9vR96V .marker.cross{stroke:#333333;}#mermaid-svg-7h0HbDTEcm9vR96V svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7h0HbDTEcm9vR96V p{margin:0;}#mermaid-svg-7h0HbDTEcm9vR96V .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-7h0HbDTEcm9vR96V .cluster-label text{fill:#333;}#mermaid-svg-7h0HbDTEcm9vR96V .cluster-label span{color:#333;}#mermaid-svg-7h0HbDTEcm9vR96V .cluster-label span p{background-color:transparent;}#mermaid-svg-7h0HbDTEcm9vR96V .label text,#mermaid-svg-7h0HbDTEcm9vR96V span{fill:#333;color:#333;}#mermaid-svg-7h0HbDTEcm9vR96V .node rect,#mermaid-svg-7h0HbDTEcm9vR96V .node circle,#mermaid-svg-7h0HbDTEcm9vR96V .node ellipse,#mermaid-svg-7h0HbDTEcm9vR96V .node polygon,#mermaid-svg-7h0HbDTEcm9vR96V .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7h0HbDTEcm9vR96V .rough-node .label text,#mermaid-svg-7h0HbDTEcm9vR96V .node .label text,#mermaid-svg-7h0HbDTEcm9vR96V .image-shape .label,#mermaid-svg-7h0HbDTEcm9vR96V .icon-shape .label{text-anchor:middle;}#mermaid-svg-7h0HbDTEcm9vR96V .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7h0HbDTEcm9vR96V .rough-node .label,#mermaid-svg-7h0HbDTEcm9vR96V .node .label,#mermaid-svg-7h0HbDTEcm9vR96V .image-shape .label,#mermaid-svg-7h0HbDTEcm9vR96V .icon-shape .label{text-align:center;}#mermaid-svg-7h0HbDTEcm9vR96V .node.clickable{cursor:pointer;}#mermaid-svg-7h0HbDTEcm9vR96V .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7h0HbDTEcm9vR96V .arrowheadPath{fill:#333333;}#mermaid-svg-7h0HbDTEcm9vR96V .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7h0HbDTEcm9vR96V .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7h0HbDTEcm9vR96V .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7h0HbDTEcm9vR96V .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7h0HbDTEcm9vR96V .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7h0HbDTEcm9vR96V .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7h0HbDTEcm9vR96V .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7h0HbDTEcm9vR96V .cluster text{fill:#333;}#mermaid-svg-7h0HbDTEcm9vR96V .cluster span{color:#333;}#mermaid-svg-7h0HbDTEcm9vR96V div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7h0HbDTEcm9vR96V .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7h0HbDTEcm9vR96V rect.text{fill:none;stroke-width:0;}#mermaid-svg-7h0HbDTEcm9vR96V .icon-shape,#mermaid-svg-7h0HbDTEcm9vR96V .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7h0HbDTEcm9vR96V .icon-shape p,#mermaid-svg-7h0HbDTEcm9vR96V .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7h0HbDTEcm9vR96V .icon-shape .label rect,#mermaid-svg-7h0HbDTEcm9vR96V .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7h0HbDTEcm9vR96V .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7h0HbDTEcm9vR96V .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7h0HbDTEcm9vR96V :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

Problem 问题

User 用户

Workflow 流程

PainPoint 痛点

Data 数据

客户签字线

AI能力 具体做什么

MVP 最小可交付单元

KPI 什么算成功

Architecture 组件推导

Timeline 两周排期

2. 80/20 收敛(Scope 裁剪)
拿数据说话:先抽样看真实流量构成,把"占 60% 流量、只需两步操作"的部分圈出来做,剩下的进 V2 清单。每个被砍的项必须写三样东西:为什么现在不做、升级到 V2 的触发条件、砍掉它省下的容量去哪了。
为什么 FDE 必须懂:"企业 AI 全自动员工"是愿景,不是 scope。不收敛的 scope 在 2 周时限下只有两种结局:延期,或者每个功能都半成品。

图:80/20 范围裁剪流程

#mermaid-svg-5rYfq90GDxphoYGI{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5rYfq90GDxphoYGI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5rYfq90GDxphoYGI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5rYfq90GDxphoYGI .error-icon{fill:#552222;}#mermaid-svg-5rYfq90GDxphoYGI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5rYfq90GDxphoYGI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5rYfq90GDxphoYGI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5rYfq90GDxphoYGI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5rYfq90GDxphoYGI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5rYfq90GDxphoYGI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5rYfq90GDxphoYGI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5rYfq90GDxphoYGI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5rYfq90GDxphoYGI .marker.cross{stroke:#333333;}#mermaid-svg-5rYfq90GDxphoYGI svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5rYfq90GDxphoYGI p{margin:0;}#mermaid-svg-5rYfq90GDxphoYGI .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-5rYfq90GDxphoYGI .cluster-label text{fill:#333;}#mermaid-svg-5rYfq90GDxphoYGI .cluster-label span{color:#333;}#mermaid-svg-5rYfq90GDxphoYGI .cluster-label span p{background-color:transparent;}#mermaid-svg-5rYfq90GDxphoYGI .label text,#mermaid-svg-5rYfq90GDxphoYGI span{fill:#333;color:#333;}#mermaid-svg-5rYfq90GDxphoYGI .node rect,#mermaid-svg-5rYfq90GDxphoYGI .node circle,#mermaid-svg-5rYfq90GDxphoYGI .node ellipse,#mermaid-svg-5rYfq90GDxphoYGI .node polygon,#mermaid-svg-5rYfq90GDxphoYGI .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5rYfq90GDxphoYGI .rough-node .label text,#mermaid-svg-5rYfq90GDxphoYGI .node .label text,#mermaid-svg-5rYfq90GDxphoYGI .image-shape .label,#mermaid-svg-5rYfq90GDxphoYGI .icon-shape .label{text-anchor:middle;}#mermaid-svg-5rYfq90GDxphoYGI .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5rYfq90GDxphoYGI .rough-node .label,#mermaid-svg-5rYfq90GDxphoYGI .node .label,#mermaid-svg-5rYfq90GDxphoYGI .image-shape .label,#mermaid-svg-5rYfq90GDxphoYGI .icon-shape .label{text-align:center;}#mermaid-svg-5rYfq90GDxphoYGI .node.clickable{cursor:pointer;}#mermaid-svg-5rYfq90GDxphoYGI .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5rYfq90GDxphoYGI .arrowheadPath{fill:#333333;}#mermaid-svg-5rYfq90GDxphoYGI .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5rYfq90GDxphoYGI .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5rYfq90GDxphoYGI .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5rYfq90GDxphoYGI .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5rYfq90GDxphoYGI .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5rYfq90GDxphoYGI .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5rYfq90GDxphoYGI .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5rYfq90GDxphoYGI .cluster text{fill:#333;}#mermaid-svg-5rYfq90GDxphoYGI .cluster span{color:#333;}#mermaid-svg-5rYfq90GDxphoYGI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5rYfq90GDxphoYGI .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5rYfq90GDxphoYGI rect.text{fill:none;stroke-width:0;}#mermaid-svg-5rYfq90GDxphoYGI .icon-shape,#mermaid-svg-5rYfq90GDxphoYGI .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5rYfq90GDxphoYGI .icon-shape p,#mermaid-svg-5rYfq90GDxphoYGI .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5rYfq90GDxphoYGI .icon-shape .label rect,#mermaid-svg-5rYfq90GDxphoYGI .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5rYfq90GDxphoYGI .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5rYfq90GDxphoYGI .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5rYfq90GDxphoYGI :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

客户原话 全自动员工

抽样100张真实工单

分析流量构成与操作步数

圈出占比高步骤少的部分

收敛为MVP一句话

剩余部分进V2清单

写明为什么现在不做

写明升级触发条件

写明省下的容量去向

3. MVP 是验证假设的最小单元,不是缩水版全系统
MVP 要回答一个业务假设:“客服愿意采用 AI 给出的分类和答案建议吗?30% 的自动处理率下准确率能稳住 85% 吗?“MVP 里每一项都直接服务于假设验证。反模式是"缩水版全系统”——把 Agent 链路、工单写操作、多租户隔离全塞进来但每项都砍一半,结果是每项都不可验证。
为什么 FDE 必须懂:MVP 验收时客户问的不是"功能齐不齐”,而是"这个假设成不成立、数据怎么说"。

4. KPI 的可测量性设计
每个 KPI 三要素:分母、分子、测量方式,外加一个数据来源和一个责任人。“自动处理 30%”:分母 = ServiceNow 日新增工单,分子 = 系统输出且人工点"采用"的工单,测量方式 = 每日自动统计,来源 = 工单系统时间戳。至少一个 KPI 是业务指标(处理时长、首次响应时长),不能全是技术指标。
为什么 FDE 必须懂:KPI 是验收合同。写不出测量方式的 KPI 就是形容词,上线第一天就会变成扯皮现场。

图:KPI 可测量性四要素

#mermaid-svg-1KYCD2GUnZacRqUb{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-1KYCD2GUnZacRqUb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-1KYCD2GUnZacRqUb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-1KYCD2GUnZacRqUb .error-icon{fill:#552222;}#mermaid-svg-1KYCD2GUnZacRqUb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1KYCD2GUnZacRqUb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-1KYCD2GUnZacRqUb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1KYCD2GUnZacRqUb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1KYCD2GUnZacRqUb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-1KYCD2GUnZacRqUb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1KYCD2GUnZacRqUb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1KYCD2GUnZacRqUb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1KYCD2GUnZacRqUb .marker.cross{stroke:#333333;}#mermaid-svg-1KYCD2GUnZacRqUb svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1KYCD2GUnZacRqUb p{margin:0;}#mermaid-svg-1KYCD2GUnZacRqUb .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-1KYCD2GUnZacRqUb .cluster-label text{fill:#333;}#mermaid-svg-1KYCD2GUnZacRqUb .cluster-label span{color:#333;}#mermaid-svg-1KYCD2GUnZacRqUb .cluster-label span p{background-color:transparent;}#mermaid-svg-1KYCD2GUnZacRqUb .label text,#mermaid-svg-1KYCD2GUnZacRqUb span{fill:#333;color:#333;}#mermaid-svg-1KYCD2GUnZacRqUb .node rect,#mermaid-svg-1KYCD2GUnZacRqUb .node circle,#mermaid-svg-1KYCD2GUnZacRqUb .node ellipse,#mermaid-svg-1KYCD2GUnZacRqUb .node polygon,#mermaid-svg-1KYCD2GUnZacRqUb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1KYCD2GUnZacRqUb .rough-node .label text,#mermaid-svg-1KYCD2GUnZacRqUb .node .label text,#mermaid-svg-1KYCD2GUnZacRqUb .image-shape .label,#mermaid-svg-1KYCD2GUnZacRqUb .icon-shape .label{text-anchor:middle;}#mermaid-svg-1KYCD2GUnZacRqUb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-1KYCD2GUnZacRqUb .rough-node .label,#mermaid-svg-1KYCD2GUnZacRqUb .node .label,#mermaid-svg-1KYCD2GUnZacRqUb .image-shape .label,#mermaid-svg-1KYCD2GUnZacRqUb .icon-shape .label{text-align:center;}#mermaid-svg-1KYCD2GUnZacRqUb .node.clickable{cursor:pointer;}#mermaid-svg-1KYCD2GUnZacRqUb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-1KYCD2GUnZacRqUb .arrowheadPath{fill:#333333;}#mermaid-svg-1KYCD2GUnZacRqUb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1KYCD2GUnZacRqUb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1KYCD2GUnZacRqUb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1KYCD2GUnZacRqUb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-1KYCD2GUnZacRqUb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1KYCD2GUnZacRqUb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-1KYCD2GUnZacRqUb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1KYCD2GUnZacRqUb .cluster text{fill:#333;}#mermaid-svg-1KYCD2GUnZacRqUb .cluster span{color:#333;}#mermaid-svg-1KYCD2GUnZacRqUb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1KYCD2GUnZacRqUb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-1KYCD2GUnZacRqUb rect.text{fill:none;stroke-width:0;}#mermaid-svg-1KYCD2GUnZacRqUb .icon-shape,#mermaid-svg-1KYCD2GUnZacRqUb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1KYCD2GUnZacRqUb .icon-shape p,#mermaid-svg-1KYCD2GUnZacRqUb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-1KYCD2GUnZacRqUb .icon-shape .label rect,#mermaid-svg-1KYCD2GUnZacRqUb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1KYCD2GUnZacRqUb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-1KYCD2GUnZacRqUb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-1KYCD2GUnZacRqUb :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

KPI指标

分母 日新增工单

分子 点采用且24小时未重开

测量方式 每日自动统计

数据来源 工单系统时间戳

责任人 写角色不写人名

口径写进文档

业务方签字锁死

5. 架构由 scope 推导,不是由技术栈推导
组件清单从 MVP 能力反推:分类需要分类器,知识检索需要 RAG,留痕需要日志。每个组件回答"它服务哪条 MVP 能力",答不上来就砍。14 课画的生产全量架构(API Gateway、Queue、多租户隔离)是 Phase 2 的事,MVP 不背它的成本。
为什么 FDE 必须懂:架构每多一个组件,就多一份开发、测试、运维、讲清楚的负担。"架构漂亮"和"两周内交付"经常是反义词。

6. Timeline = 容量核算,不是甘特图
2 周 MVP 的工程预算大约 5 个工程人天(不含数据准备和评测集标注)。容量表逐项写:交付物、复用了哪课的资产、估算人天。复用率是 MVP 可行性的核心——复用不到一半的 MVP,两周交付就是画饼。
为什么 FDE 必须懂:客户问"凭什么说两周",你给的不是态度,是一张能逐行核账的表。

技术原理

Scope 决定架构的推导过程。 拿"先自动处理 30% 的客服分类和知识检索"这句话反推:分类 → 稳定 JSON 输出的分类器(第 6 课资产,输入投诉文本,输出 {intent, priority, sentiment, department});知识检索 → RAG 管道(第 7/8 课资产,Query Rewrite + Hybrid 检索 + Rerank + Citation);“建议"而不是"自动回复” → 输出层只需要建议卡片 + 人工点采用,不需要写 ServiceNow 的 API(第 13 课的 OAuth/幂等/重试全部推迟);留痕 → 每次分类和检索的全量对齐日志。推导完看组件清单:API 服务、分类器、RAG、轻量存储、日志。五个组件,每一项都能指回 scope 里的一个词。反过来检查也成立:清单里没有"工单 Agent"、没有"SAP 集成"、没有"Multi-Agent"——因为它们不在 30% 这个范围里。这个双向检查就是架构评审的全部内容。

2 周 MVP 的容量怎么核。 预算 5 个工程人天,逐项分配:分类器按北岸意图体系调 schema 和 few-shot 样本,1 人天(复用第 6 课全部 Prompt 资产);RAG 管道把首期知识库从 HR 政策 300 篇换成客服政策 800 篇,切块和参数沿用 07/08 课,0.5 人天;API 端点 2 个(POST /ai/classify、POST /ai/ask),1 人天(复用第 2 课脚手架);SQLite + 对齐日志表,0.5 人天;100 条 Golden 用例评测脚本,1 人天(复用第 11 课管道);部署联调 + 缓冲,1 人天(复用第 4 课 Docker 模板)。加总正好 5 人天。核算的关键不是加法,是"复用"那一列——哪一行写不出复用的课程资产,哪一行就是风险源,要么砍要么加钱,没有第三条路。

AI 能力选型的任务分解。 把"AI 全自动员工"拆成原子任务:文本分类(第 6 课已验证)、知识问答(07/08 课已验证)、多步任务编排(第 9/10 课 Agent)、跨系统写操作(第 13 课集成)。MVP 只取前两个已验证的,Agent 和写操作全部推迟。规则:新能力在 MVP 里不超过一个,其余必须是从前序课程直接搬的资产。这条规则不是保守,是把"技术不确定性"这个最大的延期变量摁死在零。

KPI 的可测量性设计细节。 “自动处理 30%“的分子判定规则必须提前写死并让客户确认:系统给出分类 + 答案,客服点"采用"且 24 小时内未重开,计为自动处理。口径不锁死,上线第一周就会有人问"为什么我明明采用了不算”。另外 KPI 要分两档:MVP 期(2 周试跑)用"抽检准确率 ≥85%、建议采用率有基线”,生产期(第 18 课)才承诺"自动处理率 ≥30% 稳态"。MVP 期不敢承诺稳态值,因为流量还没过完整周期。

范围蔓延的防御机制。 V2 清单本身就是防御:所有新需求(“能不能顺便加个自动建单”)一律先进 V2 清单,走"替换规则"——要加可以,从 MVP 里等量换掉一个项,客户自己选换哪个。通常他们选完就发现"好像也没那么急"。这条机制的价值不在于挡需求,在于把"要不要加"的决策成本从 FDE 的口头承诺变成客户的手动签字。

架构图

北岸客服 AI MVP(2 周目标态,从 scope 反推出来的最小架构):

北岸客服 AI MVP —— 2 周目标态(Scope 推导架构)
┌──────────────────────────── 数据源(现有系统,不改动)───────────────────────────┐
│ ServiceNow 工单队列(24 名客服,日均 400 张) Confluence 知识库 │
│ 工单文本 → 分类输入;工单时间戳 → KPI 分母 首期客服政策 800 篇(全库 100,000+)│
└──────────────────────────────────────────────────────────────────────────────────┘
↓(工单文本) ↓(离线建库:Loading → Chunking → Embedding)
┌────────────────────────────── MVP 服务 ──────────────────────────────────────────┐
│ POST /ai/classify POST /ai/ask │
│ 分类器(第 6 课资产) RAG(07/08 课资产) │
│ 输入:投诉文本 Query Rewrite → Hybrid 检索 │
│ 输出:{intent, priority, → Rerank top5 → Parent 展开 │
│ sentiment, department} → LLM(M1 档)+ Grounding + Citation 校验 │
│ 准确率门槛 ≥85%(100 条 Golden 用例) 答案附 [n] 引用,点开即原文 │
│ │
│ Model Gateway(M1 档为主:分类 + 检索生成都用便宜快稳的档位) │
│ 对齐日志:每条工单的 分类结果/检索 top-k/客服是否点采用 → SQLite │
└──────────────────────────────────────────────────────────────────────────────────┘
↓
客服工作台(建议卡片:分类 + 答案草稿 + 引用;客服点"采用" → 人工回写 ServiceNow)
↓
KPI:自动处理率(采用/分母,目标 30%)· 抽检准确率 ≥85% · 首响时长基线

MVP 明确不做(V2 清单):
✗ Agent 自动建工单/回写 ServiceNow(写操作 → 第 13 课集成,Phase 2)
✗ SAP/ERP 查询(复杂单占 40%,不在 30% 范围内)
✗ Multi-Agent(Supervisor/Worker 架构,Phase 2)
✗ 多租户完整隔离与 API Gateway(14 课生产架构,Phase 2)
升级条件:试跑期对齐日志显示 分类准确率 ≥90% 且 采用率 ≥50%,才启动写操作

代码示例

Python 为主。两段代码:① Scoping 检查表(把 10 环链路变成可校验的结构);② MVP ROI 速算(判断值不值得花 2 周)。

① Scoping 检查表(Scope Chain Checklist)

# scope_checklist.py —— 把 10 环链路填成结构化文档,并校验完备性
# 用法:按 SCOPE_CHAIN 的字段逐项填值,跑 check_scope();全部过关才允许画架构

SCOPE_CHAIN = {
"problem": "客服工单处理效率低,旺季积压到隔日",
"user": "客服坐席(24 人)+ 客服主管(看积压与时长)",
"workflow": "收单 → 人工判类(5min) → 翻知识库找答案(10min) → 回复(10min)",
"pain_point": "找答案最慢,日均 400 张单 × 10min;旺季积压跨日",
"data": "ServiceNow 工单文本与时间戳;Confluence 客服政策 800 篇(全库 100,000+)",
"ai_capability": "① 工单文本分类 {intent, priority, sentiment, department} ② 政策知识检索问答(带引用)",
"mvp": "先自动处理 30% 的客服分类和知识检索(建议卡片 + 人工点采用)",
"kpi": [
"自动处理率 30% = 点采用且 24h 未重开 / 日新增工单(来源:ServiceNow 时间戳)",
"抽检准确率 ≥85%(来源:100 条 Golden 用例 + 人工抽检 50 张/周)",
"首响时长较基线下降 ≥30%(来源:ServiceNow 首响时间戳)",
],
"architecture": ["API 服务", "分类器", "RAG", "SQLite+对齐日志", "建议卡片 UI"],
"timeline": "2 周:D1-D3 分类器调优 / D3-D7 RAG 建库 / D5-D9 评测 / D10-D14 试跑+修正",
"v2_backlog": [
("Agent 自动建工单", "试跑期分类准确率 ≥90% 且采用率 ≥50%"),
("SAP 订单/库存查询", "30% 自动处理率稳态运行 4 周"),
("Multi-Agent 架构", "单 Agent 工具调用失败率 <5%"),
],
}

def check_scope(scope: dict) –> list[str]:
"""完备性校验:缺环、KPI 不可测量、V2 无升级条件,都会报错"""
errors = []
for key in ["problem", "user", "workflow", "pain_point", "data",
"ai_capability", "mvp", "kpi", "architecture", "timeline"]:
if not scope.get(key):
errors.append(f"缺环:{key} 未填")

if not scope.get("mvp"):
errors.append("MVP 必须写成'先自动处理 X% 的哪些环节',而不是'全系统缩小版'")

for kpi in scope.get("kpi", []):
if not any(m in kpi for m in ("来源:", "分母", "%", "≥", "≤")):
errors.append(f"KPI 缺测量方式或数据来源:{kpi}")

for item, condition in scope.get("v2_backlog", []):
if not condition:
errors.append(f"V2 项缺升级条件:{item}")

return errors

if __name__ == "__main__":
errs = check_scope(SCOPE_CHAIN)
if errs:
print("Scope 未通过检查:")
[print(f" – {e}") for e in errs]
else:
print("Scope 检查通过,可以进入架构推导。")
print("MVP:", SCOPE_CHAIN["mvp"])
print("V2 项:", [item for item, _ in SCOPE_CHAIN["v2_backlog"]])

FDE 视角:v2_backlog 里每项带升级条件不是排版洁癖——两周后客户问"为什么不能顺便自动建工单",你翻出来的是"试跑期分类准确率 ≥90% 且采用率 ≥50% 才启动",而不是"来不及了"。前者是工程判断,后者是工期借口,客户对两者的信任度完全不同。

② MVP ROI 速算(判断值不值得花 2 周)

# mvp_roi.py —— 立项前的粗算:30% 自动处理能否覆盖 2 周投入
# 注意:这是立项级估算,参数来自 16 课 Discovery 的客户数据,不是拍脑袋

def mvp_roi_quick(monthly_tickets=12000, # 月工单量(400 张/日 × 30 天,客户给的数据)
handle_minutes=25, # 人工单均处理时长(16 课实测抽样值)
auto_rate=0.30, # MVP 目标:30% 自动处理(分类+检索建议被采用)
saved_minutes_ratio=0.60, # 被采用单中,人工环节实际省下的时间占比
labor_cost_per_hour=45, # 客服综合时薪(含社保,客户 HR 确认)
engineering_cost=22500, # 2 周 MVP 工程投入(5 人天 × 人天成本)
monthly_token_cost=900, # M1 档估算:分类+检索的月度 Token 费用
monthly_infra_cost=600, # 服务器+向量库+存储,月度
monthly_ops_hours=8) –> dict: # 运维/监控月度投入工时
"""返回立项级 ROI:月净收益与回本周期(月)"""
labor_hour_cost = labor_cost_per_hour # 每 1 小时人力的成本
minutes_saved_per_month = (monthly_tickets * auto_rate * handle_minutes
* saved_minutes_ratio)
gross_monthly = minutes_saved_per_month / 60 * labor_hour_cost
monthly_ops_cost = monthly_ops_hours * labor_hour_cost
net_monthly = gross_monthly – monthly_token_cost – monthly_infra_cost – monthly_ops_cost
payback_months = engineering_cost / net_monthly if net_monthly > 0 else float("inf")
return {
"月省时(小时)": round(minutes_saved_per_month / 60),
"月毛收益(元)": round(gross_monthly),
"月净收益(元)": round(net_monthly),
"回本周期(月)": round(payback_months, 1),
}

if __name__ == "__main__":
r = mvp_roi_quick()
print("立项级 ROI 速算(参数全部来自 Discovery 数据):")
for k, v in r.items():
print(f" {k}: {v}")

FDE 视角:这份脚本在 16 课访谈结束当晚就该跑一遍——如果回本周期算出来是"永不",MVP 根本不该立项,先回去改 scope 或换场景。脚本里每个参数的来源都要写在注释里,19 课会把它升级成正式的 ROI 测算表,到那时候参数要能经得起客户 CFO 的追问。

图:MVP ROI 速算链路

#mermaid-svg-TVm31GMaZL3Bs18D{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-TVm31GMaZL3Bs18D .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TVm31GMaZL3Bs18D .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TVm31GMaZL3Bs18D .error-icon{fill:#552222;}#mermaid-svg-TVm31GMaZL3Bs18D .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TVm31GMaZL3Bs18D .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TVm31GMaZL3Bs18D .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TVm31GMaZL3Bs18D .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TVm31GMaZL3Bs18D .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TVm31GMaZL3Bs18D .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TVm31GMaZL3Bs18D .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TVm31GMaZL3Bs18D .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TVm31GMaZL3Bs18D .marker.cross{stroke:#333333;}#mermaid-svg-TVm31GMaZL3Bs18D svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TVm31GMaZL3Bs18D p{margin:0;}#mermaid-svg-TVm31GMaZL3Bs18D .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-TVm31GMaZL3Bs18D .cluster-label text{fill:#333;}#mermaid-svg-TVm31GMaZL3Bs18D .cluster-label span{color:#333;}#mermaid-svg-TVm31GMaZL3Bs18D .cluster-label span p{background-color:transparent;}#mermaid-svg-TVm31GMaZL3Bs18D .label text,#mermaid-svg-TVm31GMaZL3Bs18D span{fill:#333;color:#333;}#mermaid-svg-TVm31GMaZL3Bs18D .node rect,#mermaid-svg-TVm31GMaZL3Bs18D .node circle,#mermaid-svg-TVm31GMaZL3Bs18D .node ellipse,#mermaid-svg-TVm31GMaZL3Bs18D .node polygon,#mermaid-svg-TVm31GMaZL3Bs18D .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TVm31GMaZL3Bs18D .rough-node .label text,#mermaid-svg-TVm31GMaZL3Bs18D .node .label text,#mermaid-svg-TVm31GMaZL3Bs18D .image-shape .label,#mermaid-svg-TVm31GMaZL3Bs18D .icon-shape .label{text-anchor:middle;}#mermaid-svg-TVm31GMaZL3Bs18D .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-TVm31GMaZL3Bs18D .rough-node .label,#mermaid-svg-TVm31GMaZL3Bs18D .node .label,#mermaid-svg-TVm31GMaZL3Bs18D .image-shape .label,#mermaid-svg-TVm31GMaZL3Bs18D .icon-shape .label{text-align:center;}#mermaid-svg-TVm31GMaZL3Bs18D .node.clickable{cursor:pointer;}#mermaid-svg-TVm31GMaZL3Bs18D .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-TVm31GMaZL3Bs18D .arrowheadPath{fill:#333333;}#mermaid-svg-TVm31GMaZL3Bs18D .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TVm31GMaZL3Bs18D .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TVm31GMaZL3Bs18D .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TVm31GMaZL3Bs18D .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-TVm31GMaZL3Bs18D .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TVm31GMaZL3Bs18D .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-TVm31GMaZL3Bs18D .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TVm31GMaZL3Bs18D .cluster text{fill:#333;}#mermaid-svg-TVm31GMaZL3Bs18D .cluster span{color:#333;}#mermaid-svg-TVm31GMaZL3Bs18D div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-TVm31GMaZL3Bs18D .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-TVm31GMaZL3Bs18D rect.text{fill:none;stroke-width:0;}#mermaid-svg-TVm31GMaZL3Bs18D .icon-shape,#mermaid-svg-TVm31GMaZL3Bs18D .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TVm31GMaZL3Bs18D .icon-shape p,#mermaid-svg-TVm31GMaZL3Bs18D .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-TVm31GMaZL3Bs18D .icon-shape .label rect,#mermaid-svg-TVm31GMaZL3Bs18D .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TVm31GMaZL3Bs18D .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-TVm31GMaZL3Bs18D .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-TVm31GMaZL3Bs18D :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

月工单量

乘 自动处理比例

乘 单均处理时长

乘 省时占比

月毛收益

减 Token月度费用

减 基础设施月度费用

减 运维工时成本

月净收益

除以 一次性工程投入

回本周期 以月计

立项判断 值不值得花两周

企业案例

把场景导入里的推导展开成完整的 scope 文档(就是这份文档拿去让王琳签字的):

  • Problem:客服工单积压,旺季隔日未清零;坐席 60% 的时间花在判类和翻知识库。
  • User:24 名客服坐席(执行者)、客服主管(看积压、首响时长、重开率)。
  • Workflow:收单 → 人工判类(约 5 分钟)→ 翻 Confluence 找答案(约 10 分钟)→ 组织回复(约 10 分钟)→ 回写 ServiceNow。
  • Pain Point:翻知识库最慢且质量不稳(新人命中率低);判类依赖老客服经验,旺季新人上岗后错分率上升。
  • Data:ServiceNow 工单文本、时间戳、处置记录(谁拥有:IT 部,客服数据只读);Confluence 客服政策 800 篇(全库 100,000+,客服政策归口在客服知识库空间)。
  • AI Capability:① 工单分类 {intent, priority, sentiment, department};② 政策问答(RAG + 引用)。
  • MVP:先自动处理 30% 的客服分类和知识检索——建议卡片 + 人工点采用,不做写操作。
  • KPI:自动处理率 30%(点采用且 24 小时未重开 / 日新增工单)、抽检准确率 ≥85%、首响时长降 ≥30%(对比试跑前 2 周基线)。
  • Architecture:五组件(API 服务 / 分类器 / RAG / SQLite 对齐日志 / 建议卡片 UI),复用第 2/6/7/8 课资产。
  • Timeline:2 周,容量表 5 工程人天 + 数据准备 2 人天 + 评测集标注 2 人天(客户侧配合,IT 部出工单样本、客服主管出标注)。

V2 清单(每项带升级条件):① Agent 自动建工单/回写——条件:试跑期分类准确率 ≥90% 且采用率 ≥50%;② SAP 订单/库存查询——条件:30% 自动处理率稳态运行 4 周;③ Multi-Agent 架构——条件:单 Agent 工具调用失败率 <5%;④ 多租户与生产网关——条件:接入第二部门。

这份文档的写法有个讲究:Problem 到 Data 六环全部来自 16 课访谈记录,FDE 没有添加任何"客户没说的需求";AI Capability 到 Timeline 四环是 FDE 的工程决策,每一环客户都要签字。签字线画在中间,责任就分清了。

常见错误

错误 1:MVP 做成"缩水版全系统"
→ 后果:分类、RAG、Agent 建单、多租户全塞进来,每项都砍一半。两周后 Demo 每个环节都能跑一步、每个环节都会在真实数据上翻车,验收变成"我们还需要更多时间"的拉锯。
→ 正确做法:MVP 围绕一个业务假设设计(“30% 自动处理率下准确率能否稳住 85%”),写操作和复杂集成全部进 V2 清单并附升级条件。新能力在 MVP 里不超过一个。

错误 2:Scope 文档只有 AI Capability,没有 Workflow 和 Data
→ 后果:跳过"现在的流程是什么、数据在哪、谁拥有",直接画架构。分类器的意图体系拍脑袋定的,和客户真实工单分布对不上;RAG 建库发现目标文档分散在三个空间且无权限。返工两周,MVP 变四周。
→ 正确做法:10 环前六环必须由 Discovery 访谈数据填实(16 课),FDE 只负责后四环。文档里每个数据源写清"系统 + 归口部门 + 访问方式"。

错误 3:KPI 写成形容词,没有分母分子和来源
→ 后果:写"自动处理率提升 30%“,上线第一周双方对"哪些单算自动处理"理解不一致——客服认为"看了建议再改的"也算采用,系统口径是"点采用且 24 小时未重开”。数据打架,验收悬置。
→ 正确做法:每个 KPI 锁死四要素(分母、分子、测量方式、数据来源),口径在 MVP 启动前写进文档并让业务方签字。试跑期口径和生产期口径分开写(MVP 期只承诺基线,不承诺稳态值)。

错误 4:V2 清单是空的,或者没有升级条件
→ 后果:两周后客户问"能不能加个自动建单",你没有预先写好的答案,当场拍胸脯说"加吧",MVP 范围蔓延;或者硬顶回去,客户觉得你不配合。无论哪种,scope 边界从此靠吵架维持。
→ 正确做法:V2 清单在 scope 签字时一并签,每项带升级条件(数据触发,不是时间触发)。新需求一律"替换规则":要加可以,等量换掉 MVP 里一项,客户自己选。

错误 5:架构先行——先画全量生产架构,再往里塞 MVP
→ 后果:14 课的完整生产架构(API Gateway、Queue、多租户隔离、Model Gateway 全套)全进 MVP,两周容量里一半花在客户根本不需要的组件上,核心能力(分类准确率)反而没调够。
→ 正确做法:架构从 scope 反推,每个组件回答"服务哪条 MVP 能力";生产架构作为 Phase 2 的独立章节放进方案,和 MVP 章节分开、分开报价、分开排期。

Workshop

课堂 30 分钟:把"企业 AI 全自动员工"收敛成 2 周 MVP。

材料(每组一份):

  • 客户需求原话:“我们想要一个 AI 全自动员工,客服那边分类、答疑、建工单、催办全都要,最好下个月就能用。”
  • 100 张抽样工单的处置记录(含处置类型、耗时、涉及系统)——已统计:60% 仅需"分类 + 知识库答案"两步;30% 需查订单/库存;10% 需建工单或走审批
  • 16 课的客户数据卡:24 名坐席、日均 400 张、单均处理 25 分钟、客服综合时薪 45 元

要求:

  • 用 Scoping 检查表模板(代码示例①)把 10 环全部填实
  • 做 80/20 收敛:从"全自动员工"收敛到明确的 MVP 一句话(格式:“先自动处理 X% 的____和____”),每个被砍项写升级条件
  • 核算 2 周容量:逐行写"交付物 / 复用哪课资产 / 人天",总预算 5 工程人天
  • 跑一遍 ROI 速算(代码示例②),写出"值不值得立项"的一句话结论
  • 产出物格式(每组一页 scope 卡):

    MVP 一句话:先自动处理 __% 的____和____
    10 环检查表:(Problem → Timeline,每环一行)
    砍掉的项及升级条件:①____ ②____ ③____
    容量表:交付物 / 复用资产 / 人天(总计 ≤5 人天)
    ROI 速算结论:回本周期 __ 月,__(值得 / 不值得,理由一句话)

    Lab 实战

    90 分钟:为北岸 MVP 写出可签字的 scope 文档

    目标:产出一份完整的 scope 文档(10 环 + V2 清单 + 容量表 + KPI 口径表),达到"拿去给客服总监签字"的完整度。

    步骤:

    • 用代码示例①的 SCOPE_CHAIN 结构起步,把 10 环按企业案例的素材填完(素材已给,但 KPI 的分子判定规则要自己写死)
    • 给 3 个 KPI 各补一张口径表:指标 / 分母 / 分子 / 测量方式 / 数据来源 / 责任人(责任人写角色不写人名)
    • 写 V2 清单:至少 4 项,每项"升级条件"必须是可测量的数据触发(禁止写"视情况"“后续考虑”)
    • 画容量表:5 工程人天 + 客户侧配合项(数据准备、标注),每项标"复用资产来源(课号)"
    • 跑 check_scope(),把报错全部修掉;再跑 mvp_roi_quick(),确认回本周期 <6 个月,否则回去调 scope
    • 预演签字:自己当客服总监,提三个刁钻问题(“30% 怎么算的?”“为什么不能顺便加自动建单?”“准确率 85% 怎么验证?”),把答案写进文档的 FAQ 节
    • 互审:和邻组交换文档,按"KPI 能否从 ServiceNow 里直接查出来"“升级条件是否可测量”"容量表每行是否有复用来源"三条标准挑刺

    验收标准:

    • 10 环无空缺,check_scope() 零报错
    • 3 个 KPI 的口径表完整,且至少 1 个是业务指标(首响时长)
    • V2 清单 ≥4 项且全部有可测量的升级条件
    • 容量表总计 ≤5 工程人天,每行有复用来源
    • FAQ 三个刁钻问题有书面答案

    实操

  • 反例练习:拿到一份真实感的需求单——“给财务部门做一个 AI,自动审发票、对账、生成月报,还要接 SAP”。用本课方法把它收敛成 2 周 MVP:先抽 100 张历史发票的处置记录(自造合理分布),定出"先自动处理 X% 的____",写出 10 环文档 + V2 清单 + 容量表,并标注哪一环的信息缺失、必须向客户补问什么。
  • Scope 变更演练:假设 MVP 试跑第 3 天,客服主管拿着数据来找你:对齐日志显示"物流类工单"的分类准确率只有 71%(其他类 ≥90%),但物流类占 25% 流量。给出你的处理决策(继续试跑?缩小范围到非物流类?加 3 天修分类器?),写出决策理由、KPI 口径是否要改、以及向客户汇报的一页纸。
  • 问题思考

    Q1:客户要求"两周上线一个 AI 全自动员工",你怎么回答?
    答题要点:不直接拒绝,也不直接答应。先要数据:抽样工单/请求的处置分布,找出"占比最高、所需步骤最少"的部分,把它翻译成"先自动处理 X% 的哪些环节"(北岸案例:30% 的客服分类和知识检索)。剩下的进 V2 清单,每项带可测量的升级条件。关键是把"做不做"变成"数据上先做哪块、什么条件做下一块"——客户拒绝的是工期,通常不会拒绝数据。

    Q2:MVP 的 KPI 应该怎么设计才算"可验收"?
    答题要点:每个 KPI 四要素——分母、分子、测量方式、数据来源,外加判定规则提前锁死并让业务方签字(比如"自动处理 = 点采用且 24 小时未重开")。至少一个 KPI 是业务指标而非技术指标(处理时长、响应时长)。MVP 期和稳态期的目标分开:试跑期只承诺基线和抽检准确率,不承诺稳态比例。答不出"分子判定规则"是面试里的红灯。

    Q3:客户在 MVP 进行到第 10 天说"加个自动建工单",你怎么办?
    答题要点:不临场拍板。走 V2 清单机制:这项本来就在 V2 清单里,升级条件(如分类准确率 ≥90% 且采用率 ≥50%)还没触发;如果客户坚持,走"替换规则"——从 MVP 里等量换掉一项(换掉什么客户自己选),工期相应顺延,白纸黑字。同时检查技术依赖:写 ServiceNow 需要 OAuth、幂等、重试(第 13 课资产),两周内塞进来会让核心能力的验证期只剩 2 天,这个风险要讲给客户听。答出"替换规则 + 升级条件"两个机制的是加分项。

    本课小结

    • Scope 是十环推导链:前六环来自 Discovery 数据,后四环是工程决策,签字线画在中间
    • 80/20 收敛靠数据不靠感觉:北岸的 MVP 是"先自动处理 30% 的客服分类和知识检索"
    • 架构由 scope 反推,每个组件必须能指回一条 MVP 能力,生产架构留给 Phase 2
    • 2 周 MVP = 5 工程人天容量核算,复用率低于一半就别承诺两周
    • V2 清单带升级条件是范围蔓延的防火墙,新需求走"替换规则"

    下一课衔接

    Scope 签了字,两周 MVP 也交付了,王琳说"可以,试点一个季度"。然后问题来了:试点要接真实流量,客户 IT 部门问的第一句话是"上线之后谁负责?出了事找谁?“从 Demo 到 Production 中间隔着 Pilot、SLA、Handover、Change Management 这一整条链路。下一课(18-poc-to-production-POC到生产交付.md)把自家 Agent 从"Demo"升级为"Customer Production Proposal”:架构、排期、成本、风险、KPI、Rollout 六件套,外加上线后怎么让用户真的用起来。

    赞(0)
    未经允许不得转载:171主机测评 » 17-solution-scoping-方案范围与架构设计
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址