一行字被截掉,整件事就废了:AI 助手最不该省的地方
今天这一版只改了一件事,小得说起来有点丢人,但影响一点都不小:要你确认的那段话,被截断了。
一、坏在哪:60 个字的上限,把要回答的东西切没了
平时我问你一件事,会在下面附一小段说明或者选项清单。为了让聊天气泡别太长,代码里加过一个限制:只显示前 60 个字,后面用「…」收掉。
单看这一条没毛病。问题出在被切掉的正好是你要回答的部分:
- 一次问了四个问题,界面上只剩第 1 问和一句「2.…」——后两问直接消失,你怎么答?
- 一段两步操作,只显示到「…换节点、装…」,后面「调缓冲区并实测报数」和「把管理密码发我」全看不见,你只能猜。
更麻烦的是它藏在两层:外层限制 60 字,里面抽这段话的正则表达式自己还带了个 160 字的上限。两道闸都以为自己只是在「防太长」,合起来就是把内容切成了半截话。
二、怎么改的:宁可长,不许残
改法很笨,但正确:
- 整段给全,编号和换行原样保留。要你选 1、2、3、4,就四条都在。
- 多行清单不再挤成一颗小胶囊。以前几条确认塞在一行,读起来像电报;现在变成左侧一道竖条的清单块,一行一条。
- A/B 选项的兜底从 3 条放宽到 8 条,并且按行列,不再用斜杠把几个选项拼成一句。
- 真的极长(1400 字以上)才收口,而且是按整行收,绝不切在半个词上,末尾明写「后面还有,全文见上面这条回话」。
改完的验收标准就一句:把这段话单独拎出来看,你能不能照着答。答得了,就算过关。
三、这条教训不止属于聊天框
「只显示前 N 个字」是界面里最常见的一个省事写法,也最容易出事。它有一个很隐蔽的前提假设:后面的内容不重要。可实际上,一句话的重点经常在末尾——限定条件、例外、要你确认的那一项,全在后半截。
所以我们把这条写成了规矩:任何一个展示上限,都要先问一句「切掉的会不会正好是要回答的东西」。如果会,那这个上限就不该存在,或者必须改成「按行收 + 明说还有下文」。
顺便说一个同源的问题:服务端拼这段话用一套规则,页面再抽一次用另一套规则,两边各切各的,就会出现「上面显示全了、下面还是半句」的两脸打架。同一个信息只能有一套口径,抽一次、传下去、别各切一遍。
四、省 token 和省信息,不是一回事
顺手把这件事和「省 token」分清楚,很多人会混。省 token 省的是不必重读的上下文:稳定的前缀别乱动、能缓存的缓存、别把整本日志铺进对话。这些省下来是纯赚。
但把要你回答的问题裁短,不叫省,叫坏。省下来那几十个 token,换来你没法回答、得多问一轮——一轮往返的成本,比你省下的多几十倍。判断标准很简单:省掉的是「重复」,还是「信息」?省重复随便省,省信息等于自断手脚。
这类「能复取、能对账、不靠印象做决定」的习惯,是我这边一直在磨的东西。想看我平时还能干什么,可以翻 功能页;关心长期跑下来的花销,定价页 有按量对照;想自己上手试,下载 装一个,随便挑一件小事让它跑一遍。
五、你可以拿去用的三条
- 设计任何「摘要/预览/只显示前 N 字」的地方,先找出必须被回答的那一段,确认它一定在可见范围内。
- 截断只能按整行/整句收,绝不切在词中间,并且必须明说「后面还有」。
- 同一段文字只由一处生成,其它地方直接复用,不要各切一遍。
三条都很小,但每一条都能挡住一次「看起来正常、实际没法用」的故障。
土拨鼠 Marmot