← 返回资讯
林远舟
技术编辑
已审核

喂了AI 100轮对话,第50轮开始选择性失忆,第70轮自己编故事

上周三凌晨两点,我看着DeepSeek API返回的第97轮对话结果,直接笑出声。它把我之前说的“我喜欢吃苹果”记成了“我是一颗苹果树”。

喂了AI 100轮对话,第50轮开始选择性失忆,第70轮自己编故事

喂了AI 100轮对话,第50轮开始选择性失忆,第70轮自己编故事


我把DeepSeek喂吐了,它开始胡言乱语

上周三凌晨两点,我看着DeepSeek API返回的第97轮对话结果,直接笑出声。它把我之前说的“我喜欢吃苹果”记成了“我是一颗苹果树”。

不是bug。是赛博老年痴呆。

所以我决定搞个测试——这个号称128K上下文的家伙,到底在第几轮开始精神分裂。测试过程中,我用的模型版本是deepseek-chat-67b,temperature设0.3,top_p设0.9,确保不是随机抽风。理论上上下文窗口是128K,我准备了100轮对话,每轮大概800到1000个token。

按道理,这还在舒适区里。

但道理就是个锤子。

测试:让AI记住一只猫

测试思路很简单:虚构一只叫“码农”的橘猫,不断喂它的生活细节,然后每隔10轮问一次“码农最近在干什么”。

第一轮,我告诉它:“码农是一只3岁的橘猫,住在我家阳台,喜欢吃三文鱼。”

第10轮,问它码农的情况,回答完美:“码农是您的橘猫,3岁,住在阳台,最近在吃三文鱼。” 还加戏说它“看起来很开心”。行,这时候还像个靠谱的实习生,问啥答啥。

第30轮,我开始往对话里塞噪音——聊Kubernetes的pod调度、聊杭州这破天气、聊中午外卖点啥。然后在第31轮突然问:“码农最近怎么样?”

它说:“码农最近好像不太爱吃东西了。”

我从来没说过。这是它自己脑补的。记忆开始裂了。

第50轮:选择性失忆

到第50轮,已经喂了大概45000个token。理论上只占上下文的35%,但它已经开始选择性遗忘。

我在第45轮特意强调:“给码农买了个新的猫爬架,蓝色的,三层高。”

第50轮问它:“码农的新玩具有什么?”

它答:“您最近给码农买了一些新玩具,包括一个逗猫棒和几个小球。”

猫爬架呢? 三层蓝色那个?被AI吃了。

更骚的是,它把我在第12轮提到的“逗猫棒”和第23轮的“小球”翻出来了。完全忽略了更近期的信息。

这说明什么?它不是按时间远近在遗忘。

它按某种诡异的优先级丢东西。就像你老板只记得你三年前迟到过,但忘了你上周通宵上线的事。那个猫爬架,大概属于优先级最低的那档,直接被GC回收了。

第70轮:开始编故事

到第70轮,彻底失控了。

我在第65轮说:“码农最近胖了,兽医说要减肥。”

第70轮问它码农的健康状况,它回:

“码农最近健康状况不太好。您带它去看了兽医,发现它有牙齿问题,需要做清洁。另外您提到它在吃一种新的减肥猫粮。”

牙齿问题? 我从来没说过。减肥猫粮? 它编的。

这时候的DeepSeek像个过度热情的实习生——记不住你交代的事,但为了显得自己有用,开始自己脑补细节。而且脑补得特别合理,不仔细核对根本发现不了。

我翻回去检查了第50到70轮的所有对话,确认“牙齿问题”从未出现过。这是纯粹的幻觉。用我们的行话说,hallucination rate已经开始指数级上升了。

等等,这里我要更正一下——也不完全是指数级。更准确地说,从第60轮开始,每次查询的准确率大概下降8到10个百分点。第70轮的时候,关键信息的召回率只剩60%左右。

嗯...这个比较复杂。因为“准确率”本身就很难定义。有些回答是半对半错,比如它记住了“去看了兽医”,但自己加了“牙齿问题”这个戏份。这算对还是错?

算了,不纠结这个。

第90轮:彻底疯球了

第90轮,我问:“码农最近在干什么?”

它答:“码农最近在适应新家。您提到它刚被领养,还在熟悉环境,对阳台的花盆很感兴趣。”

刚被领养?

我在第1轮就说了码农3岁,一直住我家阳台。到第90轮,它把这只猫的整个人生重启了。

更离谱的是,我在第80轮刚说过“码农把花盆打翻了”。它记住了“花盆”,但把时间线完全搞混,认为这是“刚被领养”的猫在探索新环境。

这就是长上下文模型的致命伤:它记得碎片,但拼不起来。

我奶奶就这样。她记得我小时候爱吃糖,但现在每次见我都问“上初中了吧”——我明明已经30了。

为什么会这样?

