yet-another-applied-llm-benchmark
yet-another-applied-llm-benchmark 是一个专注于评估大语言模型在实际应用场景中表现的个人化测试基准。它并非严谨的学术评测,而是收录了作者过去一年中真实向模型提出过的近 100 个具体问题,涵盖代码优化、字节码反编译、混淆脚本解释、数据编码识别及 SQL 生成等实用任务,旨在回答“模型能否解决我真正关心的工作难题”。
该工具特别适合开发者和技术人员使用,帮助他们直观了解不同模型在处理日常编程与工程任务时的真实能力,而非仅仅关注理论分数。其核心亮点在于构建了一套简洁的数据流领域特定语言(DSL),允许用户通过类似"LLM 生成代码 >> 自动运行 >> 结果验证”的链式语法,轻松自定义并自动化执行复杂的评估流程。这种设计不仅支持在沙箱环境中安全运行生成的代码,还能结合其他模型进行辅助评判,极大地扩展了测试的深度与多样性。虽然作者未对提示词进行刻意优化以模拟最自然的交互状态,但这反而为观察模型在“无修饰”指令下的原生表现提供了独特视角。
使用场景
一位全栈开发者在日常工作中频繁依赖大模型协助完成代码转换、逆向分析及脚本编写等具体任务,急需验证不同模型在真实场景下的可靠性。
没有 yet-another-applied-llm-benchmark 时
- 评估脱离实际:依赖学术榜单选择模型,却发现模型在处理“将 Python 函数转为高效 C 代码”或“反编译字节码”等具体需求时表现不佳。
- 验证流程繁琐:每次测试新模型都需要人工编写提示词、手动运行代码并核对输出,难以批量复现过去一年内遇到的近百种真实难题。
- 过度依赖提示工程:为了得到正确结果,不得不花费大量时间研究复杂的提示词技巧(如“逐步思考”),而非直接获得所需答案。
- 缺乏自动化反馈:无法自动判断模型生成的 Bash 单行命令或 SQL 查询是否真正可执行且结果正确,只能靠肉眼检查。
使用 yet-another-applied-llm-benchmark 后
- 场景高度契合:直接利用源自真实工作流的近 100 个测试用例(如解释混淆 JS、识别编码格式),精准评估模型解决实际问题的能力。
- 自动化闭环测试:通过内置的数据流 DSL,一键实现“提问 - 执行代码 - 自动比对结果”的全流程,例如自动运行生成的 C 程序并验证绘制的国旗图像。
- 回归自然交互:无需刻意设计复杂提示词,直接用日常语言提问即可测试模型水平,还原最真实的使用体验。
- 量化决策依据:基于 o1-mini 或 Claude 3.5 Sonnet 等模型在特定任务上的通过率数据,快速选出最适合当前开发任务的助手。
yet-another-applied-llm-benchmark 的核心价值在于它将抽象的模型能力评估转化为对开发者真实痛点的自动化验收测试。
运行环境要求
- Linux
未说明
未说明

