工业/工贸CRM的AI实践:一套「先修跑道、再跑车」的确定性工程——从实施顾问调研到客户贴表即走

(平台提示:本文可能是商业推广软文)

背景说明:本文以超兔CRM的一次系统性 AI 落地为蓝本。超兔CRM做 CRM 22 年,系统里有 15 个业务域、74 个模块、480 个能力点。这次改造的对象不是单个功能,而是 SaaS 交付里最重的一段链路——新客上线:42 天、120 次提交,从能力知识图谱、业务模式设计器,到智能客户导入与历史订单导入。文中表名、字段名、接口名、环境标识均已脱敏改写,技术脉络保持原样。

先说结论

演示环境里贴一张表格,模型通常能正确识别字段;接上真实客户数据之后,多数项目会停在落地环节。整理完 42 天的开发记录,我们的判断是:同一套模型接在不同的工程结构上,效果差距很大,决定上限的是跑道,不是模型档位。

跑道由三块确定性资产组成:

  1. 知识跑道:把系统能力结构化成图谱,让 AI 知道系统有什么、功能之间是什么关系;
  2. 业务跑道:把客户的业务语义显式化成可推导的模型,让 AI 知道这家客户怎么做生意;
  3. 执行跑道:一条 run + gate + ledger 的门禁流水线,让 AI 的判决落在确定的执行、对账和回滚上。

投入分布也能说明问题。120 次提交里,直接改提示词、调模型参数的不到十分之一,其余都在修跑道:元数据治理、流水线门禁、幂等账本、读回对账。

graph LR ROOT["新客上线:<br/>SaaS 最重的一公里"] --> P1["不懂系统<br/>480 个功能学不动"] ROOT --> P2["不会配置<br/>业务模式选不出来"] ROOT --> P3["搬不进数据<br/>历史台账进不来"] P1 --> R1["知识跑道<br/>能力知识图谱"] P2 --> R2["业务跑道<br/>业务模式设计器"] P3 --> R3["执行跑道<br/>智能导入流水线"] R1 --> G["客户自助启用<br/>顾问经验产品化"] R2 --> G R3 --> G style ROOT fill:#0e2a4d,stroke:#0e2a4d,color:#ffffff style P1 fill:#e0701a,stroke:#e0701a,color:#ffffff style P2 fill:#e0701a,stroke:#e0701a,color:#ffffff style P3 fill:#e0701a,stroke:#e0701a,color:#ffffff style R1 fill:#1a73e8,stroke:#1a73e8,color:#ffffff style R2 fill:#1a73e8,stroke:#1a73e8,color:#ffffff style R3 fill:#1a73e8,stroke:#1a73e8,color:#ffffff style G fill:#e8f0fe,stroke:#1a73e8

下面按开发顺序写:先写失败的开局,再写三块跑道怎么修,最后是一张教训清单和一个可复用的判断框架。


一、战场:为什么是新客上线

对超兔CRM这样的 CRM 厂商来说,客户签单只是开始。把组织架起来、流程配起来、历史客户和订单数据搬进来,客户才算上线。这一段过去靠实施顾问上门培训、代配置、代录数据:成本高、周期长,而且不可复制——一个顾问的经验带不走,一个客户的方法论也给不了下一个客户。

数据现场比演示环境复杂得多:

现场特征 真实还原 传统工具的下场
一客多名 营业执照全称、门头简称、销售嘴里的叫法、旧系统代号 字面匹配认不出同一家,重复建档
多人一厂 采购、技术、财务、老板娘散落在不同工作表 行结构约定一忘就错挂
字典自造 行业写「注塑/冲压/压铸」,等级写「重点保护」 系统预置字典接不住,校验直接拒
格式自由 日期七种写法,金额带单位,电话带分机 逐行标红,用户回 Excel 改
台账结构野 合并单元格、双行表头、一个文件七八个工作表 解析乱,后面全乱