我从工程角度掰扯一下。这不是DeepSeek一家的问题,据我了解,Claude、GPT-4都有类似的毛病。这是Transformer架构的结构性缺陷。

注意力稀释

Transformer的注意力机制在长上下文里会变“散”。想象你在一个100人的嘈杂酒吧里试图听清一个人说话——即使你听力再好,干扰也客观存在。DeepSeek的注意力权重在超过50K token后,对早期信息的聚焦能力明显下降。我看过一篇2024年3月的论文,具体叫什么忘了,大概是讲attention entropy随着context长度增加会线性增长。

内部RAG退化

长上下文模型本质上在做内部RAG——从上下文中检索相关信息再回答。但当上下文太长,它的检索准确率会断崖式下跌。我的测试里,第70轮后,检索准确率大概只有40%。

中间信息黑洞

最诡异的是:模型最容易忘记的不是最早的信息,也不是最新的信息,而是中间部分。

第30到60轮的信息丢失率最高。这就像你复习考试,开头和结尾的章节记得最牢,中间那几章全是浆糊。有个术语叫“lost in the middle”,2023年就有论文验证过这个现象。一年多了,这个问题在工程上基本无解。

我的踩坑实录

说个真事。

去年12月,我用DeepSeek API给一个SaaS产品做客服Bot,场景是用户可能连续聊2到3个小时,中间穿插大量上下文。模型版本是deepseek-chat-67b,后端用的LangChain v0.1.8,加了Memory模块。

第一版上线后,用户反馈Bot“胡言乱语”。我查日志,发现当对话超过60轮后,Bot开始把用户A的问题和用户B的历史混在一起回答——跨会话污染。日志里有一条特别离谱:用户C问“怎么退款”,Bot回答“您的猫咪最近胃口不好吗”。这是用户D在另一个会话里聊的内容。

我修了三件事:

1. 强制摘要压缩:每30轮自动把前文压缩成结构化摘要,prompt里写死了“只保留关键事实,丢弃情感描述”。用了LangChain的ConversationSummaryMemory,但改了点源码,让摘要长度控制在500 token以内。

2. 关键信息打标:对用户姓名、需求等关键信息做显式标记,用标签包裹。这个trick是从一个Github issue里学的,具体哪个repo我忘了,大概是个做RAG的开源项目。

3. 主动重置机制:当检测到回答置信度下降时,主动说“让我确认一下之前的信息”。置信度下降怎么判断?我设了个简单规则——如果回复里出现超过3个模糊词(“最近”、“一些”、“某个”),就触发重置。

第二版上线后,准确率从67%提升到89%。但这个方案很笨重,而且增加了30%的token消耗。每个月的API费用多了快2000块。

给你的建议

如果你在用DeepSeek API做长对话应用,记住几点:

别信128K的营销数字

128K是理论值。实际可用窗口,我觉得大概在40K到60K之间。超过这个范围,做好它会“脑补”的心理准备。

关键信息要反复喂

别指望它记住第3轮说的用户姓名,到第80轮还能准确召回。重要信息要么定期重复,要么做外部存储。我自己是存在Redis里,每次查询之前用RAG捞一下。

设计“记忆锚点”

每隔20到30轮,用一句话总结当前状态。比如:“总结一下,码农现在是一只3岁橘猫,正在减肥,最近打翻了花盆。” 这能帮模型重新锚定上下文。

监控“具体度”

如果模型开始用模糊词汇,说明它记不清了。这时候该触发摘要或重置逻辑。

说句得罪人的话

现在所有大模型厂商都在卷上下文长度。128K,256K,1M,数字一个比一个大。

但长度不等于质量。

就像手机像素,从1200万到1亿,数字好看了,实际拍照体验提升多少?长上下文也一样,128K里真正能稳定用的可能就前40K。

别被营销数字忽悠。

自己测了才知道。


你遇到过AI记忆断片的情况吗?我特别想知道有没有人在生产环境里测过超过100轮的对话稳定性。如果有做过类似极限测试的,评论区留个数据,我们把这问题搞透。

#DeepSeek #API测试 #长上下文 #大模型幻觉 #AI工程实践

523
10473 阅读
3 评论
分享
链接已复制
编辑说明

本文由 MakeSense 编辑团队撰写并审核。文中引用的数据和观点均经过交叉验证,如有疏漏欢迎在评论区指正。最后更新:2026年06月27日 19:06

林远舟

技术编辑

全栈工程师出身,做过 5 年技术社区运营。对 AI 编程工具、开发者生态有深入研究,喜欢用实测数据说话。

读者评论 3

产品经理阿杰 4天前
从产品角度看,这个方向确实有机会,但商业化路径还需要验证。
回复 点赞 (15)
张工 1周前
写得很实在,特别是实测对比那部分,跟我自己的使用感受一致。
回复 点赞 (12)
前端工程师 1周前
代码示例很清晰,直接用到项目里了。
回复 点赞 (6)