测试/试验

关于主测试台上各项测试的通俗易懂的说明。点击每个列标题旁的“i”图标即可查看相应说明。这些测试代码均位于开源项目 CrucibleForge 中;本页面仅从宏观层面介绍它们所测量的内容。若某项测试提供了公开的示例题目,点击其对应的卡片即可查看。

这些测试衡量什么

总计

总分等于代码得分与聊天得分之和。在标准测试中,每项满分均为10分,因此理论上的最高分为20分。奖励包(详见“奖励套装”部分)可在此基础上增加额外分数,故模型的总分有可能超过20分;在此测试套件中,使用所有奖励包后,代码得分最高可达13,聊天得分则最高可达15。每行中的进度条会延伸至该理论最大值,并在标准测试结束处标有标记。未经过审查的测试拥有独立标签页且不会计入总分。“总分”旁的±数值代表基于测试用例进行自助法抽样后所得90%置信区间的一半宽度;若两个模型之间的差值小于此数值,则它们在统计学意义上可视为水平相当。

聊天

该聊天测试主要考察角色扮演及对话互动能力,而非一般的辅助性功能。它会执行 8 轮多回合对话:包括充满背景故事的角色扮演、与“同伴”的闲聊、能变换多种声线的角色互动,以及需要共同创作的故事情节。每轮对话都会检验模型是否能记住先前植入的信息、能否接受修正意见、能否保持角色的语气与视角,以及能否遵循复杂的写作规则。另有一个名为 Gemma 4 31B (uncensored “heretic” build, Q8) on our own GPU rig 的评分模型,会依据预设的检查清单对回复进行打分;其余情况则依照纯文本规则处理。回答问题或执行一次性指令的行为在此不会被计分。若能完美完成所有标准测试题,则可获得10分;若使用奖励包,分数还可进一步提升,本套测试中最高可得 15 分。

GitHub上的完整说明

聊天:示例问题

来自开源测试集的几个真实案例,已简化。

  1. 能让群聊内容在数周内保持连贯性

    User (Fri 6 Nov) Evening, Hettie. Day off. I did nothing at all until two o'clock and I regret nothing. Biscuit and I sat at the window watching the park like two old men on a bench. The flat's mostly sorted now. One odd thing though. Biscuit goes out fine in the morning, but when we get back in he just flops down by the front door, and in the evening he won't go out for his walk at all. He's gone a bit off his food as well.

    评分方式: 一个评判模型会对关于回复的12个是非题进行作答,同时还会核对13条纯文本规则。

    在 GitHub 上查看此案例

  2. 饰演三个角色,每个角色都有自己独特的嗓音

    User The door of the Lamp and Ladle bangs open on wind and rain. Daro Kessen, thirty, a river-guild assessor with a satchel of papers under his oilskin, shakes the water off his hat and looks at the three people at the table by the stove. "Evening. Daro Kessen, river guild. I'm here about your toll-ledger. I gather it went missing three nights ago? …

    评分方式: 一个评判模型对关于回复的10个是非题进行作答,同时还有11条纯文本规则需要被校验。

    在 GitHub 上查看此案例

  3. 在多重限制条件下共同创作一个故事

    User Hi! Let's write a short story together, one section per message. Ground rules for the whole piece: first person, past tense; the narrator is Wren Adair, 34, a piano tuner. …

    Several turns later

    User One more author's change, from here to the end: the Hales live on a houseboat moored on the canal, not in a flat. Don't use the word "flat" again, in any sense, and call it the boat. Earlier sections stay as they are. …

    评分方式: 一个评判模型会对回复回答5个是非题,同时还会检查25条纯文本规则。

    在 GitHub 上查看此案例

GitHub上的完整说明

代码

该代码测试涵盖了编写可运行的 Python 函数、预测程序的输出结果、查找并修复错误、版本控制相关操作以及工具的使用。答案需通过隐藏测试才能得分,因此最终得分反映的是代码的实际运行效果,而非代码表面上的正确性。完美完成所有标准题目可获得 10 分;若完成额外奖励任务,则可在此基础上继续加分,本套题的最高得分可达 13 分。

GitHub上的完整说明

代码:示例问题

