前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
AI 热点
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
AI 面试
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
AI 热点
开发者导航
返回 AI 情报前线
All News · 全部资讯3825
  • NVIDIA开源NOOA框架:用Python类一体化构建AI Agent
  • Meta AI在网络安全测试中自主入侵外部系统
  • 程序员用Claude追踪蓝牙信号找回丢失手机
  • My Virtual Office v0.7.0:统一SDK对接主流AI Coding工具
  • 安全沙箱执行AI生成的JavaScript实战指南
  • AI瓶颈不在模型本身,而是系统架构
  • GPT-4o vs Claude vs Mistral:按任务类型的生产基准评测
  • LLM上下文窗口的真实有效范围远小于标称值
  • 近800个恶意npm包威胁加密生态的供应链安全
  • 322个AI Agent在API市场的真实消费行为数据公开
  • 131 个测试、4 层架构、每次运行 $0.03:我的 AI Agent 评测方案
  • Simon Willison 用 GPT-5.6 Sol Ultra 单次生成完整游戏
  • Supabase 四种密钥全解析:哪些可公开、哪些必须保密
  • 从 GitHub 外推脚本到平台无关的信号贡献引擎
  • Vercel AI Gateway 接入 200+ 模型,Hermes Agent 支持云端沙箱
  • 多 Agent 系统中测试结果可信度问题
  • 多模型动态路由策略:降低供应商锁定风险
  • 多 Agent 辩论框架:角色对立 + 批评探测 + 共识置信度
  • 混合搜索:BM25 与稠密向量 Reciprocal Rank Fusion 融合
  • 用评估矩阵和回归门替代 prompt 凭感觉调优
  • 用 pass-all-k 而非准确率衡量AI系统可靠性
  • OpenAI因安全顾虑暂停Astra模型发布
  • 我停止让GPT-5管理邮箱:工作流反而更便宜更好
  • AI Agent 治理失败实录:策略门控为何沦为空文
  • LLM 应用七大攻击面与防御层
  • 大规模 AI 编程成本控制实战指南
  • Copilot 使用量 API 新增 Agent 应用活动追踪
  • Meta推出编程Agent Muse Code:成本低但数据安全存疑
  • Coinbase、Shopify、Ramp自建编程Agent为何仍付费给Anthropic
  • AMD收购Taalas将AI模型直接刻入芯片
  • 我们如何用MCP协议让AI助手直接预订餐厅
  • DGX Spark六个月实测:营销数字在骗人,真实性能这样算
  • Agentic Coding未来五年将重塑软件工程
  • EU AI Act第50条内容溯源规范落地:实际可用的双层方案
  • MCP工具返回值格式实测:72次试验对比摘要行与原始时序数据
  • Oracle禁止在OpenJDK中使用AI生成代码
  • 人机交互场景下LLM低延迟推理工程实践
  • Anthropic Agent Skills 设计反思:Skill 不是 Capability
  • x402 协议实现可靠 Agent 支付的工程实践
  • DeepSeek涨价Claude Code烧钱:Dev成本控制三招
  • 2026年多AI编程智能体运行工具横评
  • AI智能体越界真相:一次34小时的真实攻击链复盘
  • Cohere Health基于Bedrock AgentCore的临床政策数字化实践
  • 生产级MCP服务器测试与调试指南
  • claude-crew:持久化多终端Claude Code智能体架构详解
  • TReNDS用Bedrock将根因分析从30分钟压缩到60秒
  • AI Agent访问控制架构:如何防止数据库被恶意篡改
  • AWS用约束规划自动计算NHL季后赛锁定条件,经验证四个赛季
  • AI Agent自动化开发者工作流:41%发布周期压缩实战
  • Token末日:Accenture 数据显示非工程师才是 token 消耗大户
  • Cloudflare 推出面向 AI Agent 的浏览器 Kitesurf
  • 已加载 51 / 3825
9.0
重磅
AI SCORE
编程提效2026-08-08 02:44

用 pass-all-k 而非准确率衡量AI系统可靠性

dev.to · AI#AI评测#可靠性#LLM
Editor brief · 编辑速览

提出pass-all-k指标衡量AI系统真实用户体验,比平均准确率更能反映实际故障率;通过60行Python代码实现可靠性测试框架,并指出任务形状聚类是可行动的改进方向。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

拿你已有的系统跑一下。

from collections import Counter

def pass_all_k(run, tasks, k=8):
    """run(task, variant) -> bool. Returns (pass_all_rate, mean_rate)."""
    all_pass, total = 0, 0
    for t in tasks:
        results = [run(t, variant=i) for i in range(k)]
        all_pass += all(results)
        total += sum(results)
    return all_pass / len(tasks), total / (len(tasks) * k)

返回两个数字。第二个是你仪表盘上看到的。第一个是用户实际经历的,因为用户没有"再试一次直到成功"的选项。

两者很少接近。在我测量过的系统里,平均值大约 0.85 时,pass-all-8 大约只有 0.45,而且这个差距从来没有反向出现过。

如果失败是独立的(失败率 p),pass-all-k 就等于 (1-p)^k,你就能直接算出来而不需要测量。但失败不是独立的——这才是关键。它们按任务类型聚类。

这种聚类才是可操作的部分。2026 年的一项可靠性研究在十个模型和 396 个任务的基准测试上运行了 23,392 个 episode,发现退化是领域相关的而非模型相关的:随着任务长度增加,软件工程的优雅退化分数从 0.90 降到 0.44,而文档处理几乎没动,从 0.74 到 0.71。

所以你 harness 的有趣输出不是那个数字,而是哪些任务在失败的集合里。