查重是生死线:一旦「一客多名」裂成多条记录,报价历史断成几瓣,两个销售各跟各的。这类数据写错,污染的是客户最值钱的资产。

不过导入只是三大堵点之一。项目开局甚至不是从导入开始的,而是从一个被推翻的方案开始。


二、总路线:失败的开局与三阶段演进

2.1 开局教训:全自动生成不被信任

项目最初的做法是:客户接入时,系统自动生成全部初始化方案——行业画像、模块配置、菜单、权限。原型做完,内测就推翻了,原因是用户不认。

复盘时我们确认了一点:用户的认知顺序是先业务后系统。老板先想的是「我先报价还是先签合同」「采购归谁管」,不会从「我要启用哪 14 个模块」开始。跳过业务直接生成系统配置,用户无法判断对错,也就不会点「确定」。

总路线因此定为:先业务后系统,先修路再跑车。120 次提交分三个阶段:

graph LR T0["阶段零:全自动生成<br/>原型被推翻"] -->|"教训:先业务后系统"| T1["阶段一:修地基<br/>能力图谱 + 业务模式设计器"] T1 -->|"家底摸清,语义显式化"| T2["阶段二:智能导入<br/>客户导入三代演进"] T2 -->|"方法论复制到单据"| T3["阶段三:订单导入<br/>八道门禁流水线"] style T0 fill:#0e2a4d,stroke:#0e2a4d,color:#ffffff style T1 fill:#e0701a,stroke:#e0701a,color:#ffffff style T2 fill:#1a73e8,stroke:#1a73e8,color:#ffffff style T3 fill:#1a73e8,stroke:#1a73e8,color:#ffffff

2.2 什么叫「跑道工程」

把这条路线抽象一下:

跑道工程(Runway Engineering):把 AI 接进业务之前,先把三件事做成确定性资产——系统知识结构化、业务语义显式化、执行链路护栏化。模型能力是常量,跑道质量是变量。

这个说法容易被读成「先做数据治理」。为了让它可检验,我们定了两个标准:判决可追溯(预判与改判轨迹留痕)、输出可对账(写入后读回核对,任何值不允许无终态消失)。下面三节分别展开。


三、知识跑道:把家底拆给 AI 看

AI 要替客户推荐功能、配置流程,前提是知道系统有什么。超兔CRM 22 年积累了 480 个能力点、103 个前置开关、74 个模块,这些知识原本在顾问脑子里和帮助文档里,对 AI 来说并不存在。

3.1 做法与取舍

我们做了三件事:

  • 能力锚点全量结构化:从系统全菜单快照导入 480 个能力锚点,每个挂上所属模块、前置开关、菜单路径;
  • 手册全文入库:对 20 个来源的官方手册做页内下探,838 篇正文进知识库,图谱的内容边可以从原文溯源;
  • 关系显式化:定义 comprises(组成)、derives(衍生)、requires(前置开关)三类边,每条边必须带来源标记。

这三个决策都改过不止一次:

第一,图谱是独立资产,不是功能的附属品。 图谱单向消费系统快照与业务设计器,不反向写入,因此可以独立演进、独立校验,不会被某个功能迭代拖垮。

第二,LLM 抽取的候选边必须人工确认后才入库。 我们用模型从手册里抽了几百条「衍生」「前置」关系,抽取质量看起来不差,但图谱要给下游 AI 消费,一条幻觉边就是一次错误推荐。最终 353 条 LLM 候选边整体暂离主干,主图只保留可溯源的组成与替代关系;审阅清单保留全部条目,确认一条,恢复一条。

