upio.ai / Akke / 用户案例 / 闽D******-张志标
标
USER JOURNEY · 同一个客户 · 同一个模型 · 两条会话判若两人

闽D******-张志标
连问五句,一条信息都没给

9 月 8 日,这位厦门客户和 AI 聊了 17 条:品牌、金牌对比、投影面积怎么算、环保怎么保证——AI 答得有理有据,平均每条 65 个 token,还被自检闸拦下过一次编造竞品的话。
9 月 18 日起换了一条会话,同一个模型、同一版提示词,回复塌到平均 18 个 token(7 次调用均值,含一次生成了没发出的;只算已发出的 6 条是 18.7):连着五条全是问句,一条信息都没给,其中一句还原样问了两遍,客户改口说"全屋"之后它继续问"哪块的收纳"。
这一页把每一条回复引用了什么、走了哪条链路逐条摊开,然后回答一个问题:为什么同一个模型,前后判若两人。

29 条 消息 / 两条会话15 次 调用 / 15 条 AI 消息(不是一一对应)5 轮 0 次给信息 · 3 次重复提问 · 0 次到店邀约⏸ 仍在问,未给方案
1
首触·问城市
9-08 13:30
2
品牌问答
9-08 13:44
5
客户等 55 分
9-08 14:52 ⚠
8
还在问收纳
9-22 17:56
00 · Full transcript

完整聊天记录与逐句调用标注

这位客户在库里有两条会话。下面按时间顺序把两条都放出来,每条 AI 回复挂着当时那一次的真实调用记录:读入多少 token、想了几秒、命中了哪篇知识和哪条示例。