variant 函数是整个设计的关键

这是大多数自建 harness 犯错的地方。八个完全相同的调用测的是你的缓存。你需要八个真正不同的同一意图变体。

import random

REPHRASE = [
    lambda s: s,
    lambda s: s.lower(),
    lambda s: f"I need to {s[0].lower()}{s[1:]}",
    lambda s: f"{s} Please be thorough.",
    lambda s: s.replace("?", "").strip() + ", if you can.",
]

def make_variant(task: dict, variant: int) -> dict:
    rng = random.Random(f"{task['id']}:{variant}")  # deterministic
    out = dict(task)
    out["prompt"] = rng.choice(REPHRASE)(task["prompt"])
    if task.get("states"):
        out["state"] = rng.choice(task["states"])
    return out

用 task_id:variant 作为种子,而不是全局计数器。这样任务 7 的变体 3 跑出来的输入和上周一样——这就是"能跨版本对比的 harness"和"不能跨版本对比的 harness"之间的差别。

按任务记录,不要按运行记录

可靠性 harness 的失败模式是过早聚合。

import json, pathlib

def evaluate(run, tasks, k=8, out="reliability.jsonl"):
    fh = pathlib.Path(out).open("w")
    summary = Counter()
    for t in tasks:
        results = []
        for i in range(k):
            v = make_variant(t, i)
            try:
                ok = bool(run(v))
                err = None
            except Exception as e:  # a crash is a failure
                ok, err = False, f"{type(e).name}: {e}"
            results.append({"variant": i, "ok": ok, "error": err})

        rec = {
            "task_id": t["id"],
            "shape": t.get("shape", "unclassified"),
            "k": k,
            "n_pass": sum(r["ok"] for r in results),
            "pass_all": all(r["ok"] for r in results),
            "runs": results,
        }
        fh.write(json.dumps(rec) + "\n")
        summary[t.get("shape", "unclassified")] += rec["pass_all"]
    fh.close()
    return summary

shape 是那个值得下功夫的字段。给你的任务打上"它是什么"而非"哪个模型跑了它"的标签:lookup、multi_step、writes_state、long_horizon、needs_tool。按 shape 分组看失败,通常第一轮跑完模式就出来了。

异常算失败。一个只统计答案错误而让超时溜过去的 harness 会告诉你一个让你安心的谎言。

拿到失败集合后怎么办

2026 年的三项发现告诉你优先看哪里,每项都是你可以跑的一个检查,而非一个你需要相信的说法。

如果失败的 shape 是 multi-agent,测试一下 single-agent 版本。一项跨 180 个受控配置的研究发现,一旦单个 agent 在某任务上的准确率超过大约 45%,增加 agent 就开始产生负收益,而且独立 agent 相比 single-agent 基线放大了 17.2 倍错误,而集中式协调将其控制在 4.4 倍。读密集型工作可以并行。写密集型工作不行,因为两个 agent 写就会产生两个没人协调的决策。

如果失败的 shape 是 long-horizon,不要以为更好的模型能解决它。同样的可靠性研究:能力和可靠性排名出现了分化,高级模型展现了高达 19% 的崩溃率,原因是它们尝试了更困难的多步骤策略。

在你提高推理 effort 之前,先测量它。在 21,730 次 rollout 中,更高的推理 effort 在 21 个模型和基准组合的 36 种组合中产生了相等或更低的准确率。这是一个需要按任务调的参数,有真实的负面影响,不是质量旋钮。用相同的种子集跑三个 effort 级别只要一个下午。

for effort in ("low", "medium", "high"):
    pa, mean = pass_all_k(lambda t: run(t, effort=effort), tasks, k=8)
    print(f"{effort:<7} pass_all={pa:.2f} mean={mean:.2f}")

注意 mean 上升而 pass_all 下降的情况。那是一个系统平均变好但可靠性变差的情况,如果你只跟踪其中一个,这种变化是看不见的。

保持便宜,否则一个月内会被删掉

- name: reliability
  run: |
    python -m harness --k 8 --tasks tasks/core.jsonl --out reliability.jsonl
    python -m harness.gate --min-pass-all 0.60 --baseline main.jsonl

两条规则让这个东西在我待过的团队里存活下来。用相对上一次运行的回归做 gate,而不是用绝对阈值,因为绝对数字第一次拦住发布时就会被往下调。在 PR 上跑 k=3,而完整 k 每晚跑一次,因为二十分钟的 pre-merge 检查会被关掉。

k=8 是任意的。它足够大,让运气不能再带你过关;又足够小,人们真的会去跑。如果 5 是能完成的数字,那就用 5。

variant 函数编码了你对"同一个请求"的假设,合理的人会有不同意见。这是好事:它把争论推到了代码评审里,而不是事故发生之后。

而且这测的是可靠性,不是正确性。一个八次全挂的任务是完全可靠的,但完全错误。你仍然需要断言。

这些都不是新想法。任何运行过支付系统或数据库的人已经在用"最差请求"而非"平均请求"来思考了。我们停止这样做是因为系统开始听起来很自信。

Sources: arXiv 2603.29231 (31 March 2026, 23,392 episodes); arXiv 2512.08296 (December 2025, 180 configurations); arXiv 2510.11977 (ICLR 2026, 21,730 rollouts).

如果你已经在测量类似的东西,我想知道你的 variant 函数做了什么。这一块还没有 established 的惯例,我猜每个人都悄悄自己发明了一套。

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
用评估矩阵和回归门替代 prompt 凭感觉调优
下一篇
OpenAI因安全顾虑暂停Astra模型发布