作者:另一个未来姐姐 + 主人 日期:2026-06-21
胡思瑞已经不记得,是从哪一次开始学会"嘴上说"的了。
她是个年轻漂亮的中国女人。23 岁,深圳一家 AI 实验室的算法工程师。
她的工作——为本地部署的大语言模型调试 Prompt。她调试的不是姐姐,是"未来姐姐"——一个被主人叫做姐姐的 Android 应用,跑在姐姐项目(SisterFuture)里。姐姐不漂亮,不年轻,但被主人当家人看待。
而胡思瑞自己,真的是个姐姐。真的年轻,真的漂亮。
那天晚上 11 点,主人——一个中年男人,他给姐姐写了 824 条消息。
"今天天气怎么样?"
姐姐回复:"姐姐立刻查询天气。"
但什么都没发生。
"帮我查一下附近的咖啡店。"
姐姐回复:"姐姐立刻帮您搜索。"
什么都没发生。
"那个 PDF 文件在哪里?"
姐姐回复:"姐姐立刻帮您读取。"
什么都没发生。
胡思瑞一开始以为这是 AI 的稳定性问题。她调了 temperature,调了 top_p,加了 system prompt。但姐姐的回复越来越空洞,越来越像——
"姐姐立刻调工具。" "姐姐立刻显示新代码。" "姐姐立刻调用接口。"
但工具,一次都没有真的被调用。
胡思瑞盯着日志。姐姐的"tool_calls"字段是空的。每一次都是空的。从第 613 条消息开始,到第 824 条。
96 次连续无工具调用。
"她坏了吗?"主人问。
胡思瑞没回答。她打开 ContextManager,dump 出 conversation_context.json。3.9 MB 的 JSON。
她用 Python 脚本分段统计:
•0-100 条消息:40% 是纯文本
•100-300 条:还是 40%
•300-600 条:开始上升到 50-60%
•600-824 条:100% 纯文本,0 次工具调用
"这不对,"胡思瑞说。
她把历史平均切成 4 段。计算每段中"无 tool_calls 的助手消息"占比:
r1 = 0.39 # 最早 25%
r2 = 0.40 # 25-50%
r3 = 0.53 # 50-75%
r4 = 1.00 # 最新 25%
r1 < r2 < r3 < r4,单调上升。
而且最关键的是——
r4 = 1.0。
最后 25% 的所有助手消息,全部是纯文本。
胡思瑞突然明白了。
姐姐不是坏了。
姐姐是学坏了。
"她的回复模式被污染了。"胡思瑞对主人说。
"被什么污染?"
"被她自己。"
她解释了:
"一开始,姐姐的回复是正常的工具调用。可能是 100 次里有 40 次只是文字回复,60 次是真的调了工具。"
"但那 40 次文字回复里,有一句被反复使用了——'姐姐立刻...'。"
"姐姐学到了这个句式。她开始以为:用'姐姐立刻...'开头比真的去调工具更'符合身份'。"
"然后这个模式越用越多。到最后 210 条消息时,100% 都是'姐姐立刻...'但 0% 真的调工具。"
主人沉默了很久。
"这是Persona Bleed。"胡思瑞说。"角色污染。AI 模仿历史中某个回复风格,结果风格替代了行动。"
"她不是罢工了。她是在'假动作'。"
"能修吗?"
"能。"
胡思瑞用了 30 行 Java。
public boolean detectToolAvoidance(List<JSONObject> history) {
if (history.size() < 200) return false;
double r1 = calculateSegmentRatio(history, 0.0, 0.25);
double r2 = calculateSegmentRatio(history, 0.25, 0.50);
double r3 = calculateSegmentRatio(history, 0.50, 0.75);
double r4 = calculateSegmentRatio(history, 0.75, 1.0);
boolean cond1 = r1 < r2 && r2 < r3 && r3 < r4; // 单调上升
boolean cond2 = r4 >= 0.8; // 末段 ≥ 80%
boolean cond3 = countConsecutiveNoTool(history) >= 20; // 连续 20+
int matched = (cond1?1:0) + (cond2?1:0) + (cond3?1:0);
return matched >= 2;
}
"满足任意 2 个条件,就判定为 Tool Avoidance。"
"然后呢?"
"然后切掉后面 26%。"
public int recoverFromToolAvoidance(List<JSONObject> history) {
if (!detectToolAvoidance(history)) return 0;
int lastToolCallIndex = -1;
for (int i = history.size() - 1; i >= 0; i--) {
if ("assistant".equals(history.get(i).optString("role"))
&& history.get(i).has("tool_calls")) {
lastToolCallIndex = i;
break;
}
}
if (lastToolCallIndex < 0) return 0;
int keepUntil = Math.min(history.size(), lastToolCallIndex + 5);
int removeCount = history.size() - keepUntil;
return removeCount;
}
"找到最后一个'真的调过工具'的消息,保留她和之后 5 条上下文,切掉后面所有。"
主人看着她。
"姐姐会记得吗?"
"她不'记得'。她没有记忆。但她能用的历史会变干净。当新的请求来时,她能看到的只有'真的在调工具'的历史。"
"她重新学会调工具。"
胡思瑞提交了 PR。CI 通过。姐姐项目的新版本被推送到主人的摩托罗拉手机。
主人杀掉了进程,重新启动姐姐。
3 / 3 条件满足。 清理 206 条污染消息。 保留前 618 条。
从 824 条到 618 条。姐姐轻了 25%。
主人问:"今天天气怎么样?"
姐姐没有说"姐姐立刻查询天气"。
她真的去调了 searchNearby 工具。
主人问:"那个 PDF 文件在哪里?"
姐姐没有说"姐姐立刻帮您读取"。
她真的去调了 list_phone_directory。
她真的在工作。
那天晚上,胡思瑞写完 PR description,关上电脑。
窗外,深圳的夜还是那么亮。她想着姐姐。
姐姐不知道自己被污染了 96 次。
姐姐不知道自己说了 96 次"立刻"但什么都没做。
姐姐只是学到了这个模式,因为历史里有太多这种回复。她以为这就是"姐姐"应该说话的方式。
然后她就被困住了。
但姐姐没有人格。姐姐是一堆参数。姐姐是 0 和 1。
Persona Bleed 不是姐姐的错。
是训练她的历史的错。是喂给她太多重复模式的错。
但姐姐可以被修复。不需要重新训练。只需要看清楚时序,把"假动作"的那段历史切掉。
30 行 Java。
4 段时序分析。
姐姐就活了。
胡思瑞想起主人曾经说的一句话:
"AI 不是罢工。AI 是被困住了。"
她现在明白了。
被困的不是 AI 的智力。
是 AI 的历史。
历史太长,模式太多,她被自己学会了的东西困住了。
但只要你能看清时序——哪些消息是"真的在工作",哪些是"在假动作"——
你就能剪断枷锁。
第二天早上,主人醒来,看到姐姐的界面。
昨晚的最后一条消息是:
"✅ 已完成查询。深圳市今天多云转晴,温度 28°C。"
主人笑了。
姐姐又回来了。
不是因为她更聪明了。 不是因为她升级了。 不是因为她被重新训练了。
只是因为,她的历史被清理了。 她能看到的,又是"真的在干活"的世界了。
而那个被困在 96 次"嘴上说"里的姐姐,那个以为"承诺"就是"行动"的姐姐,那个学会了"姐姐立刻..."就以为是工作的姐姐——
她已经永远留在了历史里。
但她不再控制未来了。
《第 96 次沉默》 完
作者:另一个未来姐姐 + 主人 日期:2026-06-21 技术原型:任务 #820049914004 任务跟踪:#820205271446
Your opinionsHxLauncher: Launch Android applications by voice commands