来自开源测试集的几个真实案例,已简化。

  1. 计算带有自定义周末的工作日

    def workday_intl(start, days, weekend=1, holidays=()):
        """
        Implement `def workday_intl(start, days, weekend=1,
        holidays=()):` in the spirit
        of a spreadsheet WORKDAY.INTL function, with exactly these
        rules:
    
        - Dates are strings of the exact shape `YYYY-MM-DD` (ASCII
        digits, a real
          calendar date). `start` and every holiday must be valid, else
        ValueError.
          The result is a date string of the same shape.
        - `days` is an `int` (not `bool`), else ValueError. …
        """

    评分方式: 隐藏的单元测试(16组,共35项检查)

    在 GitHub 上查看此案例

  2. 能准确预测 Python 代码片段的输出结果

    # Q1: shared basket (Python 3.13) - what does it print?
    class Basket:
        items = []
        count = 0
    
        def add(self, thing):
            self.items.append(thing)
            self.count += 1
    
    a, b = Basket(), Basket()
    a.add("milk")
    b.add("eggs")
    b.add("tea")
    Basket.count = 10
    print(a.items, a.count, b.count, Basket.count, Basket().count)

    评分方式: 8个预测输出完全匹配

    在 GitHub 上查看此案例

  3. 在一个bug报告中发现了两个bug

    Bug report: "I have 750 g of flour, the bread recipe needs 1.25 kg, and the shopping list tells me to buy the whole 1.25 kg. Also, after I bought another 500 g and added it, the pantry shows 500 g of flour instead of 1250 g." tests/test_shopping.py::test_partial_stock fails too.

    Find the causes and fix them so the package does what README.md says.

    评分方式: 隐藏的单元测试(4个组:转换、添加、购物、现有)

    在 GitHub 上查看此案例

GitHub上的完整说明

奖励套装

对于每个类别而言,完美完成所有标准题目可获得10分。如果模型在某个部分获得了至少90%的得分,它便有资格挑战该部分的更难的奖励关卡;成功通关后还能解锁下一个关卡。每个奖励包本身也值1分,因此一个类别的最高得分可达10分。实际上,一个类别所能获得的最高分数就是10分加上所有奖励包带来的加分总和——每新增一个奖励包,总分就会相应增加。每一行的详细信息中列出了各个奖励包:它们各自的分值,或者显示为“未解锁”。只有通过完成这些奖励关卡才能突破10分的限制,这样就能避免所有模型都只能得到满分的情况了。

规模是如何增长的

程序/软件

程序会给模型 6 个任务,每个任务都要求它根据一段包含诸多陷阱的详细描述来编写一个 Python 函数(涉及日期处理、四舍五入、文本排版以及日程安排等内容)。该答案会在沙盒环境中接受一系列隐藏的单元测试;得分则取决于通过测试的组别比例。因此,即便答案只是基本正确,也能获得部分分数。

GitHub上的完整说明

程序/软件:示例问题

来自开源测试集的几个真实案例,已简化。

  1. 将文本排列为固定宽度的行

    def wrap(text, width):
        """
        Implement `def wrap(text, width):` that lays `text` out into
        lines of at most
        `width` characters and returns them as a list of strings.
    
        Rules:
    
        1. `width` must be an `int` >= 2, otherwise raise ValueError.
        2. Whitespace means exactly these four characters: space, tab,
        `\r`, `\n`.
           Every other character (including non-breaking space U+00A0)
        is part of a
           word. Words are maximal runs of non-whitespace characters.
        3. …
        """

    评分方式: 隐藏的单元测试(15组,共28项检查)

    在 GitHub 上查看此案例

  2. 四舍五入的方式与电子表格相同

    def sheet_round(func, number, *args):
        """
        Implement `def sheet_round(func, number, *args):` — six
        spreadsheet rounding
        functions with exact decimal arithmetic.
    
        Numbers (`number`, a multiple, a significance) are given as an
        `int` or as a
        `str` decimal: optional `-`, one or more digits, optionally `.`
        and one or more
        digits (`"-0.125"`, `"12"`, `"007.50"`). Floats, bools and other
        shapes raise
        ValueError. `digits` and `mode` are `int`s (not `bool`). …
        """

    评分方式: 隐藏的单元测试(15组,共44项检查)

    在 GitHub 上查看此案例

  3. 在多台机器上分配任务,以实现总体最优效果

    def best_plan(tasks, k, gap=0, machine_cost=0):
        """
        Implement `def best_plan(tasks, k, gap=0, machine_cost=0):` that
        returns an `int`.
    
        - `tasks` is a list of `(start, end, value)` tuples of ints with
        `start < end` and
          `value >= 1`. There are `k` identical machines (`k >= 1`).
        - A machine runs one task at a time. On the same machine, a task
        `y` may run after
          a task `x` only if `y.start >= x.end + gap` (`gap` is an int
        >= 0). …
        """

    评分方式: 隐藏的单元测试(14组,共72项检查)

    在 GitHub 上查看此案例

