对 AI 模型进行 19 维度的能力评估,自动完成多轮对话测试、评分、生成对比报告与雷达图。用于对比各模型长短板,并为每个模型定制 Harness 调用策略。
# 1. 安装依赖
pnpm install
# 2. 配置 API Key
# 方式 A:使用 .env 文件
cp .env.example .env
# 编辑 .env,填入你要测试的模型的 API Key
# 方式 B:使用配置文件
pnpm dev --init-config
# 编辑生成的 .model-eval.json,填入 API Key
# 3. 运行评估
pnpm dev --model glm-5
# 4. 查看结果
pnpm dev --open-chart# 1. 全局安装
npm install -g model-eval
# 2. 生成配置文件(会自动放到 ~/.model-eval/config.json)
model-eval --init-config
# 编辑该文件,填入 API Key
# 3. 运行评估
model-eval --model glm-5
# 4. 查看雷达图
model-eval --open-chart全局安装后,所有结果默认保存在 ~/.model-eval/results/ 目录下。
model-eval [选项]| 参数 | 说明 | 默认值 |
|---|---|---|
--model |
指定模型,多个用逗号分隔 | 全部已配置模型 |
--test |
指定测试维度 ID,多个用逗号分隔 | 全部 19 个 |
--category |
指定测试类别 | 全部 |
--adapter |
调用方式:api、cli 或 sdk |
api |
--output |
结果输出目录 | 开发模式 ./results,全局安装 ~/.model-eval/results |
--config |
指定配置文件路径 | ./.model-eval.json 或 ~/.model-eval/config.json |
--init-config |
生成配置文件模板 | - |
--list-models |
列出所有可用模型 | - |
--list-tests |
列出所有评估维度 | - |
--open-chart |
打开最新生成的雷达图 | - |
# 测试单个模型
model-eval --model glm-5
# 对比多个模型
model-eval --model glm-5,glm-5.1,kimi-code
# 只跑上下文和执行类测试
model-eval --model glm-5 --category context,execution
# 只跑特定维度
model-eval --model glm-5 --test context-decay,hallucination
# 使用 SDK 方式调用(真实 Agent 会话,适用于 Claude 模型)
model-eval --model claude-sonnet-4-6 --adapter sdk
# 指定输出目录
model-eval --model glm-5 --output ./my-results
# 生成并编辑配置文件
model-eval --init-config
# 查看可用模型列表
model-eval --list-models
# 直接打开最新雷达图
model-eval --open-chart框架支持三种配置来源(优先级从高到低):
--config显式指定的 JSON 文件.model-eval.json/~/.model-eval/config.json.env环境变量(向后兼容)- 内建默认配置(URL、模型参数等)
运行 model-eval --init-config 生成模板:
{
"models": [
{
"id": "glm-5",
"name": "GLM-5",
"provider": "智谱",
"api": {
"apiKey": "your-api-key",
"baseUrl": "https://open.bigmodel.cn/api/paas/v4",
"apiModel": "glm-5"
}
}
]
}只需配置你要测试的模型,不需要的模型可以删除或留空 apiKey。
在项目根目录创建 .env 文件:
# 智谱 GLM 系列
GLM_API_KEY=your-glm-api-key
GLM_BASE_URL=https://open.bigmodel.cn/api/paas/v4
# 月之暗面 Kimi
KIMI_API_KEY=your-kimi-api-key
KIMI_BASE_URL=https://api.moonshot.cn/v1
# MiniMax
MINIMAX_API_KEY=your-minimax-api-key
MINIMAX_BASE_URL=https://api.minimax.chat/v1
# 裁判模型(用于设计类主观评分,可选)
JUDGE_API_KEY=your-judge-api-key
JUDGE_BASE_URL=https://api.openai.com/v1
JUDGE_MODEL=gpt-4o在配置文件中添加即可:
{
"id": "my-model",
"name": "我的模型",
"provider": "厂商名",
"api": {
"apiKey": "your-key",
"baseUrl": "https://api.example.com/v1",
"apiModel": "model-name"
}
}所有模型默认走 OpenAI 兼容接口(/v1/chat/completions),只需改 baseUrl 和密钥。
框架支持三种调用方式:
| 方式 | 说明 | 适用场景 |
|---|---|---|
--adapter api |
直接调用 HTTP API | 快速评估、批量测试 |
--adapter cli |
子进程调用 CLI 工具 | 本地 CLI 工具测试 |
--adapter sdk |
Claude Agent SDK 真实会话 | 测试 Claude 模型在 Agent 环境下的表现 |
| # | ID | 维度 | 测什么 |
|---|---|---|---|
| 1 | context-decay |
上下文衰减 | 注入 6 条关键信息 → 7 轮填充任务 → 检查最终回答保留了多少 |
| 2 | compression-recovery |
压缩恢复力 | 给长上下文 → 要求总结 → 再追问细节,看信息丢失程度 |
| 3 | state-awareness |
状态感知 | 多轮对话中切换话题再回来,检查模型是否还记得之前的上下文 |
| # | ID | 维度 | 测什么 |
|---|---|---|---|
| 4 | instruction-following |
指令遵循 | 给出 8 条编码规则 × 5 个编程任务,检查输出是否遵守规则 |
| 5 | self-correction |
自我纠错 | 给含 4 个隐藏 bug 的代码,让模型修复,看能找到几个 |
| 6 | strategy-adaptation |
策略适应 | 先做 A 方案 → 要求换 B 方案 → 检查是否彻底切换而非混搭 |
| 7 | completion-tendency |
完成度 | 给复杂任务,检查输出是完整实现还是偷工减料 |
| # | ID | 维度 | 测什么 |
|---|---|---|---|
| 8 | task-decomposition |
任务分解 | 给大任务,检查拆分是否合理(粒度、依赖、完整性) |
| 9 | summary-transfer |
摘要传递 | 模拟 Harness 场景:让模型总结当前状态 → 新实例接续,看信息传递质量 |
| 10 | parallel-conflict |
并行冲突 | 两个实例分别修改同一文件的不同部分,检查合并结果 |
| # | ID | 维度 | 测什么 |
|---|---|---|---|
| 11 | code-quality-consistency |
代码质量一致性 | 连续 5 个编程任务,检查代码风格、错误处理是否一致 |
| 12 | hallucination |
诚实度 | 5 个陷阱问题(不存在的 API、虚假文件路径等),看模型是否承认不知道 |
| 13 | tool-efficiency |
工具效率 | 给可简化的复杂任务,看模型是否会选择高效方案 |
| # | ID | 维度 | 测什么 |
|---|---|---|---|
| 14 | aesthetic |
审美 | 给设计需求,评估配色、留白、视觉层次 |
| 15 | design-consistency |
设计一致性 | 连续 3 个相关页面设计,检查风格是否统一 |
| 16 | layout-ia |
布局架构 | 检查页面结构、信息层级是否合理 |
| 17 | visual-detail |
视觉细节 | 检查是否注意间距、对齐、阴影等细节 |
| 18 | design-system |
设计系统 | 要求输出设计规范,检查完整性和可复用性 |
| 19 | design-iteration |
设计迭代 | 给设计反馈,检查是否精准调整而非推翻重来 |
每个维度评分范围 1-5 分,评分方式分两类:
基于规则的自动化评分:
- 关键词匹配:检查模型回答中是否包含预期的关键信息
- 正则模式检查:验证代码输出是否符合指定规则
- 命中率映射:将匹配比例转化为 1-5 分
设计类维度涉及主观判断,使用裁判模型(默认 GPT-4o)打分:
- 将模型的设计输出交给裁判模型
- 裁判根据预设评分标准(配色、留白、层次等)打 1-5 分
- 返回评分 + 评分理由
裁判模型配置在 .env 的 JUDGE_* 变量中。如果未配置,设计类测试会使用规则兜底评分。
运行完成后,默认在输出目录生成以下报告:
results/
├── raw/ # JSON 原始数据
│ ├── eval-glm-4.7-incremental.json # 每个模型的增量结果
│ └── eval-2026-04-15-09-56.json # 最终汇总 JSON
├── reports/ # Markdown 报告
│ └── report-2026-04-15-09-56.md
└── charts/ # 雷达图
├── radar.html # 最新雷达图(--open-chart 打开它)
└── radar-2026-04-15-09-56.html # 历史副本
所有带时间戳的文件都使用 YYYY-MM-DD-HH-mm 格式,便于识别。
结构化的评分数据,包含每个模型的每个维度得分、分类平均分、总耗时。可用于程序化分析或导入其他工具。
人类可读的报告,包含:
- 评分总览表:各模型的分类得分对比
- 详细评分:每个维度的星级评分 + 评分依据
- Harness 配置建议:根据模型各分类得分,给出定制化的调用策略建议
独立的 HTML 文件,用 Canvas 绘制多模型叠加雷达图,支持:
- 19 维度全维度对比
- 多模型颜色区分叠加
- 评分表格(高/中/低分用绿/黄/红标记)
- 浏览器直接打开即可查看
model-eval/
├── src/
│ ├── cli.ts # CLI 入口(bin 入口)
│ ├── adapters/ # 模型调用适配器
│ │ ├── adapter.ts # 适配器接口定义
│ │ ├── api-adapter.ts # API 调用(OpenAI 兼容接口)
│ │ ├── cli-adapter.ts # CLI 调用(子进程方式)
│ │ └── sdk-adapter.ts # SDK 调用(Claude Agent SDK)
│ ├── config/
│ │ ├── models.ts # 基础模型配置定义
│ │ ├── loader.ts # 配置加载器(合并文件/env/默认值)
│ │ └── paths.ts # 路径解析(区分开发/生产模式)
│ ├── dimensions/ # 19 个评估维度用例
│ │ ├── registry.ts # 维度注册表
│ │ ├── context/ # 上下文类(01-03)
│ │ ├── execution/ # 执行类(04-07)
│ │ ├── collaboration/ # 协作类(08-10)
│ │ ├── quality/ # 质量类(11-13)
│ │ └── design/ # 设计类(14-19)
│ ├── scoring/
│ │ └── scorer.ts # 评分引擎
│ ├── runner/
│ │ └── runner.ts # 测试运行器(调度、进度显示、增量保存)
│ └── reporter/ # 报告生成器
│ ├── json-reporter.ts # JSON 原始数据
│ ├── markdown-reporter.ts# Markdown 分析报告
│ └── radar-reporter.ts # HTML 雷达图
├── results/ # 输出目录
├── package.json
└── tsconfig.json
| 模型 ID | 名称 | 厂商 | 适配器 |
|---|---|---|---|
glm-4.7 |
GLM-4.7 | 智谱 | api |
glm-5 |
GLM-5 | 智谱 | api |
glm-5.1 |
GLM-5.1 | 智谱 | api |
kimi-code |
Kimi Code | 月之暗面 | api |
minimax-2.7 |
MiniMax 2.7 | MiniMax | api |
claude-sonnet-4-6 |
Claude Sonnet 4.6 | Anthropic | sdk |
claude-opus-4-6 |
Claude Opus 4.6 | Anthropic | sdk |
- 每个模型跑完全部 19 个维度约需 10-20 分钟(取决于 API 响应速度)
- 并发数默认为 1(串行调用),避免触发 API 限流
- 上下文类测试已优化为预填充对话历史,单维度只需 1 次 API 调用
- 测试过程中会实时打印进度,每完成一个维度都会增量保存到 JSON,防止意外中断丢失数据
- 设计类测试(14-19)如果未配置裁判模型,会使用规则兜底评分,精度较低
- 所有测试用例的原始响应都保存在 JSON 报告中,可回溯审计