graph TD A["系统全菜单快照<br/>480 能力锚点"] --> C["能力知识图谱"] B["官方手册 838 篇<br/>页内下探"] --> C D["业务模式设计器<br/>结构化导出"] -->|"单向消费"| C C --> E["核心主干<br/>只留可溯源边"] F["LLM 候选边<br/>353 条"] --> G["人工审阅清单"] G -->|"逐条确认"| E G -.->|"未确认:暂离主干"| F C --> H["消费端:AI 推荐 /<br/>岗位菜单推导 / 功能导览"] style C fill:#1a73e8,stroke:#1a73e8,color:#ffffff style F fill:#e0701a,stroke:#e0701a,color:#ffffff style G fill:#e0701a,stroke:#e0701a,color:#ffffff style E fill:#e8f0fe,stroke:#1a73e8

第三,宁可图谱小而可信。 主图从五百多个节点收敛到两百多条边,这是阶段一唯一一次主动缩减规模,换来一条规则:图谱里每条边都要能回答「你从哪来」,没有来源的边不进主干。

这条规则后来用在了所有 AI 输出上:判决带置信度、归并带理由、改判留轨迹。没有来源的输出不进下游。


四、业务跑道:让系统先懂业务

第二块跑道解决「不会配置」。业务模式设计器的做法是:用户用业务语言回答四个维度的问题——卖什么、怎么交付、要不要采购、收付款怎么走——系统推导出流程主干、岗位矩阵和最小功能集。

4.1 核心设计:图描述抽象层

我们没有为每种业务组合硬编码一套流程图,而是定义了一层中间描述:业务流程拆成泳道、节点、边三种对象,边分四类关系:

关系类型 业务语义 例子
series(串联) 顺序必经 签约 → 交付
parallel(并联) 并行支线 项目 ∥ 商机双通道
optional(可选捷径) 可跳过 项目直报价,商机的可选项
bridge(跨线衔接) 跨泳道汇合 采购入库衔接订单出库

每个维度选项只声明自己贡献的图片段,组装器负责合并、去重、按关系类型渲染。四维度组合出近百种业务模式,代码里只有一套组装逻辑。业务配置因此从「选功能」变成「选维度」:用户的每个选择都对应业务含义,而不是系统含义。

这块跑道与知识跑道咬合:设计器推导出的每个流程节点都要在知识图谱里命中锚点,推导不出锚点的节点按描述漂移处理。两块跑道互相校验,AI 拿到的才是「系统有什么」和「客户要什么」的交集。


五、执行跑道:模型只做判决,代码负责一切

第三块跑道是提交量最密集的部分:智能导入。它要接住第一节那张表里的全部情况,而且一次写错就是污染客户资产。

5.1 第一次架构收敛:去掉 Agent

最初方案是 Agent 挂四条工作流,自主规划导入步骤。实测有三个问题:识别慢、步骤序列不可复现、日志无法结构化排查。

导入的核心任务是列对齐、值归并、未识别列判决,属于有限轮次的结构化判决,不需要自主规划。因此我们砍掉 Agent,改成纯工作流直调:每次调用的输入、输出、失败处置全部显式定义。

教训 1:判决、归并、摘要这类任务,自由度越少越稳;开放对话才需要 Agent。 选型的第一问是这个任务需要多少自由度。

5.2 裁决反转:AI 判决优先,代码预判兜底

第二版按直觉设计:代码层做精确匹配和别名库,匹配不上才交给模型。一条反例推翻了它——「负责销售」这一列被别名库硬编码命中到客户电话字段,代码层给出的是高置信的错误,模型没有复核机会。

解法是裁决反转:代码层的所有命中(逐字、别名、模式归一)一律降级为预判,随要素包送模型全场复核;裁决顺序改为模型判决优先,模型漏答或调用失败时回落预判。

反转之后补了三个约束:

  • 硬锁:客户全称这类主键字段拒绝模型改判。允许错一列,不允许错主键;
  • 零调用快路径:全部列逐字命中主表且无子表字段时,不调用模型;
  • 调用预算制:配合「准备后重解析沿用首判」「补字典后本地重算」,常规导入全程 LLM 调用一次封顶。重复调用不仅费钱,同一归并判决两次结果不同还会成为扰动源。

5.3 门禁流水线:run + gate + ledger