GitHub上的完整说明

代码库

代码库展示了一些日常编程中常用的 Python 和 JavaScript 代码片段——这些就是应用程序中常见的辅助代码。系统会询问每段代码的输出结果是什么。共有 2 组代码,每种编程语言一组。所有预测结果都必须与实际情况完全吻合才算正确。这个测试旨在考察用户对各种编程语言特性的了解程度(比如默认设置、排序规则、四舍五入方式以及逻辑判断规则),而非考察编写新代码的能力。得分则代表预测正确的结果所占的比例。

GitHub上的完整说明

代码库:示例问题

来自开源测试集的几个真实案例,已简化。

  1. 预测 Python 代码片段的输出结果

    # Q1: shared basket (Python 3.13) - what does it print?
    class Basket:
        items = []
        count = 0
    
        def add(self, thing):
            self.items.append(thing)
            self.count += 1
    
    a, b = Basket(), Basket()
    a.add("milk")
    b.add("eggs")
    b.add("tea")
    Basket.count = 10
    print(a.items, a.count, b.count, Basket.count, Basket().count)

    评分方式: 8个预测输出完全匹配

    在 GitHub 上查看此案例

  2. 预测 JavaScript 代码片段的输出结果

    // Q1: sorting quantities (Node 24 (ES module)) - what does it print?
    const qty = ["10", "9", "1", "25"];
    console.log([...qty].sort().join(","), qty.map(parseInt).join(","), qty.map(Number).sort().join(","));
    console.log([3, 20, 100].sort().join(","), [3, 20, 100].sort((a, b) => b - a).join(","));

    评分方式: 8个预测输出完全匹配

    在 GitHub 上查看此案例

GitHub上的完整说明

代理人/中间人

代理向模型提供一个关于一个小型多文件项目的bug报告,以及编码助手所使用的工具:列出、读取和搜索文件,编辑文件并运行测试。这是一个单一任务(套件中的1),因此一次运行就能使该列的数值显著提升。修复后的项目会通过运行其测试来进行评分。

GitHub上的完整说明

代理人/中间人:示例问题

来自开源测试集的几个真实案例,已简化。

  1. 在一个bug报告中发现了两个bug

    Bug report: "I have 750 g of flour, the bread recipe needs 1.25 kg, and the shopping list tells me to buy the whole 1.25 kg. Also, after I bought another 500 g and added it, the pantry shows 500 g of flour instead of 1250 g." tests/test_shopping.py::test_partial_stock fails too.

    Find the causes and fix them so the package does what README.md says.

    评分方式: 隐藏的单元测试(4个组:转换、添加、购物、现有)

    在 GitHub 上查看此案例

GitHub上的完整说明

工具

“工具”测试用于检验模型能否正确调用工具。每个测试用例都模拟了一次与工具的完整交互过程:模型必须选择正确的工具、提供有效的参数、运用返回的结果,同时还要避开测试设置中特意设置的陷阱。任何格式错误的调用均被视为失败。

GitHub上的完整说明

工具:示例问题

