CrucibleForge 的工作原理:一个开源大语言模型基准测试详解

发布日期
2026年11月7日
作者
Jacob Lloyd —— 项目完成后,在 AI 协助下撰写
阅读时长
约 13 分钟阅读

简单来说: CrucibleForge 是一款免费工具,用于评估语言模型在编写代码及进行对话方面的能力,最后给出评分结果。它既可在你本地的模型上运行,也可通过第三方公司的 API 来调用。本页面详细说明了测试流程的五个步骤、各类测试的具体内容、评分机制以及仅需几条命令即可自行部署的方法。

CrucibleForge 是一个开源的语言模型基准测试工具。你只需指定要测试的模型,它就会执行一系列预设测试、对输出结果进行评分并生成报告。MakoBench 是我们公开的评分排行榜,上面的所有数据均源自此工具。你也可以利用它来测试自己的模型。该工具完全免费且采用 MIT-0 许可协议,使用没有任何限制。

简而言之:

  • 共五个模块。 分别是待测模型、环境检查、测试执行、评分器以及最终得分。
  • 代码类任务由实际运行结果来评分;对话类任务则由一个“评判模型”根据是/否选项列表进行打分。
  • 综合得分是代码得分与对话得分之和。 涉及不适宜公开内容的测试会单独计分,且不会计入总分。
  • 它兼容任何遵循 OpenAI 接口规范的端点。 无论是本地搭建的服务器还是第三方 API,只需将密钥设为环境变量即可使用。
  • 大约十分钟就能完成配置并运行起来。 运行该工具的机器甚至无需配备 GPU。

五个环节

这就是整个工具的工作流程,你需要按照这个步骤来使用它。每个环节各司其职,并将结果传递给下一个环节。

  1. 你的模型。 CrucibleForge 能够对接任何兼容 OpenAI 聊天接口的模型。无论是你自己搭建的本地服务器,还是第三方提供的托管式 API,都能顺利配合工作。
  2. 合规性检查。 不同服务商对请求格式的要求略有差异。在对模型开展测试前,我们会通过七次简单的调用来验证工具能否正确与其通信:包括返回正确的模型 ID、确保推理响应符合预期、让上下文信息在多次交互中得以保留、验证工具调用流程是否畅通、确认采样器设置被顺利接受、保证中等长度的编程任务不会超出令牌预算限制,而对于托管式服务而言还需核实其相关文档是否在最近 120 天内更新过。一旦检查未通过,该模型就不会进入后续测试环节——因为基于错误请求得出的分数只能反映工具本身的缺陷,而非模型的真实水平。
  3. 测试运行器。 它会将各类测试用例并行发送给模型(数量上限取决于服务器的承载能力),同时完整记录下所有的输入提示与对应输出结果。
  4. 评分机制。 针对每种类型的响应,系统都会采用最匹配的评分方法加以判定。具体规则详见下一节内容。
  5. 最终得分与输出。 各类评分值分别汇总为代码得分、对话得分以及总分,且每个数值均带有一定的容差范围;工具最终会生成一份报告文件。对于我们而言,这些结果会被同步至 MakoBench 排行榜中;对你来说,则是一个可直接用浏览器打开的 report.html 文件。

简单来说,这些测试究竟测什么

总分由两部分组成,完成所有标准测试就能各得10分。两者相加后总分就是20分。如果模型在某一部分的得分达到90%或更高,就能解锁难度更高的奖励题库,只有这样才能突破10分的限制。每个测试版本都有固定的最高分上限;新题库的出现也会相应提高该上限。

代码能力:能否编写并理解程序?

  • 函数编写(5分)。 根据描述编写Python函数。隐藏的单元测试会在沙盒环境中运行。得分依据是通过测试组的数量占比。
  • 预测与排错(2.5分)。 准确说出一段简短程序的输出结果,随后找出并修复小项目中的错误。答案需完全吻合或通过实际运行验证修复效果。
  • 工具调用能力(2.5分)。 模型需在预设对话中正确调用各类工具,同时还需应对诸如调用了错误工具或参数有误等陷阱。

这一切都不需要主观判断。代码只要能运行,就能判定通过与否。

对话能力:能否成为故事里的好伙伴?

  • 深度角色扮演(3分)。 在充满背景设定的长篇互动中,模型能否记住之前埋下的伏笔、接受修正指令并始终维持角色的视角?
  • 日常对话能力(3分)。 在多轮交流中始终保持一致性,充当合格的日常聊天伙伴。
  • 角色塑造能力(2分)。 如何塑造具备多种性格特征与习惯的单一角色形象。
  • 创意写作协作能力(2分)。 在长度、时态以及各类允许/禁止出现的元素等限制条件下,共同完成故事创作。