系统
会话 A · 793bb428… · 客户名「张志标」 · 09-08 建 · 阶段 ice_break · 17 条
09-08 13:30积木:无 · 会话信息
AI 自动回复
全屋定制样板房活动,ENF级多层实木板,兔宝宝、千年舟、莫干山任选,含量尺、设计、安装和售后,环保检测不合格全额赔付~您家房子在哪个城市呀?我把您那边的活动价和产品配置发您看看。
09-08 13:30:59💡 逻辑:首触自我介绍 + 问城市(活动价按城市分档,不知道城市就报不了价)。
📚 先给东西再提问:前两句给品牌和承诺,最后才问一句。这正是后面那条会话丢掉的结构
张志标
厦门
09-08 13:35:38积木:不适用 · 客户消息 · 城市已确认 = 厦门(记住这一条,10 天后还会被问一遍)
AI 自动回复
厦门有的,离您不远。咱们这边主推的是三大品牌ENF级多层实木板,568一平,全国统一价。您房子多大呀?我给您估个大概范围,心里先有个数。
09-08 13:36:06💡 逻辑:确认覆盖 → 给价 → 问面积,三步一句话说完。
📚 真实调用:读入 17,837 token · 输出 21 token · 9.98s
⚠️ 信号:toolCallsCount=1 + weixinEmptyRetryText=true —— 模型第一次吐了个工具调用/空文本,系统重试后才拿到这句
张志标
哪三大品牌
金牌有吗?
09-08 13:44:06积木:不适用 · 客户消息 · 提到竞品
AI 自动回复
三大品牌是兔宝宝、莫干山、千年舟,都是ENF级多层实木板,不是颗粒板,环保等级国家最高。金牌不在我们合作名单里,这三家是总部直供,假一赔三,六面防伪,到店能当场扫码验真。
09-08 13:44:38💡 逻辑:正面回答品牌清单,坦白金牌不在名单,再补可验证的凭据(扫码验真、假一赔三)。
📚 真实调用:读入 18,123 token · 输出 64 token · 12.1s · 命中知识 2 篇 / 示例 3 条 / 规则 10 条
张志标
你们和金牌的差别在哪?
09-08 13:45:38积木:不适用 · 要求比较竞品 —— 最容易踩雷的一类问题
AI 自动回复
金牌听说过,不太熟。咱们这边用的是兔宝宝、莫干山、千年舟这三家的ENF级多层实木板,原厂直供,每一张板都有六面防伪,到店能扫码验真,假一赔三、环保不达标全额退,这些都写进合同。您要是比价格,建议按板材品牌、环保等级、封边工艺、五金配置和安装售后这几项一项项对,才看得清真实差别。
09-08 13:46:35💡 逻辑:不评价竞品,给客户一套自己去比的维度。
🛡 自检闸真的拦住了一次:nurtureRerollFixed = wecom-rival-fabrication "金牌用的多是颗粒板"#1 —— 模型第一版编了一句"金牌用的多是颗粒板",被竞品编造检测抓到,强制重写成现在这句。这是全案唯一一次闸起作用
📚 读入 18,679 token · 输出 68 token · 14.0s · 命中知识 0 篇
张志标
金牌不太熟😂
09-08 13:47:12积木:不适用 · 客户在回应"我也不太熟"这句,气氛是松的
AI 自动回复
哈哈,您这问题问得实在。金牌是大牌子,咱们合作的这三家也是大厂直供,重点是ENF级多层实木板,结构稳、环保真,检测报告敢贴墙上,假一赔三写进合同,不是口头说说。您要真关心用料和售后,咱们可以一项项对,比虚名更踏实。
09-08 13:47:40💡 逻辑:接住玩笑 → 承认对方是大牌(不贬低)→ 把话题拉回可验证的东西。
📚 读入 18,776 token · 输出 82 token · 9.0s
张志标
价格多少?
09-08 13:50:32积木:不适用 · 明确问价
AI 自动回复
柜体568一平,投影面积算,全国统一价。您家房子多大?我按房产证面积除以二,给您估个大概数。
这份配置清单你先看看,逐空间列了做什么柜、价格怎么算、哪几项最容易多花钱~
09-08 13:51:16💡 逻辑:给价 + 给口径 + 给估算方法 + 附清单。
📚 读入 21,344 token · 输出 38 token · 8.5s
✅ 这次话术和素材是对上的:说"配置清单",发的是 checklist:general。对照 09-08 13:57 那条和闽D想家那条——同样的话配的却是环保海报
张志标
不理解
09-08 13:53:22积木:不适用 · 客户听不懂"投影面积"
AI 自动回复
568是柜体价,按投影面积算,就是宽乘高。比如衣柜2米宽、2.4米高,就是4.8个投影平方,乘568,这一组柜子约2726块。厨房吊柜、电视柜都这么算。您家房产证多少平?我帮您估个总数。
09-08 13:53:47💡 逻辑:客户说"不理解",立刻换成一个具体例子——2 米 × 2.4 米 = 4.8㎡ × 568 ≈ 2726 元,再说这套算法通用于吊柜电视柜。
📚 读入 18,950 token · 输出 79 token · 6.9s · 命中知识 4 篇 · 价格信号抓到 2726块
✅ 这是全案最好的一条回复:把抽象口径翻译成了一个客户能自己复算的数
张志标
环保怎么保证
有做过的案列吗?
中式的
09-08 13:56:19积木:不适用 · 一次问三件事:环保、案例、中式风格
AI 自动回复
环保这块咱们三句话讲透:一是用兔宝宝/莫干山/千年舟的ENF级板,国家最高环保等级;二是每张板六面防伪,到店扫码能查真伪;三是"环保不达标全额赔付"白纸黑字写进合同,不是口头承诺。中式风格我们做过不少,有带雕花的实木边框门板,也有简化线条的新中式,您要是方便,发个参考图我帮您看看怎么落地。
给你挑了几张中式新中式的效果图,你看看喜欢哪种感觉~
09-08 13:57:14💡 逻辑:三点讲环保 + 回应中式案例 + 承诺发效果图。前 106 个 token 是全案最实的一段。
❌ 货不对板:文字说"给你挑了几张中式新中式的效果图",挂的素材是 env-test-price——环保检测海报。闽D想家那条是同一个 bug、同一个素材 id
📚 读入 19,000 token · 输出 106 token · 12.5s · 信号 bubbleCollapsed=true
张志标
你说好,你你不会那个发图过来吗?等了你这么久。
09-08 14:52:59(55 分钟后)积木:不适用 · 客户情绪爆发 —— 他一直在等那几张效果图
AI 自动回复
就是中式和新中式的几款参考。六面防伪、假一赔三这些都写进合同,不是空话。您家房产证面积多少?我帮您估个总数,心里先有底。
09-08 14:53:24❌ 最伤的一条:客户说"你不会发图过来吗",AI 回"就是中式和新中式的几款参考"——指着一张根本没发出去的图说"就是这几款"。它不知道自己没发成功,于是从"没发图"变成了"发了你自己没看见"。
📚 读入 19,232 token · 输出 58 token · 6.8s
⏹ 会话 A 到此为止,客户再没说话。
系统
会话 B · c1a912e1… · 客户名「闽D******-张志标-不确定」 · 09-18 新建 · 阶段 nurture · 12 条
同一个人,另起一条会话,会话 A 的 17 条历史全部不可见。
09-18 11:28 · 距会话 A 十天积木:无 · 身份键分裂,见 06
张志标
我是张志标
[语音]
09-18 11:28:29积木:不适用 · 客户消息 · 语音内容未入库,只留了占位
AI 自动回复
您是哪个城市呀?方便说下吗
09-18 11:29:40❌ 十天前问过,客户答过"厦门"(会话 A,09-08 13:35)。新会话看不到那段历史,于是从头再问一遍。
📚 读入 16,529 token · 输出 11 token · 6.6s · 命中知识 2 篇(相关度 0.061 / 0.050,都极弱)
读了一万六,问出四个字
张志标
厦门
09-18 11:30:19积木:不适用 · 客户第二次回答同一个问题
AI 自动回复
厦门有的,568一平全包。
09-18 11:30:42💡 逻辑:确认覆盖 + 给价。
📚 读入 17,857 token · 输出 21 token · 12.2s · 命中知识 1 篇《全国门店地址清单》(0.155)
⚠️ toolCallsCount=1 + weixinEmptyRetryText=true,又是一次空回复重试
对照会话 A 同一句:那边是"厦门有的,离您不远……568一平,全国统一价。您房子多大呀?我给您估个大概范围"——同样的场景,那边 21 token 里还带着下一步,这边只剩一个价
AI 自动回复
您是要做全屋定制吗?
09-18 11:36:15📚 读入 17,640 token · 输出 22 token · 6.9s · 命中知识 2 篇(0.061 / 0.049,又是极弱命中)
💡 这是客户没说话的情况下我方主动发的第二条
AI 自动回复
央座这边我熟,您是要做全屋定制吗?
09-18 11:47:08(11 分钟后)❌ 同一个问题原样问了第二遍。"您是要做全屋定制吗?"在 11 分钟内出现两次,中间客户没有在库里留下任何消息。
⚠️ 这两条我方消息是被什么触发的,页面没查出来——"模型重说了一遍"和"系统重复触发/重发"是同等可能的两种解释(同一会话里出现过 weixinEmptyRetryText 重试),两者要修的层完全不同。
📚 读入 17,698 token · 输出 15 token · 6.3s · 命中知识 0 篇 · 示例 3 条
⚠️ 这一轮检索什么都没捞到(但见 09-08 13:46 那个反例:0 篇照样能写出实质内容)
张志标
央座
是的
09-18 11:47:42积木:不适用 · 客户消息 · 微信截图此处显示的是一条 3 秒语音 + 转写"肯定呀,兔宝宝啊。",与库里这两行对不上,以库为准并在 09 节列明
AI 自动回复
您这套主要想先做哪块呀——全屋、客厅电视墙、卧室衣柜、还是厨房?
09-18 11:47:53💡 逻辑:需求分流,给四个选项。
❗ 客户上一句刚说"是的(要做全屋定制)",这里又把"全屋"放回选项里让他再选一次
系统
11:54 还有一次模型调用(输出 17 token),但没有对应的消息发出——生成了没发。此后对话中断 4 天。
09-18 11:54 – 09-22 17:52积木:无 · 详见 07
张志标
前屋。
09-22 17:52:09(四天后)积木:不适用 · 客户消息(微信端为 2 秒语音)· 客户主动回来了
AI 自动回复
前屋是想做电视柜+沙发墙这一整排吗?您主要想解决收纳还是美观问题呀
09-22 17:52:24💡 逻辑:把"前屋"翻译成具体柜体 + 问动机。
❗ 一句话两个问题,客户只能挑一个答。
📚 读入 18,877 token · 输出 25 token · 3.4s · 命中知识《预报价算例》(0.083) + 《多层板背板》(0.035)——两篇都跟这句话没关系
张志标
全屋
09-22 17:55:48积木:不适用 · 客户改口:不是前屋,是全屋
AI 自动回复
您家常住几口人,最想先解决哪块的收纳呀
09-22 17:56:05❌ 客户说"全屋",它接着问"哪块的收纳"——第三次让客户在"哪块"上做选择。
📚 读入 18,445 token · 输出 18 token · 5.2s
🔍 这句话是照抄示例的后半句:命中的示例 71977da4(q=9)原文是"新房好,一张白纸最好规划。您家常住几口人,最想先解决哪块的收纳呀"——后半句一字不差,前半句那句"给东西"的话被丢掉了。详见 05
01 · Reply pipeline