订单导入把上述做法固定成注册式流水线,每步由 run(执行)、gate(门禁)、ledger(落账)三个函数组成。八道门禁只放在必须由人决策的位置,其余全自动。

graph TD IN["粘贴销售台账"] --> P1["解析归一<br/>日期 / 金额 / 单位后缀"] P1 --> P2["粒度判定<br/>一单一行 / 一单多行"] P2 --> G1{"G1 数据形态门禁"} G1 -->|"人确认"| P4["列映射<br/>词表 + AI 判决"] P4 --> P5["客户匹配<br/>全称 / 简称 / 编号三路径"] P5 --> G3{"G3 客户门禁"} G3 -->|"逐行处置:挂档案 /<br/>就地新建 / 不导入"| P6["产品分支<br/>建档 / 复用 / 错位交换"] P6 --> G7{"G7 单据门禁<br/>样例核对 + 未导入行"} G7 -->|"放行"| WR["幂等写入<br/>账本逐位记账"] WR --> RB["读回核对"] RB --> G8["G8 收尾:对账报告<br/>+ 客户价值模型即时刷新"] G8 --> DONE["完成"] G1 -.->|"显式停点<br/>禁止带病下传"| H["人"] G3 -.-> H G7 -.-> H style IN fill:#0e2a4d,stroke:#0e2a4d,color:#ffffff style G1 fill:#e0701a,stroke:#e0701a,color:#ffffff style G3 fill:#e0701a,stroke:#e0701a,color:#ffffff style G7 fill:#e0701a,stroke:#e0701a,color:#ffffff style DONE fill:#1a73e8,stroke:#1a73e8,color:#ffffff

三个设计点:

门禁暂停语义。 引擎遇到门禁返回暂停态,用户处置后从断点续跑,不做弹窗打断。步骤条上因此不是 14 个步骤,而是 8 个可理解的决策点。每道门禁只把一行主结论放在明面,过程信息收进折叠详情:用户卡住的原因多是信息太多,不是逻辑太难。

就地新建客户。 G3 遇到未命中档案的客户行,给出三个选项:挂到存量档案、就地新建、本行不导入。选新建时全称原值入库、简称自动生成、种类落默认值,下游复用既有归并逻辑,不为「新建」单独写分支。

账本逐位记账。 一行台账会展开成一个客户、N 个联系人、一张单、若干明细、一笔回款、一次归属转移;每个原子动作独立记账、独立重试、独立解锁。客户失败删整行,联系人失败沿用已建客户,转移失败不回滚建档。断点续传只补未处置位,重跑不重复建档。

sequenceDiagram autonumber participant U as 用户 participant FE as 前端流水线 participant W as 工作流编排平台 participant M as 判决模型 participant S as CRM 系统 U->>FE: 粘贴台账 FE->>FE: 解析 / 粒度 / 形态判定 FE-->>U: G1 暂停:确认导入形态 U-->>FE: 确认 FE->>S: 强刷租户元数据与档案索引 S-->>FE: 字段 / 字典 / 存量客户与产品 FE->>W: 要素包(列画像 + 代码预判 + 租户块) W->>M: 判决请求(温度 0,严格 JSON) M-->>W: 列映射 + 选项归并判决 W-->>FE: 判决结果 FE->>FE: 客户匹配 / 产品分支 FE-->>U: G3 暂停:未命中客户逐行处置 U-->>FE: 挂档案 / 就地新建 / 不导入 FE-->>U: G7 暂停:样例核对 + 未导入行 U-->>FE: 放行 FE->>S: 幂等写入(逐条容错 + 账本记账) FE->>S: 读回核对(按真实 id 批量) S-->>FE: 落库值 FE->>FE: 已知变换吸收 / 真差异如实呈现 FE->>S: 触发客户价值模型即时刷新 FE-->>U: 对账报告 + 资产清单

