跳到主内容
创建时间:最后更新:作者:白川

在质量、时延与预算之间选择配置

用明确质量门槛比较时延与成本,区分缺失指标、预算超限和真实费用上限。

在质量、时延与预算之间选择配置

把更便宜的模型接上后,单次用量下降了,但失败和重试增加,整个任务可能反而更贵。选择配置时,应先定义可接受质量,再比较同条件任务的时延与全部尝试消耗。

这篇不重复搭建计时器,使用前面评测记录的运行结果。计时与用量的采集细节见调试模块,这里关注这些数值能否支持选择。

独立示例位于仓库 columns/coding-agent/examples/evaluation-optimization/,固定 Pi 相关依赖为 1.5.0。先在该目录执行 npm install,下文命令也从此处运行。离线样本不需要密钥;真实模型入口另行配置,不会由测试自动触发。

用门槛表达约束,而非随意加权

src/budget.ts 先检查覆盖率,再检查质量、时延与成本。缺失预算时返回 review,不能因为没有数据就认为免费。

ts
export interface DecisionInput {
  passRate: number | null
  scored: number
  planned: number
  meanMs?: number
  costKnownTotal: number | null
  costAvailable: number
}

export function decide(
  row: DecisionInput,
  policy: { minimumPassRate: number; maxMeanMs: number; maxCost: number },
) {
  if (
    !Number.isSafeInteger(row.planned) ||
    row.planned < 1 ||
    row.scored !== row.planned ||
    row.passRate === null ||
    row.meanMs === undefined ||
    row.costKnownTotal === null ||
    row.costAvailable !== row.planned
  ) {
    return { decision: "review", reason: "样本或预算指标不完整" } as const
  }
  const numbers = [
    row.passRate,
    row.meanMs,
    row.costKnownTotal,
    policy.minimumPassRate,
    policy.maxMeanMs,
    policy.maxCost,
  ]
  if (
    numbers.some((value) => !Number.isFinite(value) || value < 0) ||
    row.passRate > 1 ||
    policy.minimumPassRate > 1
  ) {
    throw new Error("质量或预算数据无效")
  }
  return row.passRate >= policy.minimumPassRate &&
    row.meanMs <= policy.maxMeanMs &&
    row.costKnownTotal <= policy.maxCost
    ? ({ decision: "eligible", reason: "符合当前教学门槛" } as const)
    : ({ decision: "reject", reason: "未满足质量或预算约束" } as const)
}

调用方给出的 minimumPassRate、maxMeanMs、maxCost 都是当前实验策略,没有通用最佳值。四个任务上的平均时延也不足以表达尾部体验;更成熟的评估需要样本量、分位数与按任务分类的分布。

eligible 只表示符合这组教学门槛,不代表自动批准发布或对所有用户都最优。若某个关键任务不允许退步,应另设逐任务硬约束,而不能靠总体平均分掩盖。

先说明每一笔费用对应什么

口径应包含什么容易遗漏
请求尝试成本
已发送的每次调用
失败请求、重试和缓存计价
任务成本
完成该任务的全部尝试与子调用
只看最终成功响应
评测成本
所有 arm 和评委
模型 judge 独立调用
成功任务成本
总消耗与成功任务数量
丢弃失败消耗后的虚低数字

真实服务未返回用量时要标缺失。价格由模型目录估算也不等于账单,还可能受缓存、分层价、服务端计价和协议支持影响。本例 live 报告未填 estimatedCost,因此默认不能通过需要完整费用的预算筛选。

模型与思考配置需要同条件比较

当前 live 比较固定同一个模型并使用 thinkingLevel=off,主要观察 prompt/tool/context。若要比较模型或思考等级,应作为新的实验因素,记录各自支持范围和实际生效值,不能把旧实验的模型标识偷偷替换后继续沿用协议。

不应只选一组简单任务证明更小配置够用。针对长上下文、错误恢复和多步操作保留代表任务,比较质量门槛是否仍满足,再决定是否路由或设置备用模型。

本地预算是软停止

运行器默认每任务等待三十秒、观察最多四回合与六次工具调用。达到条件后取消,并在下一次模型请求边界再检查,避免不遵守信号的模拟流无限继续。

工具开始事件发生时,相关调用可能已经进入执行链;已发出的请求也可能继续计费。AbortSignal 是协作机制,不提供精确金额硬上限。真硬约束需要服务端额度、独立进程超时等可执行边界,且仍应说明外部副作用不能自动回滚。

预算超限应怎样进入报告

预先声明的预算被耗尽,可以作为任务约束失败记录为 state=scored、passed=false,保留在分母中;连接异常或评测适配器坏掉则可能无法判定,应阻止 headline。

这两种状态分开后,才知道是配置效率不够,还是评测环境不能支持结论。不要靠延长所有超时、跳过异常样本或反复重跑到成功,让预算比较失去原本含义。

依据与版本

官方本地快照为 8efd314fa,evals 包标记 1.3.0;本系列示例另按发布包 1.5.0 核验。官方 evals 是 private 工作区包,教程使用自定义教学协议,不冒充稳定公共评测 SDK。