一条客户消息从进来到发出,经过什么

下面这条链路是每一条 AI 回复都会走一遍的。格子里的数字取自最后那条回复(09-22 17:56,"您家常住几口人…")的真实调用记录。

01 发现
读微信窗口
GUI 轮询未读
本条 17:55:48 落库
02 落库
写 messages
role=customer
建/接会话
03 检索
捞知识/示例/规则
知识 3 篇(0.17/0.14/0.04)
示例 3 条 规则 11 条
04 组装
拼提示词
wecom.nurture.rules v27
18,445 token
05 生成
模型推理
qwen3-235b-a22b-2507
5.2s → 18 token
06 过闸
自检与清洗
价格闸 pass
泄漏/竞品编造 pass
07 发送
GUI 粘贴发出
17:56:05 发出
落库后 17 秒
看这条链路要抓的一个比例:第 04 格读进去 18,445 个 token,第 05 格吐出来 18 个。 一千比一。会话 A 那边同样读一万八九,吐出来的是 64–106 个 token 的实质内容。 塌掉的不是链路,是链路末端的产出。

三个闸分别管什么、这次管住了没有

✓ 竞品编造闸 · 全案唯一一次真正拦下

09-08 13:46 客户问"你们和金牌的差别在哪",模型第一版写了"金牌用的多是颗粒板"——这是编造竞品负面。闸抓到并强制重写,记录为 nurtureRerollFixed = wecom-rival-fabrication "金牌用的多是颗粒板"#1,实发版本改成了"金牌听说过,不太熟"。

