跳到主要内容

一次失败实验记录:为什么效果不稳定

· 阅读需 3 分钟
一介布衣
全栈开发者 / 技术写作者

补档说明:本文属于「AI 工程落地周记」系列,计划发布时间为 2025-01-30 09:10。当前先保留为草稿,后续补充真实案例、代码片段和复盘细节后再发布。

这次失败实验发生在一个看起来很“稳”的场景里。我们当时做的是一段常见的知识问答链路:用户提问,系统从知识库里取回上下文,再让模型给出总结式回答。小样本测试时效果不错,前十几个问题几乎都能答到点上,所以团队一度觉得这个方向很顺。

但把样本放大一点之后,结果开始明显飘了。同样的提问方式,今天答得不错,隔几小时再测一次,回答里的重点就会变化;换一个近义表达,答案会突然把次要信息讲得很重,真正关键的结论反而变淡。

现象

最初我们以为是 Prompt 不稳定,于是先去改系统提示词,试着把约束写得更强、语气写得更明确、输出要求写得更细。短时间内看起来好像有点改善,但问题很快又回来了。

继续往下查才发现,真正飘的不是生成层,而是前面的上下文层:

  • 文档切分太碎,导致相邻信息被拆开。
  • 召回结果虽然“相关”,但排序不稳定。
  • 不同批次拿到的上下文组合并不完全一样。

模型只是诚实地根据拿到的材料组织答案,所以表面看起来像“模型发挥不稳定”,本质上其实是“输入给模型的上下文本来就不稳定”。

判断

这次失败让我更确定一件事:AI 效果不稳定,第一反应不应该总是去怪模型。

至少要先排查三层:

  • 输入有没有变化。
  • 检索结果有没有变化。
  • 结构化约束有没有把波动放大。

如果前面两层本来就是飘的,再要求最后一层稳定,基本是不现实的。

处理

这轮实验后,我给自己立了一个很简单的排查顺序:

  1. 先固定测试样本。
  2. 再固定检索结果做纯生成对比。
  3. 最后才去调整 Prompt 或模型。

这个顺序听起来普通,但特别有用。它能把“模型问题”和“系统问题”拆开,不至于一上来就在错误的层面打转。

结论

下次再遇到“效果忽好忽坏”的情况,我会优先看输入和上下文是否稳定,而不是马上继续打磨 Prompt。

很多 AI 项目的不稳定,并不是因为模型随机,而是因为我们喂给它的东西本来就没有被工程化地固定下来。