这是提交给Kaggle Benchmarking Challenge 的作品

我基准测试了什么

向 LLM 询问一个概念,你会得到一个自信、格式良好的列表。乍一看没问题,而这正是问题所在。一个列表至少可以以三种不同的方式失败,却看起来毫无问题:

  • 连贯性:各条目之间或与主题之间没有关联。它们是泛泛的要点,可以属于任何主题。
  • 精确性:你要求正好 5 条,却得到了 4 条,或 6 条。
  • 覆盖度:列表读起来很顺畅,却遗漏了某个核心内容。

我的基准测试,IdeaConnectionAccuracy,提出了一个简单的问题:不同的 AI 能多好地像人类一样连接想法?我为每种失败模式构建了一个小任务,使用kaggle-benchmarks并在多个模型上运行了它们。

任务 失败模式 评判器返回什么
judge if ideas connect 连贯性 按标准逐项通过/失败;必须全部通过
give max n ideas that connect to concept 精确性 三项标准:数量、相关性、格式
main topics related to concept 覆盖度 单个布尔值

任务

1. 这些想法能连接起来吗?

模型会得到一个主题(我用了 "sustainable urban development"),并且必须以项目符号列表的形式生成 3-4 个不同的想法。然后一个评判 LLM 检查两项标准:

  • 所有想法在逻辑上彼此相连,并且与主题相连。
  • 这些想法各不相同,但展现出清晰的主题连贯性。

这种聚合是刻意严格的。如果任何一项标准失败,整个任务就失败。没有部分得分。

@kbench.task(name="judge if ideas connect")
def judge_if_ideas_connect(llm, judge_llm) -> bool:
    ideas_response = llm.prompt(ideas_prompt)

    assessment = kbench.assertions.assess_response_with_judge(
        criteria=criteria,
        response_text=ideas_response,
        judge_llm=judge_llm,
    )

    if assessment is None:
        kbench.assertions.assert_fail(expectation="Judge LLM failed to return a valid assessment.")
        return False

    return all(result.passed for result in assessment.results)

2. 正好 N 个想法

这个任务是参数化的:concept和n是输入,模型必须返回正好n个编号的想法。评判器检查三件事:数量、每个想法是否与概念相关,以及列表格式是否清晰。

每项标准都成为它自己的断言。当模型失败时,结果会显示是哪项要求出了问题。"数量错误" 和 "想法跑题" 是非常不同的失败,而单一的通过/失败会掩盖这一点。

3. 一个概念的主要主题

模型被要求列出与某个概念“直接相关的所有主要主题”。评判模型给出一个 true/false 的判定,判断回答是否覆盖了全部主题。

我为这个任务显式处理了三种情况:评判模型没有返回任何内容、评判模型的输出无法解析为布尔值,以及任何其他意外错误。每种情况都会被记录为一次失败并附上原因。一个不稳定的评判模型不应该让整个运行崩溃,也不应该悄悄地被算作通过。

测试的模型

我针对来自四个实验室的四个模型运行了这三个任务:

  • Claude Haiku 4.5(Anthropic)
  • [GOOGLE MODEL NAME](Google)
  • [XAI MODEL NAME](xAI)
  • [OPENAI MODEL NAME](OpenAI)

我想要覆盖多个提供商和价格区间,因为我关心的问题不仅是“谁最好?”,还有“每个回答的成本是多少?”

评判模型是 [JUDGE MODEL]。[说明该评判模型是否也出现在测试阵容中。一个模型评判自己的输出可能会使结果产生偏差。]

发现

得分 vs. 总成本帕累托图

完整的排行榜在下方链接的基准测试页面上。这张图是改变我如何看待这些结果的那部分。

每个模型都得了 100 分,所以分数什么也没告诉我

四个模型都得到了相同的 100 分。我的基准测试在准确率上完全没有把它们区分开。在得分 vs. 成本图上,这会把整个图变成一条水平的直线,唯一还带有信息的轴就是成本。

在那个轴上,差距很大。从图的对数刻度上读取(近似值):

模型 得分 近似总成本
Claude Haiku 4.5 100 约 $0.009
xAI 100 约 $0.014
Google 100 约 $0.019
OpenAI 100 约 $0.056

在得分相同的情况下,最贵的模型成本大约是最便宜模型的六倍。用帕累托的话说,只有一个有效答案:达到上限的最便宜模型。

天花板效应对基准测试意味着什么

我把每个模型都拿到满分解读为对我的基准测试的一个警告,而不是这些模型在连接想法方面同样优秀的证据。有三个原因:

  • 任务太简单了。把 3-4 个想法与“可持续城市发展”联系起来,是任何当前模型都能完成的任务。
  • 评判模型太宽松了。覆盖度任务让评判者判断是否列出了“所有主要主题”,却没有可供核对的参考列表。没有标准答案的评判者倾向于说“是”。
  • 严格的通过/不通过掩盖了差异。勉强通过的模型和轻松通过的模型都得 100 分。

一个所有人都能轻松拿满分的基准测试并没有在衡量模型之间的差距。它已经饱和了,有用的下一步是把它变得更难,而不是庆祝。

我接下来会改什么

  • 让它更难。加入对抗性概念、更长的列表,以及那些看起来相关实则跨领域的想法,这样分数才有空间区分模型。
  • 给完整性一个标准答案。使用带有标准主题列表的概念(教科书章节列表、标准分类法),并据此评估召回率,而不是让评判者去猜。
  • 用代码来计数。“恰好 N 项”不需要 LLM。解析列表并计数更便宜、更快,而且从不出错。我会把评判者留给那些模糊的标准。
  • 衡量评判者一致性。用两个不同的评判者跑同一批回答,看看它们有多经常一致。
  • 变换输入。测试多个取值n(3、5、10、20)以及抽象和具体概念,找出每个模型的计数在哪里出问题。

我的基准测试

🔗IdeaConnectionAccuracy on Kaggle

感谢阅读。如果你对模型的行为有自己的困惑,kaggle-benchmarks能轻松把它变成一次测量。