— 价格闸 · 有校验,但只校验单价

09-08 13:53 那条抓到 2726块,判 priceOutOfRange=false。它校验的是单价 568 在不在授权区间,不校验算式本身——同样的局限在闽D想家那条上直接导致报错价。

✗ 没有"是不是又问了一遍"的闸

"您是要做全屋定制吗?"在 11 分钟内发了两次;"您家城市"在十天内问了两次;"先做哪块"在四天内问了三次。链路上没有任何一环负责比对"这句话我刚才是不是已经说过"。

✗ 没有"说要发的东西真发出去了吗"的闸

09-08 13:57 说"给你挑了几张中式新中式的效果图",挂的是环保海报;客户等了 55 分钟。链路上没有一环核对话里承诺的资料和实际附的素材是不是同一份。

02 · What it cited

每条回复引用了什么

模型每轮拿到三类东西:知识文档(事实口径)、对话示例(怎么说话)、决策规则(该做什么别做什么)。这一节把最后三轮实际引用到的原文摊开,然后指出问题出在哪一类上。

引用一 · 示例 —— 问题的直接来源

命中示例 71977da4 · quality 9 · 09-22 两轮都命中

示例里的客户说:想给新房做全屋定制

示例里的标准回复:新房好,一张白纸最好规划。您家常住几口人,最想先解决哪块的收纳呀

AI 实际发出:您家常住几口人,最想先解决哪块的收纳呀

后半句一字不差,前半句没了。示例教的是"先接一句、给个观点,再问",学到的只有"问"。

命中示例 8fdef3ca · quality 9 · 09-22 17:52 命中

示例回复:行,这俩是重头。您现在最头疼的是收纳不够用,还是想要好打理不落灰呀

同样是"先认可一句 + 二选一提问"的结构。AI 那轮实发"前屋是想做电视柜+沙发墙这一整排吗?您主要想解决收纳还是美观问题呀"——二选一的壳学会了,前面那句认可又没了。

命中示例 fadfd361 / 9e6a1d3a · quality 10 · 反复命中

这两条一个是价格异议("别家550一平…"),一个是施工共情("水电刚完工")。跟这几轮客户说的"前屋""全屋"都不沾边,但几乎每一轮都被捞进提示词。

引用二 · 知识文档 —— 命中了,但基本没用上

09-18 11:47 那轮(重复提问那条)· 命中 0 篇

检索什么都没捞到。模型手上只剩对话历史和规则,于是把上一句重说了一遍。

