用自己的真实任务,匿名比较自己选定的 AI 模型。 用户在熟悉自己的 Agent 中生成测试题,导入 Fun Bench,指定模型并行作答,体验匿名成果,提交评分后揭晓身份。 也可以在给某一道题打完分后,单独揭晓那一题背后的模型,不必等到整场评测结束。
需要 Node.js 24 或更高版本。 项目使用 Node 内置 SQLite,不需要另外安装数据库。
npm install
npm run dev打开 http://127.0.0.1:5173。 前端端口为 5173,API 端口为 3001。 点击“先玩一场演示”,可以在没有 API Key 时体验完整盲评流程。 演示中的三个选手和作品由项目手工制作,已明确标注,不代表真实模型能力。
- 在“怎么玩”中复制出题提示词,交给自己的 Agent。
- 与 Agent 确认真实任务、必要材料、输出要求和评分标准。
- 在“模型设置”添加至少两个模型,填写显示名称、协议、Base URL、API Key、Model ID 和输出 Tokens 上限。
- 新建评测,粘贴或导入题目,核对解析结果,然后选择参与模型。
- 开始逐题测试:先看第 1 题的匿名成果,用档位给出整体评价,点“继续测试下一个”再测试下一题。
- 想提前知道某道题背后是谁,可以在给该题打完分后点“立即揭晓第 N 题”,单独揭晓这一道题。
- 所有题目完成后,提交并锁定评分,揭晓模型身份。
- 分享评审链接,邀请其他人独立盲评。
每场支持 1 到 10 道题目、2 到 6 个模型。 模型配置页提供“测试”按钮:模型卡片上的按钮测试已保存的配置,编辑弹窗中的“测试连接”测试当前填写的地址、模型和 Key。 两者都会发送一次真实请求,并显示耗时、模型回复或错误原因,方便在保存前确认配置是否正确。 题目按顺序测试:同一题目的模型并行生成,回答并评价完当前题目后,点“继续测试下一个”才发起下一题。 单题揭晓不改变这个顺序:它只提前告诉你某道题的成果出自谁,不会让下一题提前开始作答。 某位选手掉线时,可以在他的卡片上点“重新开始”,只重跑这一份成果,不必把整场评测重做一遍。 系统最多同时处理 8 个生成任务,每个浏览器工作区最多同时运行两场测试。 导入提示词保持原样发送给模型,评分标准作为评审参考展示。 当前使用新会话中的单次文本生成,不提供联网搜索、文件工具、代码执行 Agent 或多轮自动修复。
支持 .md、.txt、.json 文件和直接粘贴。
examples/interview.md 与 examples/tasks.json 可以直接导入。
每个文件限制为 1 MB,单场请求限制为 2 MB。
Markdown 推荐格式:
# 测试标题
## 测试提示词
完整任务、输入材料、约束和预期输出格式。
## 评分标准
- 准确性(40分):具体判断依据
- 可用性(35分):具体判断依据
- 表达(25分):具体判断依据多道题用单独一行 --- 分隔。
无明确分值的自由文本评分标准会保留为满分 100 的综合评分项,导入后可以自行调整。
JSON 支持单道题、题目数组和 { "tasks": [...] }。
每道题字段为 title、prompt、evaluation、format 和 criteria。
format 为 text 或 html。
每项评分包含 name、description、maxScore,每项满分为 1 到 100 的整数,实际评分可以为 0。
文本材料可以在核对页面补充,内容会原样加入所有模型收到的提示词。 当前不解析 PDF、Word、图片或音频附件。
| 协议 | 请求路径 | 认证 |
|---|---|---|
| OpenAI 兼容 | /v1/chat/completions |
Authorization: Bearer ... |
| Anthropic 兼容 | /v1/messages |
x-api-key、anthropic-version: 2023-06-01 |
Base URL 可以填写服务根地址、以 /v1 结尾的地址或完整协议端点。
支持自定义兼容网关和本地 HTTP 服务,不跟随上游重定向。
使用流式请求和 messages,每次生成最长等待 30 分钟,页面显示已收到的文本字符数。
兼容忽略流式参数并返回完整 JSON 的网关。
流式连接提前结束或返回错误时将本次成果标记为失败,避免将半份输出计入评分。
应用允许配置最多 1,000,000 输出 Tokens,但必须符合实际模型的输出限制。
单份成果最多保存 1600 万字符。
OpenAI 协议可以选择 max_tokens 或 max_completion_tokens,Anthropic 使用 max_tokens。
请使用支持这些协议字段的模型端点;当前不实现 OpenAI Responses API 和提供商专有工具。
连接测试使用与正式生成相同的协议路径、认证方式和输出 Tokens 参数,因此配置问题会在测试阶段暴露。
连接测试最多等待 60 秒,收到模型回复即判定连接正常,并提前中止超出需要的输出。
鉴权失败、接口或模型不存在、额度或速率限制会分别给出可操作的提示,且不会显示上游原始响应。
达到输出上限时,界面会标记成果可能不完整。
失败请求保留匿名错误状态,不计入评分。
掉线的选手可以在自己的成果卡片上点“重新开始”,只重跑这一份成果,其它题目、其它选手和已经给出的评分都不受影响。
创建者也可以在提示条里一次让所有掉线的选手重新开始。
重新开始之前可以先去模型设置修好 API Key,再让 TA 重来一次。
本场评测揭晓之前都可以重新开始;揭晓之后不能再改变本轮成果。
重新开始可能产生额外 API 费用。
每位评审者获得独立且持久化的随机展示顺序。 评分前,成果接口不返回模型配置、对应关系、耗时或社区分数,成果数组也按匿名顺序返回。 每份成果只给一个整体档位(很差、一般、可以、非常好),换算成 0 到 100 分,不必逐条评分标准打分。 全部成功成果完成评分后,服务端校验范围并锁定本人的评分,再返回模型身份。 揭晓后可以回看原始成果,但不能修改评分。 提交评分后,原有成果卡片依次翻牌显示模型身份,评分和盲评均分保留在各自卡片中。 刷新已揭晓的评测会直接展示身份;系统开启减少动态效果时跳过翻牌动画。 创建者的揭晓不影响其他评审者的匿名状态。 社区成绩按 0 到 100 的整体评分直接平均展示,不跨不同题目计算全站总榜。 模型自身生成的文字或风格可能让评审者推测身份,平台匿名指的是隐藏系统中的身份映射。
不必等所有题目做完:某道题的选手全部作答完成、并且你已经给这一题打完分之后,就可以点操作栏里的“立即揭晓第 N 题”,单独查看这一题的成果分别出自哪个模型。 揭晓要求这一题的所有成果都生成成功;有成果失败的题目不能单独揭晓。 揭晓后这一题的评分随即锁定,不能再改;其他题目仍然保持匿名。 如果每一道题都被单独揭晓过,页面会显示成完整揭晓的样子,但社区成绩仍然要等提交评分之后才出现。 揭晓按浏览器会话保存,刷新页面后依然生效,换浏览器或清除 Cookie 则重新开始。 单题揭晓只影响本人:其他评审者看不到你揭晓了哪道题,也看不到你给出的分数。 揭晓时随身份一起返回的只有模型显示名称、Model ID 和协议,不包含 Base URL 等连接信息。 最终提交评分时,已锁定题目的分数以揭晓时保存的值为准,服务端不接受改写。
工作区和评审身份使用 HttpOnly Cookie 保存在当前浏览器。
清除 Cookie 或换浏览器会创建新工作区,当前没有账号登录、跨设备同步或严格的一人一票身份认证。
分享链接允许持有者查看该场题目、材料和成果,应仅分享适合对方查看的评测。
在本机启动时,其他设备无法使用 127.0.0.1 链接,需要在其可访问的服务器或局域网地址上运行项目。
支持 Markdown、表格、代码块,以及完整的单文件 HTML 成果。 HTML 在不授予同源权限的 sandbox iframe 中运行,允许内联脚本和样式。 网络请求、外部脚本、表单提交和父窗口导航受到限制。 生成网页时请要求 CSS 和 JavaScript 内联,不使用 CDN 或外部资源。 Markdown 中的外部图片不会自动加载。 支持重置、全屏、查看原始回答和下载原始成果。 代码不会在 Node 服务端执行。
默认数据目录是 data/,可通过 DATA_DIR 修改。
SQLite 保存模型配置、题目、运行记录、匿名顺序和评分。
API Key 使用 AES-256-GCM 加密,密钥在 data/encryption.key。
浏览器不会收到已保存的明文 Key,编辑时留空表示保留原 Key。
备份和迁移时必须同时保留数据库与加密密钥,不能只备份其中一个。
数据目录、环境文件和测试输出已加入 .gitignore。
运行和错误日志记录阶段、内部记录标识、状态、耗时和匿名化错误原因,不输出 Key 或上游原始错误响应。
服务重启后,将中断的任务标记为失败,避免自动重放产生费用。
npm run build
npm start生产构建由 API 服务直接提供,默认打开 http://127.0.0.1:3001。 本地默认只监听回环地址。 需要在可信局域网提供访问时,可以设置监听地址:
$env:HOST = "0.0.0.0"
$env:PORT = "3001"
npm start使用实际局域网地址打开项目后生成分享链接。
对外部署建议使用 HTTPS 反向代理并保留原始 Host 头。
仅在可信反向代理之后设置 TRUST_PROXY=1,让服务正确识别 HTTPS 和设置 Secure Cookie。
当前是浏览器工作区隔离的小型单实例应用,面向个人或可信小组使用。
公开运营前需要增加账号体系、配额、反滥用和适合部署环境的网络访问控制。
npm run check
npm test
npm run build
npx playwright install chromium
npm run test:e2e应用运行时,可以执行 npm run capture 保存桌面首页、匿名对比、揭晓和手机界面截图到 artifacts/。
单元测试覆盖导入、协议路径、评分范围、单题揭晓的评分校验、完整性和成绩归一化。 API 集成测试使用本地模拟服务验证两种协议认证、相同提示词并行执行、密钥保护、盲评权限、独立揭晓、单题揭晓的隔离与锁定、掉线选手重新开始、评分锁定和重启持久化。 连接测试覆盖已保存配置、表单草稿、编辑时复用已保存的 Key、上游鉴权与模型不存在的提示,以及工作区之间的访问隔离。 浏览器测试覆盖桌面和手机上的模型配置、连接测试、导入、生成、可运行成果、评分草稿恢复、掉线重启、揭晓、单题揭晓、分享以及横向溢出检查。 测试使用临时数据和模拟 Key,不调用真实付费模型。
src/ React 界面、导入解析、匿名预览和评分
server/ Express API、协议适配、SQLite、并行任务和演示作品
examples/ 可直接导入的 Markdown / JSON 题目
tests/ 单元、API 集成和浏览器测试
data/ 本地运行数据和加密密钥(不提交)
本项目使用 MIT License。 仓库只包含源码和合成示例,不包含 API Key、运行数据库、用户评测内容、日志或截图。