salespc-desktop-ehf2mjt 上。闽D想家
AI 报了 1581,销售撤回改成 1817.6
9 月 21 日下午,一位厦门客户加上好友后问"我就做一个窗台柜 3.2/0.87/0.5,需要多少钱"。AI 在客户消息落库 24 秒后给出完整算式(客户视角约 2 分钟,微信显示 16:10):1581 元。销售看到后撤回它,改口报 1817.6 元,客户第一句话是"怎么涨价了"。
这一页把整条对话按"谁说的"标出来,把撤回的 AI 原文和它当时命中的知识、规则一并还原——结论和第一版不一样:那条算错的规则,其实就写在被检索命中的那篇知识里(但它有没有真进提示词,还差一步没验)。
完整聊天记录与逐句积木标注
AI 的两条是数据库原文(一字不差),下面的"真实调用"是 llm_call_provenance 里当时那一次的记录。销售手打的消息不经过系统,标为人工。图片和门店位置卡片都放回了原位,点击放大。
0.5×1.5=0.75 ×568=426 元
3.2×568=1817.6 元
553.8+426=979.8;979.8+1817.6 ≈ 2797.4 元
图片来源:AI 那张风格效果图取自图库原图(xgt:style-12:0496,点开是全尺寸);其余每一张——客户的现场照、销售的品牌表与门板照、两张门店位置卡片——都是从微信长截图按原位裁出再放大的,偏糊,能看清是什么、看不清细节。位置卡片的详细地址在这个分辨率下认不出来,只能确认标题是"有大有小·全屋定制供应链中心"、在福建省厦门市、地图落点挨着"海西金谷";补一张原图即可替换。
用户背景与核心需求
这位客户不是来"了解一下"的——他一上来就给三个尺寸、直接问价,是典型的已经量好、准备比价的阶段。整场对话的所有摩擦都发生在"报价准不准"这一件事上。
需求极其具体
开口就是"我就做一个窗台柜 3.2/0.87/0.5"——长宽高齐全,后面又追加两个立柜和前柜的尺寸。
核心诉求是价格
第二句就是"需要多少钱"。全程 20 多轮里,价格相关占了一半以上。
旧房局部改造
从他发的照片看是已入住的房子:现有白色门板、窗帘、堆放的杂物;不是毛坯全屋定制。
关心材料与工艺
问了防水柜门、"这种是木头做漆的吗"、抽屉种类——属于会自己做功课的客户。
到店意向出现两次
15:06"在哪里看样板"、18:41"那天有时间我去看一下样品"。两次都没落到具体时段。
决策阶段
报价核对 → 看样品前。本页截稿时仍无到店记录、无定金、无成交。
完整转化时间线
从加好友(14:51)到客户说要看样品(18:41)3 小时 50 分,到销售最后一条(21:16)共 6 小时 25 分。真正的转折发生在 16:12–16:19 这七分钟里:AI 报了一个数,销售撤回它,客户问"怎么涨价了"。
人工加好友,客户通过后直接问看样板
微信截图招呼语是销售手打的模板——"原价868…补贴300只要568,加微申领补贴"。客户通过验证后第一句就是"在哪里看样板",这是第一个到店信号。销售手发了门店位置卡片。
客户给出三个尺寸并直接问价
数据库原文"我就做一个窗台柜3.2/0.87/0.5" + "需要多少钱"。这是整条对话里唯一一次 AI 拿到了完整、明确、可计算的输入。
AI 在落库 24 秒后给出完整算式:1581 元
provenance 实录算式完整、口径清楚("材料人工全包")、还附了素材。形式上这是一条好回复——比"大概一千多"强得多。问题只出在一步:3.2 × 0.87。
客户补发现场照片,AI 没有任何反应
截图·未入库客户拍了要做柜子的那扇窗发过来。这张照片没有进数据库,AI 的下一条(16:14:58)跳到了风格效果图,对照片只字未提。
销售撤回三条,接管对话
截图撤回后改口:"这个地方是按 1 米算,3.2 米就是 568×3.2 = 1817.6 元"。客户立刻回:"怎么涨价了"。销售解释:"之前没看到高度不足一米"——他是看了客户那张照片才发现的。
人工逐项核对,报到 2797.4 元
截图客户追加两个立柜。销售把每个数字念回去确认("3.2 米长、0.87 米高、0.4 米深,对吗"),然后三个柜体分别按各自高度判口径算——1.5 米的按平方,不足 1 米的按延米。这一段是人做对的示范。
产品细节连问,全靠人工手打
截图防水柜门、SPC 木芯板、"这种是木头做漆的吗"、抽屉种类——这些知识库里都有,但 AI 被撤回一次后就退出了整场对话(机制见 04)。其中"木头做漆"那条还得看图才能答。
客户说"那天有时间我去看一下样品"
截图 · 未闭环第二次到店意向。销售回"好的"并再发一次位置卡片。对话停在这里——没有落具体日期、没有约设计师、没有后续提醒。对照汤圆那条:客户给出"两点半到三点"才是可执行的到店承诺,"那天有时间"不是。
每个阶段是怎么推进的
| 阶段 | 销售 / 自动化动作 | 解决的顾虑 | 结果信号 | 积木归类 |
|---|---|---|---|---|
| 首触加微 | 人工手打补贴话术(868→568) | 凭什么加你 | 客户通过并主动问看样板 | 非积木 · 个微首触仍在干跑 |
| 问价应答 | AI 给完整算式 + 单价 + 口径 | 到底多少钱 | 客户继续补需求(高意向) | 真实命中《预报价算例》知识 1 篇 |
| 素材投放 | 话术承诺"配置清单",实发环保海报 | (未解决) | 客户未回应素材 | 货不对板 · 文案与素材两套逻辑 |
| 培育推进 | AI 抛"三种风格你喜欢哪个" | (制造了新负担) | 被销售撤回 | 违反命中规则 conf=10「答完就停」 |
| 纠错接管 | 人工撤回、改口、解释原因 | 价格到底算不算得准 | 客户"怎么涨价了" → 接受解释 | 人工 · 非积木 |
| 逐项核价 | 人工把每个尺寸念回去确认再算 | 会不会又算错 | 客户继续追问抽屉、门板 | 人工 · 本案最该被复用的动作 |
| 到店邀约 | 人工发位置卡片 ×2 | 去哪看 | "那天有时间我去看一下样品" | 人工 · 未落时段,未闭环 |
那条 1581 是怎么生出来的
下面这条链路是每一条 AI 回复都会走一遍的。格子里的数字全部取自 16:12:23 那条报价回复的真实调用记录。
16:11:59 落库
尺寸 + 问价
示例 3 条 规则 11 条
19,825 token
6.97s → 44 token
3.2×0.87 算错
priceOutOfRange=false
放行
16:12:23 发出(24s)
第 03 格捞对了东西(相关度 0.55,是这一篇里唯一命中的知识)。第 04 格读进去 19,825 token——但那半句计价规则有没有真的在里面,我们没取到 assembled prompt,没法确认(见 04)。确定出问题的是第 06 格和第 07 格:闸只看单价不看算式、素材配错。第 05 格的输出确实漏了那半句,至于是"没看见"还是"没拿到",待验。
这两条回复引用了什么
模型每轮拿到三类东西:知识文档(事实口径)、对话示例(怎么说话)、决策规则(该做什么别做什么)。把实际引用到的原文摊开,问题出在哪一类上就很清楚了。
引用一 · 知识 —— 捞对了,漏读了
文档末尾原文:面积口径:投影面积 = 宽 × 高;见光面不计入柜体面积、见光板单独算;柜体高度不足 1m 的按延米算(1m 单价 = 1 平方单价);榻榻米按长×宽,背板必须升 18mm。
AI 用了:投影面积 = 宽 × 高 → 3.2 × 0.87 = 2.784㎡
AI 漏了:柜体高度不足 1m 的按延米算 → 0.87 米不足 1 米,应当 3.2 × 568 = 1817.6 元
同一句话的前半句用了,后半句没用。这不是知识缺失,是长上下文漏读。
引用二 · 示例 —— 第二条回复的句式可能来自这里
示例客户:主要想做衣柜和橱柜
示例回复:行,这俩是重头。您现在最头疼的是收纳不够用,还是想要好打理不落灰呀
AI 第二条实发:不着急定哈,我发几张不同风格的效果图您先看看——现代极简、原木侘寂、轻奢,哪种更对您胃口呀?
同样是"二选一反问"的收尾句式。示例的前半句"行,这俩是重头"是先给一个认可,AI 那条前半句给的却是"不着急定哈"——把"接住"换成了"踩刹车"。句式学到了,用在了错的时点。(句式同源是推断,不是调用日志能证明的事。)
5de32005(q10)"你这价太高了" → "这568真到地板价了…换498一平…不封边能再省";315d7bb0(q9)"想用生态板做柜门便宜点" → "生态板做门需要覆SPC,容易开裂"。
两条都是"客户嫌贵时怎么答",而这位客户根本还没嫌贵——他只是问多少钱。
引用三 · 决策规则 —— 不是"命中",是每轮全量注入
查 src/lib/org-context.ts:decision_rules 是按 confidence DESC 取前 40 条全量注入(门店安全规则另走一条独立查询),不是按客户当下这句话检索的。所以下面说"命中"只是 provenance 记了这一轮注入了哪些,不代表系统判断它们跟这句话相关;"照做/违反"是把输出和条文对照出来的,不是系统的判定。
规则原文:客户问的那句已经答完、又还没到必须转真人的时候——这一轮的目的只有一个:邀约客户到店看样、看方案。客户问的那句答完就停,别顺带介绍别的产品,也别主动铺开讲优惠活动。
→ 客户在说"做到窗台一样高收纳柜"(继续给尺寸),AI 既没答尺寸、也没往到店带,而是铺开讲了三种风格。
规则原文:客户明确拒绝、说别再联系、或情绪明显不好 → 立刻交给真人销售。
客户说"怎么涨价了"时是情绪信号,不过当时销售已经手动接管,规则没有机会触发。
11 条规则里没有任何一条管"算出来的数对不对"。计价规则写在知识文档里(会被漏读),没有写成规则,更没有写成代码。
核心卡点与突破过程
那条算错的规则,就写在被检索命中的那篇知识里
第一版这页写的是"AI 不知道这条行业规则"。查了 llm_call_provenance 之后要更正:这一轮检索命中了《预报价算例:45.78㎡ 怎么算出 2.47 万》(相关度 0.55,是唯一命中的知识文档),而那篇文档在 knowledge_documents 里的结尾一段白纸黑字写着:
面积口径:投影面积 = 宽 × 高;见光面不计入柜体面积、见光板单独算;柜体高度不足 1m 的按延米算(1m 单价 = 1 平方单价);榻榻米按长×宽,背板必须升 18mm。
确定的是:规则在库里、这篇文档被这一轮检索命中、AI 用了同一段口径的前半句(宽 × 高)、漏掉了紧跟其后的那半句。
一条命令就能分开:打出那一轮的 assembled prompt(或检索回的 chunk 原文),grep「不足 1m」。
这一步为什么值钱:如果其实没进,那么只做"报价走代码"只盖得住 568×面积 这一条,文档里其它口径(转角 ×1.5、护墙板 180、见光板另算、榻榻米背板升 18mm)还会继续错;而更便宜的修法——把口径表整段常驻注入、或搬进
decision_rules——会被"补知识没用"这句话劝退。报低了再改口,比一开始报高更伤
客户收到 1581,七分钟后被告知 1817.6,第一反应是"怎么涨价了"。报价这件事是不对称的:报低了签约要加钱、客户会投诉;报高了直接劝退。所以它必须由确定性的计价逻辑保证,不能落在模型的记忆力上。
销售发现了,但"因为看了照片"是我们加的
销售改口的原话只有一句"之前没看到高度不足一米"。他没说是照片让他发现的——而 0.87 这个高度本来就在客户的文字消息里、也已经入库,不看照片同样能发现。第一版把"因为那张照片"写成了枢纽,撤回:他是看了照片还是重读了尺寸,没有人问过他。
图片不入库仍然要修,但理由换成有据可查的那个:客户主动给的信息有一整类(5 张现场照)根本没进 messages——这条有全表 4 行文字的记录支撑。
客户在谈尺寸,AI 递上一道风格选择题
"做到窗台一样高收纳柜"等的是"那这样多少钱"。AI 回"不着急定哈,我发几张风格图,哪种更对您胃口"——在客户踩油门的时候踩了刹车,还额外抛了个三选一。这一轮命中的规则里明写着"客户问的那句答完就停,别顺带介绍别的产品"。
16:14 之后 AI 一条没再回,原因还没查出来
第一版这里写的是"这是设计如此,不是故障——销售接管后系统看到'最后一条是我方发的'就不插队"。这个说法没有任何日志或代码支撑,撤回。
同样成立、而且代价大一个量级的另一种解释是:这条会话的消息捕获在 16:14 之后停了。本页自己的数据偏向后者——16:14 之后 5 小时里客户发的 6 段文字和 5 张照片,messages 表里一行都没有(全表只有 4 行)。"看到最后一条是我方发的"这个判断的输入从哪来,页面答不上来。
role=customer 落库。有 = 单会话跳过;没有 = 捕获整体停了,影响面是这台机器上所有会话。不管是哪一种,代价都已经发生:后面 5 小时里客户问的防水、木纹、抽屉——知识库里全有答案——都靠销售手打。
两次到店意向都没落成时段
"在哪里看样板"和"那天有时间我去看一下样品"都是强意向,但都没转成具体日期。对话停在销售发完位置卡片。没有提醒、没有待办、没有到店记录。
技术卡点:三道闸都没拦住这个数
1581 这个数字从生成到发出,经过了三个本该拦住它的地方,一个都没拦住。它们各自漏在不同的层。
价格闸看过这条回复,判它"没问题"
这一轮的 output_signals 抓到了两个价格 568元/㎡ 和 1581元,结论是 priceOutOfRange = false、priceUnauthorized = false。闸没坏,它只管一件事:单价 568 在授权区间内 → 放行。它不验面积是怎么算出来的,所以 3.2 × 0.87 这一步错了它看不见。
客户发的图片不进数据库
这条对话客户至少发了 5 张现场照片(窗台、两处立柜位、两张现有门板柜体),messages 表里一张都没有,全表只有 4 行纯文字。销售靠这些照片发现了报价错误,系统这边连存都没存。
messages,保存原始附件与消息 ID。话里说的资料,和实际发出的素材不是同一份
文案承诺"这份配置清单,逐空间列了做什么柜、价格怎么算",实发是一张"环保检测·不合格全额赔付"海报。话术按"该给资料了"生成,素材按关键词命中挑选,中间没有任何一步核对这两者是不是同一份东西。
自动化发不出微信原生位置卡片
本案两次门店位置都是销售手动发的。现有 GUI 通道能发文字和部分图片,但生成不了原生位置卡片。把它标成"地址导航积木"会误导复盘,所以页面里标的是人工动作。
这条为什么没走到到店
已经具备的条件
- 需求极其明确:尺寸齐全、改造目标清楚,不需要再做需求挖掘。
- 价格已经谈透:三个柜体逐项核到 2797.4 元,客户接受了解释。
- 异议被消解:防水、门板工艺问完后客户自己说"防水好擦洗也可以"。
- 客户主动提到店:两次——"在哪里看样板"、"那天有时间我去看一下样品"。
缺的那一步
- 没有把"那天"变成具体日期——对照汤圆那条,客户说出"两点半到三点"才是可执行承诺
- 没有给到店绑定价值("来了能当面确认什么"),只回了"好的"
- 没有约设计师、没有说到店后会发生什么
- 没有建立任何后续提醒,对话自然停止
本案暴露的问题,现在修到哪了
以下为 wecom-chat 仓已合并并部署上线的修复(截至 09-23 22:11,线上版本 158f185)。“已上线”指服务端代码在线上生效;本案对话发生在修复之前,页面上的原话不会因此改变。
| 问题 | 怎么修的 | PR | 状态 |
|---|---|---|---|
| 说“配置清单”、实发环保海报(货不对板) | 执行端一轮只能发 1 张图时,被裁掉的图对应的引导语一并删除;按端上能发几张来配图 | #1476 / #1497 | ✓ 已上线 |
| 二选一问句被出门闸切成半截 | 「A,还是B?」整句过闸:要么整句留、要么整句删 | #1554 | ✓ 已上线 |
| 零尺寸线索时编面积 / 编总价 | 示范话术数字改占位 + 编面积/总价强制重写。但本案 1581 的尺寸是客户给的(3.2/0.87/0.5),错在算式,这道闸不管 | #1554 | ✓ 已上线 |
| 价格闸不校验“面积 × 单价 = 总价”(04.1 卡点 01) | 尚未修:报价类回复改为代码确定性计算 | — | 未覆盖 · 待定 |
| 客户发的图片不进数据库(04.1 卡点 02) | 尚未修 | — | 未覆盖 · 待定 |
| 自动化发不出原生位置卡片(04.1 卡点 04) | 尚未修;替代方案(高德导航链接 + 到店卡)待定 | — | 未覆盖 · 待定 |
案例复盘:做对什么,还能改什么
做得好的地方
AI 给的是完整算式而不是"大概一千多",口径和单价都写清楚了,这个形式值得保留;销售发现错误后立刻撤回、主动说明原因而不是含糊过去;逐项核价时把每个数字念回去让客户确认,没有一处靠猜;客户问工艺时给的是"看起来是烤漆但不一定是原木烤漆"这种有分寸的判断。
这条链路上的硬伤
规则在知识库里、文档也被检索命中,模型仍然漏用——报价这类不允许出错的计算不能交给模型;客户发的 5 张照片一张都没进库;话术承诺的资料和实发素材不是同一份;价格闸只校验单价、不校验算式;两次到店意向都没落成时段。
更合理的推进方式
客户报出尺寸时,金额由代码算、模型只负责把尺寸读出来,并在回复里把口径判定写明("0.87 米不足 1 米,按延米算")——这样即使客户觉得贵,也不会觉得被改过口。客户补发现场照片时应入库并触发一次尺寸复核。客户第一次说"在哪里看样板"就该把到店价值说清楚("来了能当面量、当面出布局"),并把"那天"追成具体日期。客户给出日期后立刻转人工接待,自动化停止生成业务话术。
后续优化建议
金额不由模型算
模型只提取尺寸与柜体类型,金额走确定性计价函数:不足 1m 按延米、转角 ×1.5、护墙板按 180、见光板按平——这些口径知识库里都有现成条文。
回复里写出口径判定
不只给数字,给出"为什么是这个数":哪个柜体按平方、哪个按延米。客户能自己核,就不会有"怎么涨价了"。
客户图片必须入库
至少先落消息记录与附件 ID。客户在报尺寸时发图是高价值信号,现在整类丢失。
先选素材再写引入语
杜绝"文字说清单、实发海报"。不匹配时宁可不写引入语。
答完就停,别抛选择题
规则已经在库里(conf=10),这轮没照做。客户在给尺寸时抛三选一风格题,是把节奏往回拉。
意向要追成日期
"在哪里看样板""那天有时间"都要追一句具体时间,并绑定到店能完成的事;给出日期即转人工。
报价型客户处理 SOP
适用于"尺寸明确、开口问价"的个微客户。这类客户转化最快,但报价错一次就前功尽弃。
尺寸复述
把客户给的每个数字念回去确认("3.2 米长、0.87 米高、0.4 米深,对吗")再算,不猜、不补全。
口径先判定
逐个柜体判:高度 ≥1m 按平方(宽×高),<1m 按延米;转角 ×1.5;护墙板、见光板单独口径。
金额走代码
模型不做乘法。金额由计价函数算出后再交给话术,模型只负责说人话。
写明为什么
回复里带上口径判定与算式,让客户能自己核对,避免后续改口。
图片入库并复核
客户在报尺寸阶段发图,落库并触发一次"现场与尺寸是否吻合"的复核。
素材与话术对齐
先定发哪份资料,再写引入语;不匹配就不写。
答完就停
客户问的那句答完即止,不顺带推风格、活动或其他产品。
到店意向追时段
出现"在哪看样板 / 去看一下样品"时,追一句具体日期并说明到店能完成什么。
给出日期即转人工
客户说出可执行时段后停止自动业务回复,人工发位置、指引并负责接待。
到店后回填
记录实际到店时间、方案倾向、预算、异议与下一步负责人。
客户说的是"那天有时间我去看一下样品"——有意向、没落时段,按 SOP 属于"应追一句"而不是"已可转人工"。对照汤圆那条,"两点半到三点吧"才是转人工的那一刻。本案停在了追问之前。
证据边界与待补充信息
数据库可核验的部分
会话 adae1b28… 的 4 条 messages(2 客户 / 2 AI)原文与毫秒级时间;两次 chatReply 的模型、提示词版本(wecom.nurture.rules v27)、token、耗时、成本、价格信号;命中的知识文档 ID 与相关度;命中的 11 条 decision_rules 的场景与建议动作。这些都是当时的真实调用记录,不是事后归类。
只有截图、没有库记录的部分
销售全部手打消息(不经过系统);客户的 5 张现场照片;三条撤回提示中的第三条对应什么;各条消息的微信端精确秒级时间(页面用的是数据库落库时间,与微信显示可差 1–2 分钟)。
仍需补充
门店位置卡片的详细地址全文(当前截图分辨率认不出);客户是否最终到店、有无成交;三条撤回里第三条的原文;这位客户的历史来源(抖音评论 / 其他渠道);env-test-price 海报的素材原图。
本页三条最重的结论,各自的证据强度
① "算错的规则就在被检索命中的那篇知识里" — 半验。文档命中(0.55)和文档含那半句都有记录;那半句有没有进最终 prompt 没验(只有 token 总数,没取 assembled prompt)。所以不能说"补知识治不了"。
② "16:14 之后 AI 退出是设计如此" — 未验,已从本页撤回。没有日志也没有代码支撑;"捕获停了"是同等可能且代价更大的解释。排除动作见 04。
③ "文案说清单、实发环保海报" — 已坐实。message content 里的素材 id 是 env-test-price,文字写的是配置清单,两者直接可比。
另外不断言:不断言"照片入库 AI 就能算对"(多模态是否参与这条链路未验);不断言三条撤回分别对应哪个气泡;不断言销售是看了照片才发现高度问题(他没说);不把销售手打的内容归为任何积木。