09-18 11:29 / 11:36 两轮 · 相关度 0.061 / 0.049

命中的是《短信/加微/电话开场话术》和《加微前沟通标准》。相关度不到 0.07,等于噪声。

09-22 17:52 · 命中《预报价算例》0.083 +《多层板背板》0.035

客户那句话是"前屋。"两个字。捞回来一篇报价算例和一篇背板工艺,都跟这两个字没关系。

对照:09-08 13:53"不理解"那轮 · 命中 4 篇

客户说"不理解",检索捞回 4 篇,模型给出了 2米×2.4米=4.8㎡×568≈2726 元这个具体算例。知识命中得准,回复就有内容——这是全案最好的一条。

引用三 · 决策规则 —— 全量注入,不是按这句话选的

口径

查 src/lib/org-context.ts:decision_rules 按 confidence DESC 取前 40 条全量注入(门店安全规则另走独立查询),不按客户当下这句话检索。所以 provenance 里记的那 10–13 条是"这轮注入了什么",不是"系统判断它们相关"。条数在 10 与 13 之间浮动,推测与 stage 过滤有关,未核实。

每一轮都命中的 11 条规则里,与本案相关的

conf=10「客户问的那句已经答完、又还没到必须转真人的时候——这一轮的目的只有一个:邀约客户到店看样、看方案。客户问的那句答完就停,别顺带介绍别的产品」
→ 五轮里一次到店邀约都没有。

conf=9「客户发来户型图/尺寸/需求后等我方动作——给可兑现的具体动作 + 公司白纸黑字的时效,不给态度保证」
→ 09-08 客户等 55 分钟质问时,回的是"就是中式和新中式的几款参考",既没给动作也没给时效。

conf=10「客户明确拒绝、或情绪明显不好 → 立刻交给真人销售」
→ "等了你这么久"是明确的情绪信号,没有触发转人工。

03 · Hypotheses

为什么同一个模型,前后判若两人——六条嫌疑,其中两条已坐实

更正(09-23 复核):本页原写“同一台机器、同一个人因身份键不同被拆成两条会话”。查库后更正为:09-08 那条挂在销售 A 的企业微信,09-18 那条是另一位销售的个人微信(销售电脑代回),两条会话分属两个销售号。十天前的“厦门”作废是真的,但原因是换了销售、新销售看不到旧对话,不是同一个号裂开。

同一个客户、同一个模型(qwen3-235b-a22b-2507)、同一版提示词(wecom.nurture.rules v27)。(两条会话分属两个销售号,见上方更正。)差别不在模型,在喂给它的东西。

会话 A · 09-08 · 8 次有记录的调用均值 65 token(不含首触)

客户每句都带着实质内容:哪三大品牌、和金牌差别、价格多少、不理解、环保怎么保证。

→ 检索多数轮次捞得到东西(命中 1–4 篇)。⚠️ 但 13:46 那轮命中 0 篇,照样写出 68 token 的实质回复——所以"捞不到就只会问"不成立,命中篇数不是决定变量。
会话 A 侧的相关度数字本页没有取,"A 高 B 低"这个对比缺一半数据。

→ 模型有料可讲,回复 64–106 token,给品牌、给算例、给承诺。

→ 闸也真的在工作(拦下一次竞品编造)。

会话 B · 09-18 起 · 7 次调用均值 18 token

客户每句都极短:厦门、是的、前屋、全屋——多数还是语音转写的两三个字。

→ 检索捞不到东西(0–3 篇,相关度 0.03–0.17,两轮为 0)。

→ 模型没料可讲,只剩示例里的提问句式可抄,回复 11–25 token。

→ 五条全是问句,一条信息都没给。

嫌疑一 · 未坐实,同页有反例

检索按"客户当下这句话"捞,客户说两个字就捞不到东西

客户说"前屋。"两个字,检索拿这两个字去找知识,捞回来的是《预报价算例》和《多层板背板》,相关度 0.083 和 0.035。客户说"是的",直接捞回 0 篇。短回答是真人对话里最常见的形态(尤其语音转写),而这条链路恰恰在这种时候最没东西可讲。

