职责域 01 已验证 · 有实测数据 承接 O1:平均聊天轮次

对话体验质量

衡量标准是用户收到的每一条回复好不好。我负责定义什么算好、找出模型在哪里失效、 判断该改 prompt 还是交给工程,以及让这套判断能被别人复用。

分层 prompt 策略

约束很清楚:竞品有自研韩语模型,我方只能调通用 API 且无法做 LoRA 训练。 在模型层面追赶不现实,力气得放到模型之上那一层。平台形态本来就是用户自选模型档位,这给了分层的空间。

两个档位各自对应一个商业目标
档位做法要拿到的结果
高阶模型 加显式思维步骤:先判断情感状态与用户意图,再定行为策略,最后选语气与消息类型组合 体验拉满,驱动付费转化
低阶模型 压缩上下文、精简指令、强约束防跑偏,牺牲灵活性换稳定性 角色不出戏、韩语不生硬,保住留存

配套两条:维护韩语情感素材库按角色标签动态注入以补口语短板;按各模型对图片、语音、卡片类消息的生成质量差异逐个调触发策略。

这套策略的价值不在技术复杂度,在于把「用哪个模型」从技术选型变成了商业分层。

评测体系:先定什么算好

接手时反馈全是主观感受,没人能说清问题在哪。团队没有实验平台, 我搭建了轻量实验台,支持多模型对照、多版本并排与按字段开关的消融实验。

实验台的作用:将模型、版本与变量拆开比较,让每次迭代都能回到可复查的依据,而不是依赖单次体验判断。

两处决定数据可信度的选择:

对关键改动进行多轮、单变量消融,避免用单个案例替代整体判断。

V1 线上现状 V2 + 工程兜底
当前:V1 线上现状
输出可用率基线
回复完整性存在缺失
表达丰富度(消息类型种数)4.7
表达重复度(越低越好)较高
平均响应耗时(唯一变差项)2.7s

拖动滑块切换三档。第三档是叠加解析兜底后的结果。

分角色结果验证了策略的普适性:不同风格角色均保持自身表达特征,原本不稳定的能力恢复可用。 个别角色的变化仍在可接受波动内,因此没有为了单点表现牺牲整体策略。

badcase 归因:这个缺陷该谁修

测试中查出一批线上长期存在、此前从未被发现的格式缺陷。容错修复兜住了大部分, 所以没人注意到部分会话会出现整条回复缺失,用户看到空白。 判据是同一缺陷在两版上的出现率是否接近:接近说明属模型固有,差异大说明 prompt 能控。

缺陷V1V2归因与处置
结构闭合缺失高频仍有发生模型固有,停止优化指令,转工程兜底
字段提前闭合偶发未再出现指令可控,已消除
字段格式不完整偶发低频指令可控,明显收敛
嵌套层级不匹配偶发未再出现指令可控,已消除

高频问题经多轮指令调整后改善有限,再投入不划算。转向工程解法后, 以旧解析逻辑为基线回归历史输出,恢复了受影响内容且未引入回归

迭代取舍:留下什么,放弃什么

下面三条是过程中的试错,比最终结论更有参考价值。

删掉 speech_style 字段试过并回退
原字段把角色怎么发消息规定太死,限制临场发挥,于是整块删掉。结果角色遇到「?」这类极短消息接不住话。改为加回但写简单些,只留大概的说话感觉。
用反例清单收紧触发条件试过并推翻
某功能触发过频,第一反应是列反例清单告诉模型什么情况别触发,结果直接压成零触发。换成一句原则性描述后落到合理区间。
输出格式示例改成可照抄结构留下
固定其他变量只改示例写法:抽象占位时可用率 76%,写出可照抄的具体结构后 98%。

前两次失败合起来给出一条规律:要模型照着做就给可照抄的结构示例,要它少做则给原则而非清单。 文字描述压不住示例的示范作用,穷举反例会让模型直接放弃该行为。这条后续所有迭代都在用。

记忆与混合检索

我主导策略设计,工程实现由研发完成。一条立场定了后面所有取舍:记忆是关系历史而非知识库, 因此按关系隔离,一个会话等于一段关系,从根上防止不同角色的记忆串味。

检索链路:召回可以宽,进 prompt 必须窄
环节做法
双路并发召回关键词与向量检索同时跑各 top 20
融合排序RRF 融合后取前段进重排k=60,留 15
模型精选轻量模型选本轮用得上的,超时降级超时 6s
注入上下文再多模型会复述记忆,再少接不上话≤ 4 条

记忆分 6 类各有生命周期规则,其中「未了结的承诺」单独立类并在检索时固定带上。 通用检索只关心相似度,而陪伴场景里「你答应过我」的分量远高于普通事件。 人工盲评显示,带记忆的会话在连贯性上优于基线,同时降低了明显失配的回复。 经过渐进验证后,实验组的互动深度与短期留存均呈现正向变化。

一次把自己评测方式否掉的经历。 做召回评估时我把多个场景串成连续对话跑,结果召回率只有 0.23。 排查后发现问题出在评测方式上:串起来会让场景互相污染检索上下文。改成逐场景隔离后,真实召回率是 0.83。 没查这一步,我会去大改一个其实没问题的链路。