时序图里有三个位置需要盯住:强刷元数据排在判决之前(缓存陈旧是误判来源);三次暂停都是人的决策点(形态、客户、单据内容);读回核对在写入之后,写进去不算数,读回来才算数。

5.4 四道护栏

模型输出是概率的,执行链路是确定的,中间隔四道代码护栏:

  1. JSON 抢救:模型偶发在尾部多输出一个括号,整体解析失败会丢掉一份判决全对、只差一个字符的输出。标准解析失败后做字符串感知的括号配对扫描,截取第一个平衡的 JSON 对象;
  2. 漏答检测:判决要求逐列覆盖,模型偶尔漏答。拿到结果先校验覆盖完整性,缺列自动重试,上限 2 次;
  3. 回落预判:重试用尽才回落代码预判,降级后清单变长,流程不停;
  4. 错误分类:所有失败先分为可自动修复、需人决策、不可修复三类,第三类单独成清单、不阻断整体,任何错误不允许静默吞掉。

四道护栏的共同点是:每条退路都终止在一个确定状态,不停在「不知道」。


六、教训清单

十条,按遇到的顺序:

# 教训 解法
1 Agent 循环不是万能解 结构化判决用纯工作流,自由度越少越稳
2 模型档位影响判决稳定性 降档省下的调用费,会在判决波动上加倍还回来
3 记忆是资产也是负债 字面精确命中优先,记忆项单独标注来源
4 缓存会造成误判 判决前强刷元数据;静态资源带版本号
5 服务端语义必须实测 每个写接口上线前跑一次最小实验
6 隐性约束要能自愈 写入失败后学习并固化,下次导入复用
7 回归缺陷先定位引入点 逐版本 diff 确认,再动手
8 理解负担来自信息密度 主结论留明面,过程收折叠
9 全自动不等于可控 决策权只留在需要人拍板的位置
10 自由度要与任务匹配 判决、归并、对话分别设计编排

七、一个可复用的判断框架

42 天里我们没有换过模型,也没有追新特性,120 次提交几乎都在做同一件事:给概率性的模型修一条确定性的跑道。

graph LR R["跑道工程<br/>Runway Engineering"] --> K["知识跑道"] R --> B["业务跑道"] R --> E["执行跑道"] K --> K1["能力结构化<br/>480 锚点全量入库"] K --> K2["每条边可溯源<br/>LLM 边人工确认"] B --> B1["先业务后系统"] B --> B2["维度组合 +<br/>图描述抽象层"] E --> E1["AI 只做判决<br/>代码负责一切"] E --> E2["run + gate + ledger<br/>八道门禁"] E --> E3["调用预算制<br/>每批 1 次封顶"] E --> E4["幂等账本 +<br/>读回核对"] style R fill:#0e2a4d,stroke:#0e2a4d,color:#ffffff style K fill:#1a73e8,stroke:#1a73e8,color:#ffffff style B fill:#1a73e8,stroke:#1a73e8,color:#ffffff style E fill:#1a73e8,stroke:#1a73e8,color:#ffffff

评估一个 AI 功能能不能落地,可以先不谈模型,问三个问题:

  1. AI 懂你的系统吗——能力有没有结构化,输出有没有来源;
  2. AI 懂这家客户的业务吗——业务语义是显式模型,还是埋在配置表里;
  3. AI 的输出落得进系统吗——有没有门禁、账本、对账,错了能不能退。

三个问题都有答案,剩下的才是模型调优;有答不上来的,先补跑道。

超兔CRM的下一站是把确认清单做得更短、让映射记忆跨租户复用、把「一客多名」剩下的语义归一做完。先修跑道再跑车的分工不会变:确定的执行交给代码,需要拍板的留给人,两者之间靠账本和对账衔接。

如果你们也在给老系统做 AI 改造,欢迎在评论区聊聊:卡住你们的是模型,还是跑道?

posted @ 2026-10-28 14:57  毛毛鱼的夏天  阅读(3)  评论(0)    收藏  举报