0Pricing
AI Prompt Engineering · 课时

评估决策

衡量质量与成本。

评估决策 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 何时只需提示
  2. 何时进行微调
  3. 混合方案:提示加轻量调优
  4. 评估决策
← 返回 AI Prompt Engineering