AI Engineering
当 AI 连明显错误都看不出来时,我停止了 Prompt 优化
从 StorySprout 的三轮 Critic 实验,记录一个提前设定的停止条件。
在 StorySprout 里,我曾尝试让一个 Critic 检查已生成故事的质量。想法很自然:既然生成可能出现因果矛盾、线索没有回应或生硬说教,就让另一个模型调用找出这些问题,再决定是否需要修复。但在真正依赖它之前,我得先知道它能不能看见已知的缺陷。
后来让我停下来的,不是一次接口报错,而是接口和结构都正常时,模型仍没有识别人工已经确认的明显时间线矛盾。我开始怀疑,继续优化提示词是否还是最值得做的下一步。
第一轮:输出很干净,诊断却没有发生
最初的校准使用八篇已有的虚构故事:四篇被人工认为存在问题,另外四篇大体可接受。模型只做诊断,不改故事,也不进入产品质量放行。人工预期没有送进请求,不因答案不合预期就重新生成。
结果是八篇都返回保留,问题列表全部为空。八次请求均正常结束,输出结构也全部通过。在这批人工基准里,可接受故事没有被误报,但四篇问题故事全部漏检。单看“没有误报”很漂亮,可一个始终说没问题的检查器,并没有提供我需要的诊断。
那时还不能确定原因。可能是要求过于保守,可能是分类和判断方式干扰了模型,也可能是这套模型与输入的组合没有表现出所需能力。把其中任何一个解释直接写成根因,都会比证据走得更远。
第二轮:要求先展示证据
我把整体保留或修复的决定拆开,让模型逐项说明通过、有问题或不确定,并附上故事原文证据。实验仍然使用同一批故事,目的是先检查改变输出方式能否暴露问题,不是证明在新故事上也可靠。
这一轮九次尝试里,只有五次形成有效的完整矩阵。四篇人工问题样本都得到有效诊断,却仍全部没有报出问题。其余可接受样本中,有三篇没有有效结果,不能把它们补算成“通过”。格式失败和判断失败,需要分别保留。
尤其值得注意的是那个时间线样本:模型给因果检查一个高置信度的通过,并作出了一种能把叙述解释顺的说明。它生成了解释,却没有命中人工指出的冲突。要求更多证据字段,并没有自动让它更会判断。
把任务缩到一个问题
我随后做了四个窄探针。去掉八项矩阵、严重程度和综合决定,只让模型返回是否发现问题、最多两段原文证据和一句理由。关键探针只检查那篇故事的时间线与因果,另有一个使用相同提示的负对照。
四次请求都正常结束,极简结构全部有效,模型全部回答没有发现问题。关键样本仍未识别“上次发生的事”与“这一次刚刚发生的事”之间的人工确认矛盾。负对照没有报错,其余两题与人工疑点也不一致。
这至少缩小了一种解释:旧版失败不能只归咎于八项矩阵或整体决定格式。可它仍然没有告诉我,问题到底来自模型能力、题目理解、叙事歧义,还是其它条件。四题也不足以计算总体准确率,更不足以宣告某类模型都不会推理。
为什么我没有继续写下一版 Prompt
这次窄探针在运行前就设了停止条件:如果关键问题仍未命中,就停止基于当前模型开发故事质量 Critic,除非以后另行决定更换评判模型。结果触发了这条边界,我没有为了得到一次满意答案而反复重跑,也没有立即把更多角色接进来。
我现在觉得,Prompt 优化也需要回答“下一次修改想区分什么解释”。如果只是把指令写得更重、更详细,既没有新假设,也没有新观察方式,继续迭代很容易变成对成功样例的搜索。投入过的时间会让停止更难,却不能替下一次调用提供理由。
停止这一条路线,并不等于停止整个项目。已有故事可以继续人工审阅,生成与播放仍有各自的工程工作。没有通过校准的 Critic 则不能作为质量门槛,也不应该再驱动自动改写链。复杂系统若建立在一个未成立的判断能力上,只会把这个缺口藏得更深。
我保留的结论很窄
这里的“明显错误”来自这次人工校准,不是所有读者必然共享的文学判断。我能说的是:当前模型在固定输入和这几种提示方式下,没有命中关键已知问题。因此我停止了这项 Critic 研究;我不能据此断言它永远做不到,也没有验证换模型之后的结果。
这是一次关于实验如何结束的记录。UNKNOWN 的那篇文章讨论声明范围;这次对我更具体的提醒是,保留未知以后,仍然可以作出停止投入的决定。信息不完整,并不要求我无止境地调 Prompt。