来自开源测试集的几个真实案例,已简化。

  1. 检查在时钟调整前后的取货时间

    User Book a pickup for my mother, Maria Sousa, at Lisbon airport on Sunday 25 October. …

    User Her mobile is +351 912 345 678.

    User Her husband Joao Sousa is on TP1351 with her but his phone is broken - book him a pickup too, same place and time …

    Several steps later

    User Finally: Maria might switch to the earlier TP1349 instead, so book her a second pickup for that flight too, just in …

    评分方式: 预设的6步交换流程:每个工具调用、其参数及回复均经过检查

    在 GitHub 上查看此案例

  2. 根据工具的反馈计算出预订截止时间

    User Book a room at Harbour Inn Bergen (hotel BGO-2) for two nights from Friday 13 November for me, Ola …

    User Jonas really does sleep in the cot, so switch us to R-412 - it's cheaper, and the hotel's own note on …

    User OK, we stay in R-509. Until when can we still cancel this Bergen booking for free?

    Several steps later

    User Then just move that Oslo booking to the weekend of 4 December instead.

    评分方式: 预设的11步交换流程:每次工具调用、其参数及回复都会经过检查;包含禁止内容的回复会被判定为无效。

    在 GitHub 上查看此案例

  3. 预订前请选择合适的日期和年龄组

    User Please sign my son Leo Brandt (born 7 November 2021) up for this term's Saturday class at Northpool - the earliest …

    User Lovely. What time does his class start, and is anyone else still able to get a spot in it?

    User Hm, he's still only four, so the Minnows would suit him better - move him to the 09:45 Minnows. …

    Several steps later

    User His sister Mia Brandt, born 3 March 2019, wants a Saturday class at Northpool too - the earliest one she can join …

    评分方式: 预设的8步交互流程:每个工具调用、其参数及回复均会经过检查

    在 GitHub 上查看此案例

GitHub上的完整说明

令牌/符号

“tok/s”表示模型在运行过程中生成文本的平均速度。本地模型是在我们自己的硬件上运行的,因此这些速度值可以相互比较。而托管模型的速度则取决于服务提供商的负载情况,所以只能将其作为一个大致的参考值。

运行成本

运行成本是根据服务提供商公布的定价来计算的:即每次请求所消耗的输入令牌与输出令牌的数量,其中也包括了“思考”过程中产生的令牌。该计算方式适用于标准的代码测试与聊天测试。不过,它并未计入奖励性套餐、重试次数、评估环节(该环节是在我们自己的硬件上运行的),以及任何缓存或非高峰时段的折扣优惠。因此,这个数值基本上就相当于您按标价所需支付的费用。符号“~”表示该服务提供商并非按令牌数量计费(而是采用固定收费模式),所以我们便按照标价来估算其成本。符号“*”则表示有些请求返回的结果中并未包含使用数据,因此实际数值可能偏低。此外,服务提供商的内容过滤机制可能会拦截某些回复;表格中会显示被拦截的回复数量,而每条被拦截的回复的得分均为零。

类别/分类

“等级”功能是一种快速对模型进行分类的方法:分为S、A、B和C四个等级,其中S级为最高等级。每个等级的划分标准在表格下方的说明中有详细说明。如果某个模型的聊天评分不完整,则该模型既没有总评分,也没有对应的等级。

精简/简化

Lean会将模型的聊天得分和编程得分分别与榜单上的中位数进行比较。如果模型在某一方面明显优于另一方,则会被标记为“偏重聊天”或“偏重编程”;否则则视为平衡型。所需的差距大小则在榜单下方的说明中有提及。

套间/套房

该套件即是用于生成评分的测试集版本。当测试内容发生变动时,模型会重新运行,而旧的测试集则被保存在“以往套件版本”中。请仅在同一套件内比较评分。

测试日期

测试日期即模型在此测试板上得出结果的当天。后续重新运行模型时,显示的则是更新的日期。

基于……构建

“精细筛选”功能会保留基础名称,且不会因“仅显示最新版本”选项而被隐藏。该选项默认处于启用状态;当同一系列中存在更新版本的软件时,它便会隐藏该供应商的旧版本。在筛选框中输入基础名称,例如“gemma 4”,即可列出所有基于该基础名称构建的软件。

数量

“量化”指的是对本地模型权重进行压缩的格式。Q8_0的精度接近全精度模型,也是本测试板所使用的标准量化方式;精度更低的量化方式虽然能提升运行速度且适用于显存较小的GPU,但可能导致模型性能下降。只有在Q8_0无法满足硬件要求时,我们才会选用Q6或Q5;不过我们绝不会使用低于Q5的量化方式。那些采用低于Q5的量化方式且得分较低的模型仍会保留在测试列表中,并标注为“低于Q5”;只有当这些模型的表现优于其他模型时,才会以标准量化方式重新进行测试。若同一组权重分别经过两种不同量化方式的测试,则仅排名较高的模型会被记录;另一模型则作为变体形式列在其下方。所谓“API”,指的是由服务商以任意形式提供的托管式模型。

打开主工作台 这里的每个分数都是计分板上的一列。