对话测试衡量的是角色扮演与陪伴式交流的能力。它并不评估单纯的问答表现,因此该分数仅能反映模型在叙事层面的能力,而非其作为助手的整体水平。

成人内容测试:特意单独分类

有些模型专为成人向创作设计,也有用户明确需要此类功能,因此我们专门设立了对应的测试组。该部分拥有独立的评分指标(即NSFW评分),且绝不会计入总分。所有测试角色均为成年人。分数越高仅说明模型在相关内容的生成上越大胆,至于这种表现是否适合你的使用需求则取决于个人偏好。

对话评分机制详解

由于对话回复无法直接运行验证,因此需借助评判模型来打分。该模型不会给出自由发挥式的评分。每个测试案例都配有一系列是非题清单,比如“角色是否始终以第一人称叙述?”。评判模型需针对每道题给出是或否的答复并附上佐证语句。若回复中并未出现所引用的内容,即便判定为“是”也会被视为无效。此外还有诸如字数限制及禁用词汇等文本规则同步作用于评分过程。

两项机制可确保评判模型的公正性:其一,每个清单问题只能针对单一事项进行提问;其二,在正式启用前必须通过校准测试,确保模型能够准确执行任务,杜绝敷衍应付或刻意弱化评判标准的情况发生。

误差范围与分数并列判定

所有得分数值均附带基于测试样本统计得出的正负误差值。若两款模型的得分差距小于各自的误差范围,则无论表格排序如何均视作分数相同。此类比较仅适用于同一版本测试集内部,每份报告中每行的数据来源版本均有明确标注。

十分钟就能自己动手运行起来

你需要三样东西:一个能通过类 OpenAI 接口进行测试的模型、一个评估器,以及一台安装了 uv 的电脑。这台电脑无需配备 GPU,因此你甚至可以用笔记本电脑去连接远程 API 进行测试。在 Linux 系统下,代码执行过程会运行在 bwrap(即 BubbleWrap)的沙盒环境中;而在 Windows 和 macOS 上则没有这种机制,此时你需要使用 README 中提供的 Docker 镜像,或者在子命令前加上 --allow-unsandboxed 参数,这样模型生成的代码就能直接以你的权限运行了。

1. 安装步骤

git clone https://github.com/LaserLloyd/CrucibleForge.git
cd CrucibleForge
uv sync --python 3.13
uv run crucibleforge config --init

执行最后的命令后,系统会生成一个初始配置文件 models.yaml。该文件中包含了 LM Studio、Ollama、llama.cpp 等各类本地服务器,以及 DeepSeek、OpenRouter、OpenAI 等其他服务提供商的配置信息。不过在手动启用相应选项前,任何功能都不会实际运行。

2. 指定模型所在位置

打开 models.yaml 文件即可。其中的 Provider 项用于定义服务器地址,而 Model 项则用来指定该服务器上的具体模型。以本地服务器为例:

providers:
  mylocal:
    type: openai
    base_url: http://localhost:8080/v1   # your llama.cpp / LM Studio / StudioForge address

models:
  - name: my-model
    provider: mylocal
    model_id: the-id-your-server-reports
    context_length: 32768

若想查看某服务器支持的所有模型 ID,只需执行如下命令:

uv run crucibleforge models discover mylocal

3. 验证配置是否正确

uv run crucibleforge status

该命令会逐一列出各服务提供商的在线状态(UP/DOWN)、相关密钥是否设置、已配置的模型信息、评估器状态以及测试用例数量。如果看到任何标记为 DOWN 或 NOT SET 的项目,务必先将其修正再继续后续操作。

4. 制定计划并进行试运行

在任意运行命令后添加 --plan 参数即可进入计划模式。此时系统不会真正执行任何操作,仅会打印出预计要运行的流程及其耗时估算值。

uv run crucibleforge all --models my-model --judge mylocal:my-judge --plan
uv run crucibleforge all --smoke --models my-model --judge mylocal:my-judge --yes

试运行功能会以端到端的方式测试一小部分标记过的用例:从模型生成内容、评估器打分直至生成报告。这足以验证你的整体配置是否正常。我们在测试中通过远程模型执行此流程,耗时不到两分钟,费用也仅约两美分左右。需要注意的是,试运行结果并不能代表完整评分——因为它仅覆盖了全部 33 个测试用例中的少数几个。最终生成的报告中该模型会被标记为“部分完成”,且不会给出总分或排名。

5. 解读运行报告

