评估决策
衡量质量与成本。
评估决策 是 CoddyKit 上的免费 AI Prompt Engineering 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Prompt Engineering 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Prompt Engineering 课程共包含 4 节课。
无法测量,就无法决策
提示词方案、调优方案还是混合方案,最终选得好不好,取决于背后的评估。没有冻结的评估集和成本模型,任何比较都只是 anecdote。
- 质量和成本是两个维度——绝不要过早将它们压缩成一个数字
- 在您比较的每种方案中,评估集都必须留出且保持稳定
- 在您的约束条件下,位于质量—成本前沿最佳点的方案才是胜者
先构建冻结的评估集
在比较任何方案之前,先构建一个所有方案都不会用于训练的留出评估集。它必须覆盖真实的数据分布:常见情况、已知边界情况和对抗性输入,并且大致符合生产环境中的比例。
冻结这个评估集。仅提示词方案、调优方案和混合方案都必须在完全相同的数据集上评分。如果评估集在比较之间发生变化,所得数字就无法比较,决策也就无效。
def split_eval(labeled, holdout_ratio=0.2, seed=42):
import random
rng = random.Random(seed) # fixed seed = reproducible split
data = labeled[:]
rng.shuffle(data)
cut = int(len(data) * (1 - holdout_ratio))
train, frozen_eval = data[:cut], data[cut:]
return train, frozen_eval # eval never enters any training run选择与任务匹配的指标
通用准确率会掩盖任务特有的失败情况。请选择能够反映真正重要事项的指标:
- 结构化输出使用精确匹配/模式匹配
- 开放式质量使用依据评分标准的 LLM 评审,并配合人工审核的样本
- 尾部指标——关注最坏情况和 p95,而不仅是 mean(均值)
- 将安全率/拒答率作为硬性门槛,并与质量分开评分
如果 mean 隐藏了灾难性的尾部表现,就会把您引向错误的决策。
以完全相同的方式评估每个候选方案
使用同一个评分器,在同一个冻结的评估集上运行仅提示词方案、调优方案和混合方案。为每个方案记录质量以及完整的成本向量,确保比较公平准确。
def evaluate(candidate, frozen_eval, scorer):
results = []
for ex in frozen_eval:
out = candidate.run(ex['input'])
results.append(scorer(out, ex['label']))
mean = sum(results) / len(results)
p95 = sorted(results)[int(0.95 * len(results)) - 1]
return {'mean': mean, 'p95_worst': p95}
# Identical frozen_eval + scorer for prompt / tuned / hybrid建立完整的成本向量模型
成本不是一个数字。请记录每个组成部分,使比较能够反映您当前调用量下的实际情况:
- 每次调用的推理成本:输入令牌数 + 输出令牌数,再乘以价格(提示词越长,每次调用成本越高)
- 分摊训练成本:将调优成本分摊到预期请求量上
- 维护成本:数据 pipeline、评估运行,以及基础模型频繁变更时的重新调优
- 延迟:当它影响转化率或用户体验时,应单独计价
def monthly_cost(calls, in_tok, out_tok, price_in, price_out,
train_cost=0.0, months_amortized=12):
inference = calls * ((in_tok/1000)*price_in + (out_tok/1000)*price_out)
amortized_train = train_cost / months_amortized
return inference + amortized_train
# Long prompt-only: high in_tok, train_cost=0
# Tuned: low in_tok, train_cost>0 amortized over volume绘制质量—成本前沿
对于每个候选方案,获得其质量和月度成本后,将它们放在前沿上。如果另一个候选方案同时拥有更高的质量和更低的成本,那么当前候选方案就属于被支配方案;请将其移除。
在非支配集合中,正确选择取决于您的约束条件:可以选择达到质量门槛的最低成本方案,也可以选择成本不超过上限的最高质量方案。此时决策是明确且有依据的,而不再只是个人偏好。
def non_dominated(candidates):
# candidate: {'name','quality','cost'} -- higher quality, lower cost better
keep = []
for c in candidates:
dominated = any(o['quality'] >= c['quality'] and o['cost'] <= c['cost']
and o != c for o in candidates)
if not dominated:
keep.append(c)
return keep统计显著性,而不是噪声
在包含 200 个样本的评估中提升两分,可能只是噪声。在宣布胜者之前,请确认根据评估规模来看,质量差距具有统计意义。
请使用配对比较(让相同样本分别经过两个候选方案),并计算差异的置信区间。如果区间跨越零,就不能认为存在真正的改进,调优所增加的成本也没有正当理由。
def paired_diff_ci(scores_a, scores_b):
import statistics
diffs = [a - b for a, b in zip(scores_a, scores_b)]
mean = statistics.mean(diffs)
sd = statistics.pstdev(diffs)
se = sd / (len(diffs) ** 0.5)
return (mean - 1.96*se, mean + 1.96*se) # if it spans 0 -> not significant防止评估泄漏
让调优看起来虚假地表现良好的最快方式,就是发生泄漏——训练样本与评估集存在重叠。发生泄漏的评估会奖励记忆能力,并抬高调优候选方案的得分。
跨越训练集与评估集的边界进行去重,检查近重复样本,并优先使用按时间分离的评估集(按日期留出),这样调优模型就不可能提前见过这些数据。泄漏是调优决策在生产中失败的最常见单一原因。
上线后进行监控
决策并不会在上线时最终确定。生产环境的数据分布会发生漂移,当输入逐渐偏离训练分布时,调优模型可能会在不易察觉的情况下退化。
- 抽取实时流量样本,并使用同一评分标准为其评分
- 当质量下降或单次调用成本上升时发出警报
- 每当基础模型版本发生变化,就重新运行冻结的评估
请将选定的方案视为一个需要持续测试的假设,而不是已经结束的决策。
决策记录
将比较结果记录为书面的决策记录:冻结的评估集、每个候选方案的质量和成本向量、显著性结果、假定请求量,以及前沿上选定的点和选择理由。
这样可以让选择过程可审计、可重新评估。当请求量或基础模型发生变化时,您可以重新打开记录并再次运行,而不必凭记忆重新争论。
端到端决策函数
将整个过程串联起来:在冻结的评估集上为每个候选方案评分,附加其成本,移除被支配的方案,要求其相对于最低成本基线具有统计显著性,然后根据您的关键约束进行选择。
def decide(candidates, quality_bar, cost_ceiling):
frontier = non_dominated(candidates)
feasible = [c for c in frontier
if c['quality'] >= quality_bar and c['cost'] <= cost_ceiling]
if not feasible:
return 'NO_CANDIDATE_MEETS_CONSTRAINTS'
# cheapest option that clears the quality bar
return min(feasible, key=lambda c: c['cost'])['name']
# Prefer prompt-only on ties: lower maintenance TCO快速检查
某调优模型在包含 150 个样本的评估中比提示词方案高 2 分,但差异的配对置信区间跨越零,而且它的月度成本更高。正确的决策是什么?
回顾
请根据冻结的评估集和真实的成本向量做决策,而不是凭直觉。质量和成本是两个维度;答案是在您的关键约束下,从质量—成本前沿上选出的一个点。
- 冻结一个评估集;让每个候选方案都以完全相同的方式在其上评分
- 选择与任务匹配的指标,并关注尾部表现,而不仅是 mean
- 建立完整的成本向量模型,并根据真实请求量分摊训练成本
- 要求统计显著性;跨越零的置信区间不代表存在改进
- 防止评估泄漏——这是虚假调优胜出的首要原因
- 上线后进行监控并记录决策,以便重新运行
常见问题解答
「评估决策」课时是免费的吗?
是的 — 「评估决策」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Prompt Engineering 课程的其余内容,请升级到 CoddyKit PRO。 AI Prompt Engineering 课程共包含 4 节课。
「评估决策」这节课中我会学到什么?
衡量质量与成本。 你通过在浏览器中直接运行的动手代码来练习 AI Prompt Engineering,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI Prompt Engineering 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI Prompt Engineering 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「评估决策」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI Prompt Engineering 课中编写并运行代码吗?
能。每节 AI Prompt Engineering 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。