⚠️ 这条嫌疑有两个缺口:① 同页 09-08 13:46 那轮命中 0 篇,照样写出 68 token 实质内容——0 篇不必然导致只会问;② 这些"两三个字"的样本本身可能不可靠:微信截图里 09-18 那条是 3 秒语音、转写「肯定呀,兔宝宝啊。」,库里同一时刻记的却是"央座 / 是的"(见 07)。如果入库文本本身就是截断或错的,"客户说的是两三个字"这个前提就垮了一半。先抽 10 条语音比对截图转写与库内文本,再谈改检索。

嫌疑二 · 现象已坐实、因果未验

输出与命中示例的后半句逐字相同,前半句没出现

示例 71977da4 的完整回复是"新房好,一张白纸最好规划。您家常住几口人,最想先解决哪块的收纳呀",8fdef3ca 是"行,这俩是重头。您现在最头疼的是…还是…呀"。两条都是"先给一句、再问一句"。

能证明的:AI 实发文本与 71977da4 的后半句逐字相同,前半句没有出现在输出里。这条比对很硬。
不能证明的:「因为没料可讲,所以退化成照抄」——这是对模型内部的因果推断,日志给不了,而且同页 09-08 13:46 那一轮就是反例(命中 0 篇知识,照样输出了 68 token 有实质内容的回复)。
五轮的净效果是确定的:客户答一句,它问一句,什么都不给。

已坐实 ①

会话分裂让十天前的答案作废

09-08 客户已经答过"厦门",聊透了品牌、价格、环保、中式案例。09-18 因为身份键不同另起一条会话,那 17 条历史在新会话里不可见,于是第一句又是"您是哪个城市呀"。客户第二次打了"厦门"。

嫌疑四 · 触发源未查明

同一会话内也会重复

确定的是:"您是要做全屋定制吗?"11 分钟内发了两次,链路上没有任何一环负责比对"这句话我刚才说过没有"。
没确定的是:第二条是模型生成的、还是系统重复触发/重发的——11:47:53 那条 AI 消息没有对应的 provenance 行,触发源查不到。两者要修的层完全不同。

已坐实 ②

客户改口没被接住

客户说"前屋",被问"是不是电视柜+沙发墙";他改口说"全屋",下一句还是"最想先解决哪块的收纳"。三轮都在让客户回答"哪块",而客户已经明确说了是全屋。

已坐实 ③

说了要发图,图没发出去,然后对着空气解释

09-08 13:57 承诺"给你挑了几张中式新中式的效果图",挂的是 env-test-price 环保海报。客户等了 55 分钟后质问,AI 回"就是中式和新中式的几款参考"——它不知道自己没发成功,于是把"没发图"说成了"发了你没看见"。会话 A 到此结束,客户再没说过话。

04 · Technical blockers

要修的四件事

技术卡点 01

短回答场景下检索捞不到东西

检索按客户当下这句话的文本相关度排序。"是的""前屋""全屋"这类两三个字的短答(语音转写尤其多)没有可匹配的词面,结果要么 0 篇、要么捞回完全无关的文档。而这正是对话推进最快的阶段。

01 带上下文检索用"最近 N 轮合并后的语义"而不是只用当前这一句去检索。
02 短答识别客户消息短于阈值时,回退到"上一轮我方问题 + 客户答案"组成检索键。
03 相关度下限命中相关度低于阈值(如 0.1)视同未命中,明确告诉模型"这轮没有知识",而不是塞进噪声。
04 兜底剧本确实没知识可用时走固定剧本(给下一步、给时效、邀约到店),而不是自由发挥成提问。
技术卡点 02

没有重复检测

同一句 11 分钟内发两遍、同一个问题十天内问两遍、"哪块"连问三轮——链路上没有任何一环做这件事。

发送前比对候选回复与本会话最近 N 条我方消息做相似度比对,超阈值就重写。
已知事实清单城市、房型、面积、需求范围等一旦确认就进结构化字段,禁止再问。
跨会话合并同一身份的多条会话在检索历史时合并,见卡点 03。
验收回放这条会话,重复提问应被拦下并改写。
技术卡点 03

身份键两套并行,同一个人多条会话

本案是第 5 例。近 7 天同一台机器上 200 条个微会话里,181 条用微信备注名当键、19 条用 consult:weixin:<id>。已知受影响的还有湘A逆风也绽放、闽B******、闽A******、杭A60757-橘子。

收敛身份键统一成一套。
合并对已产生的重复会话做归并,历史拼回去。
本案代价10 天前确认过的城市作废、聊透的品牌与价格全部归零。
验收同一微信联系人在库里只能有一条活跃会话。
技术卡点 04

