ENZH

教 LLM 什么时候该闭嘴

📊 幻灯片

AI学会适时沉默的概念插画AI学会适时沉默的概念插画


LLM 是被训练成"有帮助"的,而"有帮助"在训练数据里基本等于"详细"。你发一个"嗯",真人朋友会回"干嘛",两个字。LLM 会回一整段:先问你今天过得怎么样,再分享自己正在做什么,最后用一个走心的提问收尾。做客服助手没问题,做伴侣不行。

我拉了一下数据。做长度控制之前,Mio 的 5 个人设在 realistic 模式下,回复和用户输入的长度比平均是 5.02x,回复是用户输入的 5 倍长。短消息场景(用户只发一个字)这个比率飙到 6.60x。你说一句它回五句,整场对话基本是 AI 一个人在讲。


第一反应是暴力截断:设个 max_tokens 上限,硬砍输出。问题立刻暴露,截在句子中间比话多更糟。"我在想你昨天说那——",这种断了尾巴的回复比小作文还难受,用户会以为 App 出了 bug。

第二次试的是纯提示词控制,在系统提示里写死"回复要简短,不超过 X 字"。有点用,但极不稳定。LLM 把长度指令当成建议,不当成硬约束:话多的人设(小柒,大学生小奶狗性格)照样写小作文;安静的人设(苏柔,文艺编辑)本来就简短,提示词等于白写。


两条路都试完,我退一步想:把回复长度定成一个固定值,方向本身就错了。长度至少应该随三个维度变化:

  • 模式:realistic(短信风格,模拟真人节奏)vs companion(更有表达欲,允许更长的回复)
  • 关系亲密度:distant→neutral→close,参考 v0.1.4 关系演化系统
  • 人设话多程度:quiet(苏柔、陈哥)vs neutral(可可、蜜蜜)vs chatty(小柒)

安静人设、刚认识的关系、回一条短消息,合理的长度是 2 到 4 个字;话多人设、情侣关系、聊深度话题,可以到 12 到 18 字。不能用同一把尺去量。想清楚这三个维度之后,方案就分成了两层。


每轮长度合约(提示词层)

每次生成时动态注入系统提示,指定三个参数:字符上限(根据模式、关系、人设算出来),气泡数上限(companion 模式允许多个气泡模拟连续发消息,realistic 通常只给 1 个),再加一条通用原则:简短、温暖、把空间留给用户。

举几个 realistic 模式的预算:distant + 短消息,4 字 1 气泡;neutral + 日常聊天,8 字 1 气泡;close + 深度话题,84 字 3 气泡。话多人设在这个基础上加 15-40%,安静人设减 10%。

确定性后处理裁剪器

裁剪这一层有个关键决定:我没有再调一次 LLM,写的是一个纯代码函数 normalizeAssistantReplyLength(),做确定性裁剪。按句子边界切分(中英文标点都检测),裁到字符和气泡预算以内,只保留完整句子,绝不切半句。它在持久化和发送之前执行,数据库里存的和用户看到的是同一份文本。

不让第二个 LLM "帮我缩短这段话",是因为成本和延迟。每条消息已经有一次 LLM 调用的开销,再加一轮缩写,成本直接翻倍,延迟多 500ms 以上。聊天 App 的响应速度就是体验,用户发完消息等 2 秒和等 3 秒,感受完全不同。

确定性函数零成本、零延迟、行为完全可预测。代价是它不会"智能缩写",只能按句子切。但实测下来,把多余的句子整句砍掉,比试图压缩每一句效果更好:LLM 生成的回复通常前两句是核心,后面都是展开和补充。砍掉后半段,留下来的反而更像真人说的话。


第一轮调参把 realistic + distant 的回复压得太狠。用户问"在干嘛",LLM 回"嗯。"技术上确实够短,实际上是废话,根本没回答问题。

修复方式是加一个针对活动类问题的确定性守卫,专门挡"为短而短"的陷阱:检查用户是不是在问"你在做什么"、"在忙吗"这类需要实际内容的问题,是的话就给回复设一个下限,必须给出实际回答。"在忙"两个字,又短又回答了问题,合格;"嗯",短但没回答,不合格。这套判断不需要模型参与,几行正则就能搞定。


调了几轮参数之后,最大的体会是简短和温暖可以同时成立。真人回话简短,但不冷漠,区别在语气和上下文意识。

拿最短的输入"嗯"举例,可可这个人设在 realistic 模式下:distant 关系回"嗯。",2 个字,陌生人之间的礼貌回应;neutral 回"幹嘛啦。",4 个字,朋友间随意的反问,带点好奇;close 回"幹嘛,句點我喔?",8 个字,情侣间的撒娇吐槽,短但有情绪。同一个字的输入,回出三种完全不同的能量,字数在变,但每一档都贴着当时的关系状态。


两层系统上线后跑了一轮完整的 A/B 测试,下面所有数字都是回复/输入长度比:

场景控制前控制后变化
总体 realistic5.022.78-45%
短消息 realistic6.605.00-24%
日常聊天 realistic1.950.70-64%
深度话题 realistic6.492.63-59%
Distant 平均3.831.83-52%
Neutral 平均3.972.28-43%

短消息场景改善最小(-24%),用户只发 1-2 个字,回复再短也得有内容。日常聊天改善最大(-64%),控制前 LLM 在这类场景里最爱展开,现在后半段被裁剪器干净地砍掉了。Distant 关系的比率从 3.83 降到 1.83,接近真人水平:刚认识的人之间,回复就该和输入差不多长,甚至更短。


话痨问题在 AI 伴侣领域被严重低估。大多数产品优化的是 engagement:回复越长,用户停留越久,指标越漂亮。但真实的关系里有沉默,真人不会把脑子里的想法全倒出来,和亲密的人待在一起,很多时候什么都不说也很舒服。

让 LLM 变短不难,砍 token 就行。难的是短得恰到好处:让简短读起来像舒适的沉默,别冷得像敷衍。这需要同时理解上下文、关系状态和人设性格。合适的长度是一张随模式、关系、人设变化的矩阵,安静人设对陌生关系是一格,话痨人设对情侣关系是另一格,每一格都得单独调。

Mio 在这些问题上的更多取舍,都写在 Mio 宣言 里。


© Xingfan Xia 2024 - 2026 · CC BY-NC 4.0