衡量标准是用户收到的每一条回复好不好。我负责定义什么算好、找出模型在哪里失效、 判断该改 prompt 还是交给工程,以及让这套判断能被别人复用。
约束很清楚:竞品有自研韩语模型,我方只能调通用 API 且无法做 LoRA 训练。 在模型层面追赶不现实,力气得放到模型之上那一层。平台形态本来就是用户自选模型档位,这给了分层的空间。
| 档位 | 做法 | 要拿到的结果 |
|---|---|---|
| 高阶模型 | 加显式思维步骤:先判断情感状态与用户意图,再定行为策略,最后选语气与消息类型组合 | 体验拉满,驱动付费转化 |
| 低阶模型 | 压缩上下文、精简指令、强约束防跑偏,牺牲灵活性换稳定性 | 角色不出戏、韩语不生硬,保住留存 |
配套两条:维护韩语情感素材库按角色标签动态注入以补口语短板;按各模型对图片、语音、卡片类消息的生成质量差异逐个调触发策略。
这套策略的价值不在技术复杂度,在于把「用哪个模型」从技术选型变成了商业分层。
接手时反馈全是主观感受,没人能说清问题在哪。团队没有实验平台, 我搭建了轻量实验台,支持多模型对照、多版本并排与按字段开关的消融实验。
实验台的作用:将模型、版本与变量拆开比较,让每次迭代都能回到可复查的依据,而不是依赖单次体验判断。
两处决定数据可信度的选择:
对关键改动进行多轮、单变量消融,避免用单个案例替代整体判断。
拖动滑块切换三档。第三档是叠加解析兜底后的结果。
分角色结果验证了策略的普适性:不同风格角色均保持自身表达特征,原本不稳定的能力恢复可用。 个别角色的变化仍在可接受波动内,因此没有为了单点表现牺牲整体策略。
测试中查出一批线上长期存在、此前从未被发现的格式缺陷。容错修复兜住了大部分, 所以没人注意到部分会话会出现整条回复缺失,用户看到空白。 判据是同一缺陷在两版上的出现率是否接近:接近说明属模型固有,差异大说明 prompt 能控。
| 缺陷 | V1 | V2 | 归因与处置 |
|---|---|---|---|
| 结构闭合缺失 | 高频 | 仍有发生 | 模型固有,停止优化指令,转工程兜底 |
| 字段提前闭合 | 偶发 | 未再出现 | 指令可控,已消除 |
| 字段格式不完整 | 偶发 | 低频 | 指令可控,明显收敛 |
| 嵌套层级不匹配 | 偶发 | 未再出现 | 指令可控,已消除 |
高频问题经多轮指令调整后改善有限,再投入不划算。转向工程解法后, 以旧解析逻辑为基线回归历史输出,恢复了受影响内容且未引入回归。
下面三条是过程中的试错,比最终结论更有参考价值。
前两次失败合起来给出一条规律:要模型照着做就给可照抄的结构示例,要它少做则给原则而非清单。 文字描述压不住示例的示范作用,穷举反例会让模型直接放弃该行为。这条后续所有迭代都在用。
我主导策略设计,工程实现由研发完成。一条立场定了后面所有取舍:记忆是关系历史而非知识库, 因此按关系隔离,一个会话等于一段关系,从根上防止不同角色的记忆串味。
| 环节 | 做法 | 量 |
|---|---|---|
| 双路并发召回 | 关键词与向量检索同时跑 | 各 top 20 |
| 融合排序 | RRF 融合后取前段进重排 | k=60,留 15 |
| 模型精选 | 轻量模型选本轮用得上的,超时降级 | 超时 6s |
| 注入上下文 | 再多模型会复述记忆,再少接不上话 | ≤ 4 条 |
记忆分 6 类各有生命周期规则,其中「未了结的承诺」单独立类并在检索时固定带上。 通用检索只关心相似度,而陪伴场景里「你答应过我」的分量远高于普通事件。 人工盲评显示,带记忆的会话在连贯性上优于基线,同时降低了明显失配的回复。 经过渐进验证后,实验组的互动深度与短期留存均呈现正向变化。
一次把自己评测方式否掉的经历。 做召回评估时我把多个场景串成连续对话跑,结果召回率只有 0.23。 排查后发现问题出在评测方式上:串起来会让场景互相污染检索上下文。改成逐场景隔离后,真实召回率是 0.83。 没查这一步,我会去大改一个其实没问题的链路。