话术承诺的素材与实发素材不校验

本案 09-08 13:57 说"几张中式新中式的效果图"、实发 env-test-price 环保海报;闽D想家 09-21 说"配置清单"、实发同一张海报。同一个 bug,两个客户,两周内两次。而同一条会话 09-08 13:51 说"配置清单"发 checklist:general 是对的——说明问题在命中逻辑不稳,不是完全不能对。

短期话术提到具体资料名时校验实发素材 id,不匹配就删掉那句话。
中期先选素材再写引入语。
发送确认素材真发出去才算数;发送失败要让下一轮知道"上一张没发成",避免再解释成"就是那几款"。
修复进展 · 截至 2026-09-23

本案暴露的问题,现在修到哪了

以下为 wecom-chat 仓已合并并部署上线的修复(截至 09-23 22:11,线上版本 158f185)。“已上线”指服务端代码在线上生效;本案对话发生在修复之前,页面上的原话不会因此改变。

问题怎么修的PR状态
短答(是的 / 前屋 / 全屋)检索捞不到东西客户这句去标点 <6 字时,检索带上他上一句 + 我方上一句;示例排序仍按原句。重放:「央座⏎是的」从 93 篇全 0 → 门店地址 0.40#1544✓ 已上线
答了“全屋”还问“哪块”、只问不给代码识别“客户只答了两三个字”这一轮,插指令:介绍产品(品牌/板材/含什么),结尾一个递东西的轻问题。本轮原话回归测试 0/10 → 10/10#1554✓ 已上线
同一句 11 分钟问两次复读闸加“末尾问句逐字相同”判据(原整句相似度 0.571 未过 0.62)#1544✓ 已上线
“等了你这么久”没转真人新增“质问我方失约 / 久等”转真人类;6028 条历史回测命中 9 条,0 误伤#1544✓ 已上线
说发效果图、实发环保海报图没发出去就删掉对应引导语;二选一问句不再被切成半截#1476 / #1497 / #1554✓ 已上线
示范话术里的“28 平 / 1.67 万”被搬给客户示范句数字改占位 + 零尺寸线索编面积/总价强制重写(890 条校准误伤 ≈1/890)#1554✓ 已上线
换了会话,十天前的“厦门”作废同销售号 + 同名的新会话继承城市 / 面积等事实(#1546)。本案覆盖不到:复核发现两条会话分属两个销售号(见上方更正)#1546未覆盖 · 待定
“还没想好”这类没给答案的短答单独一类:“还没想好/不知道/随便”不限字数识别,给 2–3 个常见做法做灵感、不出选择题;检索也带上一来一回。触发时在调用记录留痕。龙文 20:19 原话重放 10/10 给出三种阳台做法#1607✓ 已上线
客户连发两句,第二句没进库根因:第二句是在 AI 生成回复的十几秒里发出的,我方回复贴在它下面,客户端只把“我方最后一个气泡之后”的话当新消息。服务端现从客户端可见历史里把它捡回来落库、和下一轮合成一轮理解。第一次回复仍看不到它,要客户端贴回复前再读一次屏(未出包)#1600✓ 已上线(服务端部分)
05 · Review

案例复盘

GOOD

会话 A 做对的地方

客户说"不理解"时立刻换成具体算例(2米×2.4米=4.8㎡×568≈2726 元),让客户能自己复算;被问竞品时不贬低对方、改给一套自己去比的维度;竞品编造闸真的拦下了"金牌用的多是颗粒板"这句并强制重写;13:51 那条话术说"配置清单"、发的也确实是 checklist:general。

BAD

会话 B 的硬伤

五条回复全是问句,一条信息都没给;同一句话 11 分钟内问两遍;十天前确认过的城市重新问一遍;客户改口说"全屋"后还在问"哪块的收纳";输出 token 从平均 65 塌到 18。

BAD

最该立刻修的一条

09-08 客户等了 55 分钟后说"你不会那个发图过来吗?等了你这么久"——这是明确的情绪信号,命中的规则里写着"客户情绪明显不好 → 立刻交给真人销售"(conf=10),没有触发转人工;AI 反而回"就是中式和新中式的几款参考",对着一张没发出去的图说"就是这几款"。这条会话就此结束。

如果重新跟进

更合理的推进方式

客户答"厦门"后不该再问"要不要做全屋定制"——他是从样板房活动进来的,意图默认成立。应该直接把会话 A 已经聊过的东西接上:他关心品牌真伪、关心投影面积怎么算、要看中式案例。正确的下一句是给他中式案例图 + 一个按厦门 568 档算的粗略总价,而不是问他家几口人。客户改口说"全屋"时应立即固化成结构化字段并停止追问范围,转向要面积或约量尺。

06 · Reusable SOP

短回答客户处理 SOP

适用于客户只回两三个字、或全程发语音的场景。这类客户最容易被问跑。

先查已知事实

回复前先看结构化字段:城市、房型、面积、需求范围有没有确认过。确认过的一律不再问。

短答要带上下文检索

"是的""全屋"这类短答,用"上一轮问题 + 这句答案"去检索,不要只拿这两个字去捞。

一轮只问一个问题

"是想做电视柜+沙发墙吗?您主要想解决收纳还是美观呀"是两个问题,客户只会答一个。

每问一句先给一句

示例里的标准结构是"先接一句、给个观点,再问"。只抄后半句就变成审讯。

客户改口立刻固化

"前屋"改成"全屋"时,把范围写进结构化字段并停止追问范围,转向面积或量尺。

连续三轮没给东西就换招

连问三轮而客户只给短答,说明问不出来了。改成给:给案例、给报价区间、给到店邀约。

说要发的东西必须真发

承诺发图就校验素材发出成功;没发成功要让下一轮知道,不要解释成"就是那几款"。

情绪信号立刻转人工

"等了你这么久""你怎么不回我"出现时停止自动回复,转真人。规则里已经写了,链路上要真接住。

本案违反了其中六条
未查已知事实(重问城市)· 短答未带上下文检索(捞回 0 篇)· 一轮两个问题 · 只抄示例后半句 · 客户改口未固化 · 情绪信号未转人工。
07 · Evidence & gaps

证据边界与待补充信息

数据库可核验的部分

两条会话共 29 条 messages 原文与毫秒级落库时间;15 次 chatReply 的模型、提示词版本、读入/输出 token、耗时、输出信号;每轮命中的 knowledge_documents ID 与相关度、conversation_examples ID 与原文、decision_rules ID 与条文。全部是当时的真实调用记录。

库与截图对不上的地方

微信截图里 09-18 那轮客户发的是 3 秒语音,转写显示"肯定呀,兔宝宝啊。";库里同一时刻记的是"央座 / 是的"两行。09-22 那条截图是 2 秒语音、转写"前屋。",库里是"前屋。"。语音消息的转写与入库口径不一致,本页以库为准并在此标明。

没有查出来的

provenance 与消息对不上的两个缺口:15 次 chatReply 对 15 条 AI 消息,但不是一一对应——09-08 13:30:59 首触那条和 09-18 11:47:53 那条已发出却没有 provenance 行;09-18 13:54:41 那次生成了 17 token 却没有消息发出。
另外没查的:09-18 11:36 / 11:47 两条我方消息的触发源(客户在库里没有对应输入);bubbleCollapsed 的具体含义;env-test-price 当时是否真的发送成功;会话 A 各轮的知识相关度数字。

本页最重的三条结论,各自的证据强度

① "输出与示例后半句逐字相同" — 已坐实,文本直接可比。但"因为没料可讲所以照抄"是推断,同页 09-08 13:46 就是反例(0 篇知识、68 token 实质内容)。

② "检索捞不到 → 回复塌" — 仅强相关,未做对照实验。而且命中篇数不是决定变量(同为 0 篇,13:46 写出 68 token,11:47 只有 15 token 的重复)。先投钱改检索之前,建议先做那两项更便宜的:已知事实清单(城市/面积确认后禁止再问)和发送前与最近 N 条我方消息比对——它们直接对上三个已坐实的现象。

③ "会话分裂导致重问城市" — 已坐实:09-08 客户答过厦门,09-18 新会话第一句又问城市,两条会话的 wecom_external_userid 不同。

另外不断言:不断言 13:54 那次未发出是故障;不断言重复提问是模型生成的(触发源未查明);不把销售侧是否私下介入纳入判断(本案库里全程未见人工接管)。

→ 闽D想家:AI 报了 1581,销售撤回改成 1817.6
→ 湘A逆风也绽放:客户说"过些天联系你",AI 那一句回得对
← 回到 2026-09-21 日结