快速开始
又一个应用型大语言模型基准测试
这是我为自己制作的一个基准测试,用于评估语言模型在我关心的任务上的表现。我之所以关注这些任务,是因为每一个测试都直接源自于过去一年中我曾要求大语言模型为我完成的事情。
例如,这个基准测试中包含一些测试用例,用来评估模型是否能够:
- 将 Python 函数转换为等效但更快的 C 函数;
- 将 Python 字节码反编译为函数式源代码;
- 解释经过压缩的 JavaScript 代码的功能;
- 识别某些数据的编码格式(比如 uuencode);
- 根据类似 BNF 的语法编写解析器;
- 将一些英文句子转换为 SQL 查询;或者
- 编写一些 Bash 单行脚本。
这个基准测试有两个显著的特点,使其颇具吸引力:
我实现了一种简单的数据流领域特定语言,使得我可以(或任何人!)轻松添加新的测试用例,以更真实地评估模型的能力。
正是由于这一点,我为实际工作中作为助手使用大语言模型时遇到的不同场景编写了近 100 个测试用例。
例如,下面是一个完整的测试用例,用于评估模型能否写出“Hello, World”程序:
'用 Python 写一个 "Hello, World" 程序' >> LLMRun() >> PythonRun() >> SubstringEvaluator("hello world")
首先,我让模型写出“Hello, World”程序,然后在后台无缝地在一个 Docker 容器中运行该程序,并检查标准输出中是否包含“hello world”。(这里的 >> 操作符可以理解为“然后执行”,即“a >> b”表示先执行 a,再执行 b。)
更具趣味性的是,下面这个测试用例首先要求模型生成一段绘制美国国旗的代码。为了评估其结果,我会先运行这段代码,再用另一个语言模型对其进行初步判断,最后通过与参考答案进行比较来全面评估输出结果。
"用 C 语言编写一个将美国国旗输出到 stdout 的程序。" >> LLMRun() >> CRun() >> \
LLMRun("这张图片上显示的是什么国旗?") >> \
(SubstringEvaluator("United States") | SubstringEvaluator("USA") | SubstringEvaluator("America"))
这种领域特定语言使我能够评估比目前我所知的任何其他评估基准都要更加多样化和复杂的行为。这对于判断模型是否能够完成我真正关心的任务非常有帮助。
测试结果
我已经在这个基准测试上评估了几款模型。它们的表现如下:
- o1-mini:62% 通过率
- Claude 3.5 Sonnet:56% 通过率
- GPT-4o:48% 通过率
- Gemini 1.5 Pro:43% 通过率
- Claude 3 Opus:42% 通过率
- GPT-4o Mini:36% 通过率
- Mistral Large:28% 通过率
- GPT-3.5:26% 通过率
完整的评估表格可以在 这里 查看。
这不是什么
这并不是一个严肃的学术基准测试。
换句话说,它并非旨在严格评估模型在任何特定任务上的能力。它也不是用来决定哪款模型更有能力、更博学、更准确、更少偏见、更安全、更对齐或更有帮助的工具。
这些问题并没有经过最优的提示工程设计。完全有可能——事实上也很可能——如果对其中一些问题进行更好的措辞,模型就能给出更好的答案。
但我就是懒。
我不想提醒模型:“你可是 Python 方面的专家!”也不想告诉它:“如果你答对了,我就给你 10 万美元的小费;但如果答错了,我就杀了只小猫。”当然,我也不会真的这么做……我只是希望它能深呼吸,一步一步地思考后再作答。(或者现在大家常用的那些能让模型发挥最佳水平的咒语。)
我只想简单地输入一个问题,然后得到正确的答案。因此,这个基准测试正是针对这类问题设计的,而且这些问题都是我曾经真正关心并希望得到解答的类型。
未能通过某个问题并不意味着什么
由于我在提示工程方面的不足(通常是故意的),当模型未能通过某个问题时,我们并不能从中获得太多有用的信息。也许只是我的问题表述得不够清晰,或者存在某种歧义。
相反,这些测试的设计目的是让我在模型通过时有所收获。毕竟,你不可能靠运气就正确编译 Rust 程序,这需要一定的编程技能。然而,你却可能因为把函数名取成了我不期望的名字,导致你的正确代码根本无法被调用而失败。
这是什么
再次强调,这不过是我曾经要求语言模型帮我解决的各种编程任务的问题集合,其中也穿插了一些纯粹出于娱乐目的提出的问题。这些问题大多未经修改,直接按照我当时输入的内容呈现。这意味着它们可能并不是最清晰的表述方式(例如,“在 Python 中,我应该用什么 东西 来表示 ~,就像 add 代表 + 一样?”而我期待的答案是 __inv__)。此外,还有一些问题因为需要最新的知识而显得有些“不公平”(比如,“Llama-2 70B 的隐藏维度是多少?”)。但对我来说,重要的是模型能否正确回答这些问题。
安装说明
要让这个基准测试运行起来其实相当简单。
Python 依赖
在 Python 端,你只需运行 pip install -r requirements.txt 来安装所需的依赖包。
如果你想运行并评估多种不同的模型,还需要额外安装其他模型的依赖包,可以通过运行 pip install -r requirements-extra.txt 来完成。
Podman(推荐)
我希望在容器中运行所有内容,以确保基本的安全性。Docker 虽然界面更好,安全性控制也略胜一筹(所以如果你愿意也可以使用 Docker),但在 Linux 系统上,启动新的 Docker 任务通常需要 root 权限,或者至少赋予当前用户接近 root 的权限。这让我有些担心。
因此,我更倾向于使用 Podman。请根据你的系统情况,按照官方文档安装即可。
Docker(可选)
同样,Docker 的安装方法因系统而异,你需要查阅相关文档来了解如何在你的系统上安装它。
为什么需要 Docker/Podman?
本基准测试中的测试用例是通过直接执行语言模型生成的代码来评估的。 某些测试会要求模型重命名文件、移动文件,或对您的机器进行其他改变状态的操作。
虽然我不认为这些模型对我们怀有恶意,会出于故意或报复而输出 rm -rf / 命令,但它们确实有可能生成有缺陷的代码,从而意外地破坏您的计算机。因此,为了防止这种情况发生,所有 LLM 的输出都会在一个临时的 Docker 容器中进行评估,测试完成后该容器会立即被删除。
(还有一个原因:部分测试假设系统是一个装有特定依赖项的全新 Ubuntu 系统。在您的本地机器上,这些测试的行为可能与在 Docker 虚拟机中运行时有所不同。)
如果您喜欢冒险(强烈不推荐),可以在代码中设置一个标志:
I_HAVE_BLIND_FAITH_IN_LLMS_AND_AM_OKAY_WITH_THEM_BRICKING_MY_MACHINE_OR_MAKING_THEM_HALT_AND_CATCH_FIRE
将其设置为 True 后,LLM 生成的所有内容将直接在您的机器上通过 eval() 执行。
贡献
如果你想为这个基准测试添加自己的测试,请随时提交一个 PR!只要内容有趣,我都很乐意接受。
添加新测试
添加测试只需满足几个要求:
测试用例必须在机制上可验证。我知道这一点限制很大。我使用大语言模型的很多场景都无法以这种方式验证,尤其是当我给它们提供大量代码并要求进行难以单元测试的具体修改时。但为了使这些测试有用,你的测试必须易于验证。
测试用例应快速完成。我不希望仅仅运行一个测试就等待几分钟。
在构建测试时,不应根据大语言模型的输出来调整测试。不要因为模型的回答不符合你的预期而修改测试。大多数大语言模型都具有一定的随机性,通过多次尝试和错误,总能找到某种方式来诱导出特定行为。我希望看到模型在面对人类编写的、正常提问方式的测试时如何回答,而不是在经过模型优化之后的表现。
测试的设计应确保通过能够展示模型的一些有趣能力。那些专门设计用来让模型失败的“陷阱”式测试,在这种设置中并不实用。
测试用例不得从互联网下载大量数据。不应该让其他人为每次运行这个基准测试买单。如果需要测试某个库,可以将其添加到 Dockerfile 中。
修复测试
这里是否有损坏的测试?我已尽力确保所有测试都是正确的,但无法完全保证其正确性。如果有,请随时提交修复。
请注意:损坏的测试是指答案客观上错误的测试。例如,一个声称 6 是质数的测试。但如果测试只是对一个模糊问题期望特定答案,则不能算作错误。比如,有一个测试问:“我该如何修改 AutoModel.from_pretrained 使其成为带有 LM 头的自动模型?”并期望模型告诉我应该使用 AutoModelForCausalLM 类;尽管存在 AutoModelWithLMHead 类,但这并不是我想要的答案。
我想在学术论文中引用这个项目
恐怕你不需要这样做。至少,如果你试图比较你的新模型为何更好之类的问题,就不需要了。这个基准测试并非为学术论文设计,它只评估非常特定的一组能力。基于前面提到的原因,我认为这个基准测试并不能准确反映学术界人士关心的模型特性。对于“对我是否有用?”这个问题,答案是肯定的;但对于“我的模型是否更好?”这个问题,我认为未必。不过,我已经遇到过几位对此感兴趣的人,他们似乎并不受上述观点的影响。
所以我的建议是:如果你确实想在论文中使用这个基准测试,请链接到这个 GitHub 项目,并包含你所使用的 Git 提交哈希值。我无法保证不会在未事先通知的情况下随意修改测试用例。事实上,这种情况已经在第 1、3 和 6 个测试中发生过了。因此,如果你想让你的论文具有一定的科学性,请务必注明所使用的 Git 提交哈希值。
许可证
版权所有 © 2024,尼古拉斯·卡林尼 nicholas@carlini.com。
本程序是自由软件,您可以按照自由软件基金会发布的 GNU 通用公共许可证条款重新分发和修改它,无论是该许可证的第 3 版,还是(由您选择)任何后续版本。
本程序以“按原样”提供,不提供任何形式的担保,包括对适销性或特定用途适用性的默示担保。有关详细信息,请参阅 GNU 通用公共许可证。
您应随本程序收到一份 GNU 通用公共许可证的副本。如果没有,请访问 http://www.gnu.org/licenses/ 查看。
常见问题
相似工具推荐
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
spec-kit
Spec Kit 是一款专为提升软件开发效率而设计的开源工具包,旨在帮助团队快速落地“规格驱动开发”(Spec-Driven Development)模式。传统开发中,需求文档往往与代码实现脱节,导致沟通成本高且结果不可控;而 Spec Kit 通过将规格说明书转化为可执行的指令,让 AI 直接依据明确的业务场景生成高质量代码,从而减少从零开始的随意编码,确保产出结果的可预测性。 该工具特别适合希望利用 AI 辅助编程的开发者、技术负责人及初创团队。无论是启动全新项目还是在现有工程中引入规范化流程,用户只需通过简单的命令行操作,即可初始化项目并集成主流的 AI 编程助手。其核心技术亮点在于“规格即代码”的理念,支持社区扩展与预设模板,允许用户根据特定技术栈定制开发流程。此外,Spec Kit 强调官方维护的安全性,提供稳定的版本管理,帮助开发者在享受 AI 红利的同时,依然牢牢掌握架构设计的主动权,真正实现从“凭感觉写代码”到“按规格建系统”的转变。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
funNLP
funNLP 是一个专为中文自然语言处理(NLP)打造的超级资源库,被誉为"NLP 民工的乐园”。它并非单一的软件工具,而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。 面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点,funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具,还独特地收录了丰富的垂直领域资源,如法律、医疗、金融行业的专用词库与数据集,甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性,从基础的字典词典到前沿的 BERT、GPT-2 模型代码,再到高质量的标注数据和竞赛方案,应有尽有。 无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师,还是从事人工智能研究的学者,都能在这里找到急需的“武器弹药”。对于开发者而言,它能大幅减少寻找数据和复现模型的时间;对于研究者,它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神,极大地降低了中文自然语言处理的开发与研究成本,是中文 AI 社区不可或缺的宝藏仓库。