你可以直接在浏览器中打开 results/report.html,或者查看文本格式的 results/report.md。同目录下还有 failures.md、report.json,以及所有模型对应的提示词与回答记录。若执行完整测试流程(即去掉 --smoke 参数),在 GPU 性能较好的环境下,单个本地模型的完整测试耗时约 25 到 30 分钟,这还包含了评估器的运行时间。如果你更喜欢可视化操作方式,可执行 uv run crucibleforge gui 命令,随后访问输出的地址即可。默认情况下该界面仅能在本机访问。

连接后端或 API

CrucibleForge 本身并不包含任何模型,它只是一个客户端。它所需的一切信息都存放在 models.yaml 文件中,内容分为三部分:提供商、模型以及评判器。

本地服务器

请使用 type: openai 并填入服务器的地址。常见的地址如下:

  • llama.cpp 提供的 llama-server:http://127.0.0.1:8080/v1
  • LM Studio:http://localhost:1234/v1
  • Ollama:http://localhost:11434/v1
  • vLLM:http://localhost:8000/v1
  • StudioForge:其网关位于 1234 端口,路径为 /v1(并非控制面板端口)。如果你希望 CrucibleForge 能调用 GPU 资源并通过服务器端的调度器加载模型,则需使用 type: studioforge。

若服务器要求输入密钥,请将环境变量名设为 api_key_env。切勿直接将密钥写入文件中。

托管式 API

providers:
  deepseek:
    type: openai
    base_url: https://api.deepseek.com/v1
    api_key_env: DEEPSEEK_API_KEY
    concurrency: 8

models:
  - name: deepseek-flash
    provider: deepseek
    model_id: deepseek-flash
    context_length: 131072
export DEEPSEEK_API_KEY=...        # your own key, set in your shell
uv run crucibleforge status

初始模板文件中已包含了 DeepSeek、OpenAI、OpenRouter 等提供商的配置信息。Claude 同样可直接使用:Anthropic 提供了兼容 OpenAI 协议的接口,因此只需设置 type: openai、base_url: https://api.anthropic.com/v1 并填入你的 Anthropic 密钥即可。对于未提供 OpenAI 风格接口的提供商,通常可通过 OpenRouter 进行访问。托管运行需要付费,因此建议先使用 --plan 参数执行一次测试。为托管模型设定一个 price 值(每百万输入/输出 Token 所需的费用),报告中便会显示 运行成本 一栏:即在该定价标准下,仅生成内容时执行标准代码与聊天测试所需的费用。若选用固定套餐模式,则不会产生按 Token 计费的情况,此时只需在价格设置处填入 basis: list,系统便会以波浪号标记该数值作为基于套餐定价的估算值。至于运行在自己硬件上的模型,此处则显示短横线。如果某个托管模型未设定价格信息,CrucibleForge 会发出警告并拒绝启动。

部分提供商设有内容过滤机制,可能会拦截某些回复内容。CrucibleForge 会在每次生成后的报告中记录此类情况,对应行还会标记“被拦截”字样与相关说明;被拦截的回复得分为零。用户无需进行任何额外设置即可启用此功能。

评判器

聊天测试需要配备评判器,且该评判器绝不能是正在接受测试的模型本身。它可以是本地服务器上的另一款模型,也可以是托管式模型。每次运行时可借助 --judge provider:model_id 参数指定评判器;或者也可在 models.yaml 文件中的 judge: 下列出多个候选模型。需要注意以下两点:

  • 评判器会影响聊天测试得分。 只有选用相同的评判器,你的聊天测试分数才能与 MakoBench 排行榜上的数值保持一致。代码测试则无此限制,因为其评分基于实际运行结果。
  • 多数托管式评判器会拒绝或弱化涉及成人内容的文本。 校准检测模块能识别此类情况。其余聊天测试仍会被评分;而那些涉及敏感内容的条目则暂时标记为“未评判”,直至你选用合适的模型完成判定。

更进一步

  • crucibleforge conform --models my-model 可单独执行七项设置检查。
  • crucibleforge cases verify 会离线重新生成所有标准答案,用作自我测试。
  • crucibleforge report 则根据已保存的结果重新生成报告。
  • 所有结果都存放在 results/ 目录下,与你的 models.yaml 文件处于同一位置,因此它们会一直留在本地机器上。

README 文档中还介绍了 Docker 的使用方法、后台运行方式、如何保护自定义测试不被公开,以及如何添加新的测试用例。如果你只想要数值结果的话,MakoBench 平台上已经列出了我们运行过的所有模型的得分数据;另外你也可以通过 这个链接请求我们为你运行测试。如果想深入了解如何解读这些分数,可查阅 MakoBench 的工作原理;而包含实际输出示例的安装指南则位于 在自己的模型上运行 CrucibleForge 页面中。


← 更多AI 与本地 LLM