一句话总结:当你觉得 AI 答非所问时,先检查你给的是「现象」,还是你已经替它做好的结论。
一、我这次想解决什么
我在做一个批量生成工具,其中有一块逻辑是:把多组素材按规则自动组合,批量产出成百上千个结果。为了保证产出质量,每次组合都会打一个分,按分数高低来筛选。
问题出在素材用量上:跑完一批之后我发现,某个素材只被用了 3 次,而同质地的其他素材被用了 24、25 次。
差距大到不像是随机波动,更像是这套评分逻辑在系统性地「偏爱」某几个素材。
这个 bug 不致命,不报错,功能照常跑。但它会慢慢污染整批产出,而且我盯着那套评分代码看,看不出哪里有问题——它逻辑上完全自洽。
二、我是谁,为什么这件事对我重要
我是一名前端开发,日常维护一套内容批量生成 + 流转的系统,写这类「组合 + 评分 + 筛选」的逻辑不算陌生。
说实话,一开始我并没有想过要用 AI 来搞这件事。
我当时的真实心态是:这是我自己的代码,我最了解它,我调一调参数、加个权重、再跑一遍看看分布,大概率就平了。而且这类「感觉不太对但说不清哪不对」的问题,我觉得很难跟别人——或者跟 AI——讲清楚。它需要的是直觉和上下文,不是代码。
后来我之所以还是打开 TraeCode 试了试,理由很朴素:
我已经肉眼看了两遍代码,啥也没看出来。再这么耗下去,我付出的时间成本比「试一下」高得多。
三、我是怎么把 TraeCode 慢慢用顺的
这里是我这次最大的收获:同样的工具,我前后用了两种完全不同的问法,效果差了一个量级。
第一阶段 · 我让它帮我改代码
我最开始的问法非常典型,我猜很多人也是这么开的:
“这是我评分逻辑的代码,素材用量不均衡,帮我优化一下。”
它确实很快给了修改方案:加权重、做归一化、引入惩罚项。看起来很专业。
但我越看越不对——它是在优化「分数」这件事,而我的问题根本不是分数不够准。
这次对话的收获是零。不是它答得不好,是我问得太粗,把「现象」直接翻译成了「改代码」,中间缺了最关键的一环:根因。
第二阶段 · 我让它先别改,先跟我一起看数据
我换个思路,不再提「优化」,而是把现象本身原样丢给它:
-
多组素材,每组若干个,做笛卡尔组合后按分数筛选
-
跑完 1000+ 个结果,统计每个素材被使用的次数
-
其中一个素材只用了 3 次,同组其他的用了 24、25 次
-
评分函数用的是「方差最小化」——倾向于让每次组合的质量尽量稳定
然后我问:
“从评分策略的角度看,什么样的打分方式会导致这种分布?”
这一步是关键转折。 它一下就从「写代码模式」切到了「分析模式」,直接指出:
方差最小化的本质是求稳——它会系统性地偏好「每次都选那几个表现稳定的高分素材」,因为这样方差最小。
而那个只用了 3 次的素材,很可能是「某些组合里表现极好、某些组合里拖后腿」的类型,对它来说就是不稳定因素,会被持续压低优先级。
所以问题不在参数,在评分目标本身就和「用量均衡」这个诉求是冲突的。
看到这段的那一刻我是有点懵的——因为它指出的问题,我调一百次参数都调不好。
第三阶段 · 让它给方案,而不是让它直接动手
根因清楚了之后,我没有让它直接改,而是让它基于这个根因给几种不同的评分策略,并且说清楚每种的代价。
它给了几个方向,其中一个是把评分从单目标改成多目标:同时看「这批组合里质量上限怎么样」「整体质量总和怎么样」「最差的那个有多差」,用一个组合式评分替代单一方差。
我最后选了这个方向。上线之后,素材用量从 3 次 vs 25 次 收敛到了基本持平,整批产出质量没有下降。
四、最后做成了什么,以及我留给后来人的一句建议
最后我修掉的不是一行代码,是一个错误的评分目标。
改动本身不大,但如果没有先把根因挖出来,我大概率还在那儿调权重、加惩罚项,然后困惑于「为什么加了还是不平」。
如果只能留一句建议,我想说的是:
当你觉得 AI “答非所问"的时候,先别急着换模型、也别急着加更多上下文,先检查一下你给的是"现象"还是"你已经替它做好的结论”。
我的失败问法:“帮我优化这段评分代码”——我把"需要优化"这个结论塞给了它,它只能在这个框架里打转。
我的成功问法:“这里是数据和现象,你觉得什么样的评分策略会导致这种分布?”——我把问题还给了它,它才真正用上了推理能力。
我现在养成的三个习惯
-
先贴现象,不贴结论。 数据长什么样、你观察到了什么反常,原样描述,别急着翻译成"帮我改 X"。
-
让它先分析,再动手。 明确说一句 “先别改代码,先帮我分析可能的原因”。这句话能省掉大量无效改写。
-
要方案对比,不要唯一解。 问 “有哪几种思路,各自代价是什么”,你才有选择权;直接要"最优解",你只能接受或拒绝。
P.S.
这套问法现在也成了我的默认工作流:遇到说不清的 bug,先花十分钟把「现象」整理清楚丢给它,让它帮我做第一轮假设排除。
很多时候它给的不一定是最终答案,但它能帮我把**「我盯着代码发呆」变成「我有两个方向可以去验证」**——这个转变本身就值回票价了。