astron-eval 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +119 -0
  3. package/bin/astron-eval.mjs +111 -0
  4. package/package.json +24 -0
  5. package/skills/astron-eval/SKILL.md +60 -0
  6. package/skills/model-evaluation/SKILL.md +180 -0
  7. package/skills/model-evaluation/assets/dimensions//345/206/205/345/256/271/347/233/270/345/205/263/346/200/247/347/273/264/345/272/246.json +20 -0
  8. package/skills/model-evaluation/assets/dimensions//345/206/205/345/256/271/347/262/276/347/241/256/347/273/264/345/272/246.json +19 -0
  9. package/skills/model-evaluation/assets/dimensions//345/207/206/347/241/256/346/200/247/347/273/264/345/272/246-/344/270/252/346/200/247/345/214/226/350/247/204/345/210/222.json +20 -0
  10. package/skills/model-evaluation/assets/dimensions//345/207/206/347/241/256/346/200/247/347/273/264/345/272/246-/344/277/241/346/201/257/345/210/206/346/236/220.json +20 -0
  11. package/skills/model-evaluation/assets/dimensions//345/207/206/347/241/256/346/200/247/347/273/264/345/272/246-/346/227/205/346/270/270/345/207/272/350/241/214.json +20 -0
  12. package/skills/model-evaluation/assets/dimensions//345/207/206/347/241/256/346/200/247/347/273/264/345/272/246.json +20 -0
  13. package/skills/model-evaluation/assets/dimensions//345/210/233/346/204/217/346/200/247-/345/220/270/345/274/225/346/200/247/347/273/264/345/272/246.json +21 -0
  14. package/skills/model-evaluation/assets/dimensions//345/210/233/346/226/260/346/200/247/347/273/264/345/272/246.json +20 -0
  15. package/skills/model-evaluation/assets/dimensions//345/256/214/346/225/264/346/200/247/347/273/264/345/272/246-/344/277/241/346/201/257/345/210/206/346/236/220.json +20 -0
  16. package/skills/model-evaluation/assets/dimensions//345/256/214/346/225/264/346/200/247/347/273/264/345/272/246.json +20 -0
  17. package/skills/model-evaluation/assets/dimensions//345/275/242/345/274/217/347/233/270/345/205/263/346/200/247/347/273/264/345/272/246.json +20 -0
  18. package/skills/model-evaluation/assets/dimensions//345/277/240/350/257/232/345/272/246/347/273/264/345/272/246.json +20 -0
  19. package/skills/model-evaluation/assets/dimensions//346/214/207/344/273/244/351/201/265/345/276/252/347/273/264/345/272/246.json +20 -0
  20. package/skills/model-evaluation/assets/dimensions//346/226/207/346/234/254/345/267/256/345/274/202/345/272/246-TER/347/273/264/345/272/246.json +20 -0
  21. package/skills/model-evaluation/assets/dimensions//346/234/211/346/225/210/346/200/247/347/273/264/345/272/246-/344/270/252/346/200/247/345/214/226/350/247/204/345/210/222.json +20 -0
  22. package/skills/model-evaluation/assets/dimensions//346/234/211/346/225/210/346/200/247/347/273/264/345/272/246-/344/277/241/346/201/257/345/210/206/346/236/220.json +20 -0
  23. package/skills/model-evaluation/assets/dimensions//346/234/211/346/225/210/346/200/247/347/273/264/345/272/246-/346/265/201/347/250/213/350/207/252/345/212/250/345/214/226.json +20 -0
  24. package/skills/model-evaluation/assets/dimensions//346/234/211/346/225/210/346/200/247/347/273/264/345/272/246.json +21 -0
  25. package/skills/model-evaluation/assets/dimensions//346/240/270/345/277/203/345/205/203/347/264/240/347/273/264/345/272/246.json +20 -0
  26. package/skills/model-evaluation/assets/dimensions//346/240/274/345/274/217/351/201/265/345/276/252/347/273/264/345/272/246.json +19 -0
  27. package/skills/model-evaluation/assets/dimensions//347/211/271/350/211/262/344/272/256/347/202/271/347/273/264/345/272/246.json +20 -0
  28. package/skills/model-evaluation/assets/dimensions//347/224/250/344/276/213/347/272/247/350/257/204/346/265/213/347/273/264/345/272/246/346/250/241/346/235/277.json +25 -0
  29. package/skills/model-evaluation/assets/dimensions//347/233/270/344/274/274/345/272/246-BERTScore/347/273/264/345/272/246.json +20 -0
  30. package/skills/model-evaluation/assets/dimensions//347/233/270/344/274/274/345/272/246-Cosine/347/273/264/345/272/246.json +20 -0
  31. package/skills/model-evaluation/assets/dimensions//347/233/270/344/274/274/345/272/246-ROUGE/347/273/264/345/272/246.json +20 -0
  32. package/skills/model-evaluation/assets/dimensions//347/233/270/345/205/263/346/200/247/347/273/264/345/272/246-/344/270/252/346/200/247/345/214/226/350/247/204/345/210/222.json +20 -0
  33. package/skills/model-evaluation/assets/dimensions//347/233/270/345/205/263/346/200/247/347/273/264/345/272/246.json +21 -0
  34. package/skills/model-evaluation/assets/dimensions//347/262/276/347/241/256/346/200/247-BLUE/347/273/264/345/272/246.json +20 -0
  35. package/skills/model-evaluation/assets/dimensions//347/262/276/347/241/256/346/200/247-COMET/347/273/264/345/272/246.json +20 -0
  36. package/skills/model-evaluation/assets/dimensions//351/200/273/350/276/221/345/220/210/347/220/206/346/200/247/347/273/264/345/272/246.json +20 -0
  37. package/skills/model-evaluation/assets/dimensions//351/200/273/350/276/221/350/277/236/350/264/257/346/200/247/347/273/264/345/272/246-/344/270/252/346/200/247/345/214/226/350/247/204/345/210/222.json +20 -0
  38. package/skills/model-evaluation/assets/dimensions//351/200/273/350/276/221/350/277/236/350/264/257/346/200/247/347/273/264/345/272/246-/344/277/241/346/201/257/345/210/206/346/236/220.json +20 -0
  39. package/skills/model-evaluation/assets/dimensions//351/200/273/350/276/221/350/277/236/350/264/257/346/200/247/347/273/264/345/272/246-/346/265/201/347/250/213/350/207/252/345/212/250/345/214/226.json +20 -0
  40. package/skills/model-evaluation/assets/dimensions//351/200/273/350/276/221/350/277/236/350/264/257/346/200/247/347/273/264/345/272/246.json +21 -0
  41. package/skills/model-evaluation/assets/eval-judge.json +11 -0
  42. package/skills/model-evaluation/assets/experts/business-process-automation.json +71 -0
  43. package/skills/model-evaluation/assets/experts/content-generation.json +75 -0
  44. package/skills/model-evaluation/assets/experts/content-match.json +37 -0
  45. package/skills/model-evaluation/assets/experts/information-analysis.json +87 -0
  46. package/skills/model-evaluation/assets/experts/marketing-digital-human.json +27 -0
  47. package/skills/model-evaluation/assets/experts/personalized-planning.json +87 -0
  48. package/skills/model-evaluation/assets/experts/text-translation.json +103 -0
  49. package/skills/model-evaluation/assets/experts/tourism-travel.json +119 -0
  50. package/skills/model-evaluation/assets/templates/custom-dimension.template.json +30 -0
  51. package/skills/model-evaluation/eval-build.md +281 -0
  52. package/skills/model-evaluation/eval-execute.md +196 -0
  53. package/skills/model-evaluation/eval-init.md +237 -0
  54. package/skills/model-evaluation/processes/dimension-process.md +207 -0
  55. package/skills/model-evaluation/processes/evalset-create-process.md +184 -0
  56. package/skills/model-evaluation/processes/evalset-parse-process.md +171 -0
  57. package/skills/model-evaluation/processes/evalset-supplement-process.md +136 -0
  58. package/skills/model-evaluation/processes/keypoint-process.md +148 -0
  59. package/skills/model-evaluation/processes/python-env-process.md +113 -0
  60. package/skills/model-evaluation/references//344/270/255/351/227/264/344/272/247/347/211/251/350/257/264/346/230/216.md +340 -0
  61. package/skills/model-evaluation/references//345/206/205/347/275/256/346/250/241/346/235/277/350/257/264/346/230/216.md +149 -0
  62. package/skills/model-evaluation/references//350/204/232/346/234/254/345/256/232/344/271/211.md +274 -0
  63. package/skills/model-evaluation/references//350/256/244/350/257/201/346/234/215/345/212/241/346/216/245/345/217/243/350/257/264/346/230/216.md +271 -0
  64. package/skills/model-evaluation/references//350/257/204/346/265/213/346/234/215/345/212/241/346/216/245/345/217/243/350/257/264/346/230/216.md +455 -0
  65. package/skills/model-evaluation/references//350/257/204/346/265/213/347/273/264/345/272/246/350/257/264/346/230/216.md +171 -0
  66. package/skills/model-evaluation/scripts/cfg/eval-auth.cfg +16 -0
  67. package/skills/model-evaluation/scripts/cfg/eval-server.cfg +1 -0
  68. package/skills/model-evaluation/scripts/clients/__init__.py +33 -0
  69. package/skills/model-evaluation/scripts/clients/api_client.py +97 -0
  70. package/skills/model-evaluation/scripts/clients/auth_client.py +96 -0
  71. package/skills/model-evaluation/scripts/clients/http_client.py +199 -0
  72. package/skills/model-evaluation/scripts/clients/oauth_callback.py +397 -0
  73. package/skills/model-evaluation/scripts/clients/token_manager.py +53 -0
  74. package/skills/model-evaluation/scripts/eval_auth.py +588 -0
  75. package/skills/model-evaluation/scripts/eval_dimension.py +240 -0
  76. package/skills/model-evaluation/scripts/eval_set.py +410 -0
  77. package/skills/model-evaluation/scripts/eval_task.py +324 -0
  78. package/skills/model-evaluation/scripts/files/__init__.py +38 -0
  79. package/skills/model-evaluation/scripts/files/file_utils.py +330 -0
  80. package/skills/model-evaluation/scripts/files/streaming.py +245 -0
  81. package/skills/model-evaluation/scripts/utils/__init__.py +128 -0
  82. package/skills/model-evaluation/scripts/utils/constants.py +101 -0
  83. package/skills/model-evaluation/scripts/utils/datetime_utils.py +60 -0
  84. package/skills/model-evaluation/scripts/utils/errors.py +244 -0
  85. package/skills/model-evaluation/scripts/utils/keypoint_prompts.py +73 -0
  86. package/skills/skill-driven-eval/SKILL.md +456 -0
  87. package/skills/skill-driven-eval/agents/grader.md +144 -0
  88. package/skills/skill-driven-eval/eval-viewer/__init__.py +1 -0
  89. package/skills/skill-driven-eval/eval-viewer/generate_report.py +485 -0
  90. package/skills/skill-driven-eval/eval-viewer/viewer.html +767 -0
  91. package/skills/skill-driven-eval/references/schemas.md +282 -0
  92. package/skills/skill-driven-eval/scripts/__init__.py +1 -0
  93. package/skills/skill-driven-eval/scripts/__main__.py +70 -0
  94. package/skills/skill-driven-eval/scripts/aggregate_results.py +681 -0
  95. package/skills/skill-driven-eval/scripts/extract_transcript.py +294 -0
  96. package/skills/skill-driven-eval/scripts/test_aggregate.py +244 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Jesse Vincent
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,119 @@
1
+ # AstronEval
2
+
3
+ AI 模型评测工具集,用于评估模型输出质量和对比 Claude 模型在技能执行中的表现。
4
+
5
+ ## 技能
6
+
7
+ | 技能 | 说明 |
8
+ |------|------|
9
+ | **astron-eval** | 评测路由 — AstronEval 的统一入口,根据用户意图自动路由到对应的评测子技能 |
10
+ | **model-evaluation** | 模型质量评测 — 评测 AI 模型在真实业务任务上的输出质量,支持上传评测集、配置评测维度、提交任务、查看进度和结果 |
11
+ | **skill-driven-eval** | 技能驱动评测 — 对比不同 Claude 模型(Opus vs Sonnet)执行同一技能时的效果、速度、token 消耗和成本收益,通过盲评生成数据驱动的对比报告 |
12
+
13
+ ## 使用场景
14
+
15
+ ### 模型质量评测(model-evaluation)
16
+
17
+ 当你需要:
18
+ - 评测大模型在问答、文案生成、信息分析等业务场景的输出质量
19
+ - 上传评测集并配置评测维度
20
+ - 提交评测任务并查看进度和结果
21
+ - 恢复中断的评测任务
22
+
23
+ **示例:**
24
+ ```
25
+ 我有个 csv 文件,里面是大模型生成的 500 条文案。
26
+ 老板让我评测一下质量,看看哪些维度表现好哪些不行。
27
+ 文件在 ~/Downloads/marketing_outputs.csv
28
+ ```
29
+
30
+ ### 技能驱动评测(skill-driven-eval)
31
+
32
+ 当你需要:
33
+ - 对比不同 Claude 模型执行某个技能的效果
34
+ - 评估是否值得为某个技能升级到更贵的模型
35
+ - 了解质量、速度、token 消耗之间的权衡
36
+
37
+ **示例:**
38
+ ```
39
+ 帮我对比一下用 opus 和 sonnet 跑我们的 customer-service 技能,
40
+ 哪个更划算?我们每天要处理 1000 个客服对话,
41
+ 想看看成本和质量的 trade-off
42
+ ```
43
+
44
+ ## 工作流
45
+
46
+ ### 模型质量评测流程
47
+
48
+ ```
49
+ 初始化 → 构建配置 → 执行评测 → 查看结果
50
+ ```
51
+
52
+ 1. **初始化**:环境检测、鉴权验证、会话目录创建
53
+ 2. **构建配置**:场景识别、维度配置、评测集处理
54
+ 3. **执行评测**:任务提交、状态监控
55
+ 4. **查看结果**:结果展示、报告生成
56
+
57
+ ### 技能驱动评测流程
58
+
59
+ ```
60
+ 理解技能 → 生成测试用例 → 执行测试 → 盲评打分 → 生成报告
61
+ ```
62
+
63
+ 1. **理解技能**:读取目标技能的定义和要求
64
+ 2. **生成测试用例**:创建覆盖不同场景的测试用例
65
+ 3. **执行测试**:使用不同模型并行执行测试用例
66
+ 4. **盲评打分**:评分者不知道模型身份,消除偏差
67
+ 5. **生成报告**:汇总结果,生成可视化对比报告
68
+
69
+ ## 安装
70
+
71
+ AstronEval 安装方式,将技能安装到 Claude Code 的技能目录。
72
+
73
+ ### npx 安装
74
+
75
+ ```bash
76
+ # 安装到当前项目 ./.claude/skills/
77
+ npx astron-eval --local --claude
78
+
79
+ # 全局安装到 ~/.claude/skills/
80
+ npx astron-eval
81
+
82
+ # 指定版本
83
+ npx astron-eval@0.2.0 --local
84
+ ```
85
+
86
+ ## 技能触发测试
87
+
88
+ 项目包含完整的技能触发验证用例,位于 `tests/skill-triggering/`:
89
+
90
+ - `astron-eval_triggers.json` - astron-eval 路由技能的触发测试
91
+ - `model_evaluation_triggers.json` - model-evaluation 技能的触发测试
92
+ - `skill_driven_eval_triggers.json` - skill-driven-eval 技能的触发测试
93
+
94
+ ## 目录结构
95
+
96
+ ```
97
+ astron-eval/
98
+ ├── skills/ # 技能定义
99
+ │ ├── astron-eval/ # 路由技能
100
+ │ ├── model-evaluation/ # 模型质量评测
101
+ │ └── skill-driven-eval/ # 技能驱动评测
102
+ │ ├── agents/ # 子智能体定义
103
+ │ ├── eval-viewer/ # 可视化报告生成器
104
+ │ ├── references/ # 参考文档
105
+ │ └── scripts/ # 评测脚本
106
+ └── tests/ # 测试用例
107
+ └── skill-triggering/ # 技能触发验证用例
108
+ ```
109
+
110
+ ## 依赖
111
+
112
+ - Python 3.10+
113
+ - 评测服务 API 访问权限(用于 model-evaluation)
114
+ - Claude Code CLI(用于 skill-driven-eval)
115
+
116
+ ## 贡献
117
+
118
+ 欢迎提交 Issue 和 Pull Request。
119
+
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { cpSync, readdirSync, readFileSync, mkdirSync } from 'node:fs';
4
+ import { resolve, dirname, join } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { homedir } from 'node:os';
7
+
8
+ const __dirname = dirname(fileURLToPath(import.meta.url));
9
+ const { version } = JSON.parse(
10
+ readFileSync(resolve(__dirname, '..', 'package.json'), 'utf-8')
11
+ );
12
+
13
+ const args = process.argv.slice(2);
14
+
15
+ // --help
16
+ if (args.includes('--help') || args.includes('-h')) {
17
+ console.log(`
18
+ astron-eval v${version} — AI 模型评测技能集安装工具
19
+
20
+ 用法:
21
+ npx astron-eval [options]
22
+
23
+ 选项:
24
+ --global 安装到用户主目录(默认)
25
+ --local 安装到当前项目目录
26
+ --claude 目标目录为 .claude(默认)
27
+ --openclaw 目标目录为 .openclaw
28
+ --opencode 目标目录为 .opencode
29
+ --codex 目标目录为 .codex
30
+ --version, -v 显示版本号
31
+ --help, -h 显示帮助信息
32
+
33
+ 示例:
34
+ # 默认安装到 ~/.claude/skills/
35
+ npx astron-eval
36
+
37
+ # 安装到当前项目 ./.claude/skills/
38
+ npx astron-eval --local
39
+
40
+ # 安装到 ~/.opencode/skills/
41
+ npx astron-eval --opencode
42
+
43
+ # 安装到当前项目 ./.codex/skills/
44
+ npx astron-eval --local --codex
45
+ `);
46
+ process.exit(0);
47
+ }
48
+
49
+ // --version
50
+ if (args.includes('--version') || args.includes('-v')) {
51
+ console.log(version);
52
+ process.exit(0);
53
+ }
54
+
55
+ // 确定安装范围(全局或本地)
56
+ const isLocal = args.includes('--local');
57
+
58
+ // 确定目标目录类型
59
+ let targetType = 'claude'; // 默认
60
+ if (args.includes('--openclaw')) {
61
+ targetType = 'openclaw';
62
+ } else if (args.includes('--opencode')) {
63
+ targetType = 'opencode';
64
+ } else if (args.includes('--codex')) {
65
+ targetType = 'codex';
66
+ } else if (args.includes('--claude')) {
67
+ targetType = 'claude';
68
+ }
69
+
70
+ // 构建目标路径
71
+ const baseDir = isLocal ? process.cwd() : homedir();
72
+ const targetBase = resolve(baseDir, `.${targetType}`, 'skills');
73
+
74
+ // 包内 skills 源目录
75
+ const srcSkills = resolve(__dirname, '..', 'skills');
76
+
77
+ // 技能描述映射
78
+ const descriptions = {
79
+ 'astron-eval': '星评测套件快捷入口',
80
+ 'model-evaluation': '模型质量评测',
81
+ 'skill-driven-eval': '技能驱动评测',
82
+ };
83
+
84
+ // 枚举 skills 子目录
85
+ const skillDirs = readdirSync(srcSkills, { withFileTypes: true })
86
+ .filter((d) => d.isDirectory())
87
+ .map((d) => d.name);
88
+
89
+ if (skillDirs.length === 0) {
90
+ console.error('错误:未找到可安装的技能');
91
+ process.exit(1);
92
+ }
93
+
94
+ // 确保目标目录存在
95
+ mkdirSync(targetBase, { recursive: true });
96
+
97
+ // 复制每个技能
98
+ for (const skill of skillDirs) {
99
+ const src = join(srcSkills, skill);
100
+ const dest = join(targetBase, skill);
101
+ cpSync(src, dest, { recursive: true, force: true });
102
+ }
103
+
104
+ // 输出摘要
105
+ const location = isLocal ? `./.${targetType}/skills/` : `~/.${targetType}/skills/`;
106
+ console.log(`\n✓ astron-eval skills installed to ${location}`);
107
+ for (const skill of skillDirs) {
108
+ const desc = descriptions[skill] || skill;
109
+ console.log(` - ${skill} (${desc})`);
110
+ }
111
+ console.log();
package/package.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "astron-eval",
3
+ "version": "0.0.1",
4
+ "description": "星评测技能套件,致力于模型&应用评测的标准化建设与自动化革新",
5
+ "type": "module",
6
+ "bin": {
7
+ "astron-eval": "./bin/astron-eval.mjs"
8
+ },
9
+ "files": [
10
+ "bin/",
11
+ "skills/"
12
+ ],
13
+ "engines": {
14
+ "node": ">=16.7.0"
15
+ },
16
+ "license": "MIT",
17
+ "keywords": [
18
+ "evaluation",
19
+ "model-testing",
20
+ "ai-evaluation",
21
+ "claude-code",
22
+ "skills"
23
+ ]
24
+ }
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: astron-eval
3
+ description: 用于星评测相关场景的统一入口与调度路由。当用户提到星评测、模型评测、评估模型效果、上传评测集、配置评测维度、提交评测任务、查看评测进度或结果、继续评测或恢复评测时,优先使用此技能;当用户想比较不同 Claude 模型执行某个技能的效果、速度、token 消耗、成本收益,或询问某个技能更适合用 Opus 还是 Sonnet 时,也应使用此技能。此技能不直接完成全部评测,而是识别用户意图并路由到对应子技能。不要用于代码评审、系统性能压测或模型训练调优。
4
+ user-invocable: true
5
+ ---
6
+
7
+ # AstronEval 路由技能
8
+
9
+ AstronEval 是评测相关场景的统一入口技能,职责不是自己完成所有评测工作,而是先识别用户到底要做哪一类评测,再把请求路由到最合适的子技能。凡是与”评测””评估””模型效果对比””任务提交与查看结果”相关的请求,优先从这里进入。
10
+
11
+ ## 路由目标
12
+
13
+ 当前 AstronEval 下有两类核心子技能。
14
+
15
+ `model-evaluation` 用于评测 AI 模型在真实业务任务上的输出质量。适合处理上传评测集、选择或配置评测维度、提交评测任务、查看评测进度、查看评测结果、继续评测、恢复评测这类请求。它关注的是“这个模型在业务任务上答得好不好”。
16
+
17
+ `skill-driven-eval` 用于比较不同 Claude 模型在执行某个技能时的实际表现。适合处理“哪个模型更适合这个技能”“Opus 和 Sonnet 谁更划算”“质量、速度、token 消耗怎么权衡”“是否值得为某个技能升级更贵模型”这类请求。它关注的是“哪个模型更适合驱动这个技能”,并通过盲评、执行记录、时间数据、token 数据和可视化报告给出对比结论。
18
+
19
+ ## 路由判断
20
+
21
+ 收到请求后,先判断用户的目标属于下面哪一类。
22
+
23
+ 第一类是“模型质量评测”。当用户想评测某个模型在问答、文案生成、信息分析、流程自动化、旅游出行、翻译等业务场景中的输出质量,或者已经有评测集、评测任务、评测结果需要继续处理时,路由到 `model-evaluation`。
24
+
25
+ 第二类是“技能驱动模型对比”。当用户已经有一个技能,想知道不同 Claude 模型执行这个技能时哪个更好、哪个更快、哪个更省 token、是否值得增加成本时,路由到 `skill-driven-eval`。
26
+
27
+ 如果用户同时提到“评测”和“模型对比”,不要只看关键词,要看问题核心。只要问题核心是“比较不同 Claude 模型执行某个技能的表现”,就应该优先路由到 `skill-driven-eval`;只要问题核心是“评测某个模型在业务任务上的输出质量”,就应该优先路由到 `model-evaluation`。
28
+
29
+ ## 模糊场景处理
30
+
31
+ 当用户表达不够清楚时,不要直接假设,先用一句中文澄清核心目标。澄清重点只有一个:用户到底是想评测模型在业务任务上的效果,还是想比较不同 Claude 模型执行某个技能的表现。
32
+
33
+ 可直接这样问:
34
+
35
+ “你现在是想做模型业务效果评测,还是想比较不同 Claude 模型执行某个技能的效果、速度和成本?”
36
+
37
+ 只在确实无法判断时提问;能够根据上下文判断时,直接路由并说明理由。
38
+
39
+ ## 不适用场景
40
+
41
+ 以下情况不要路由到 AstronEval 的现有评测子技能:
42
+
43
+ - 代码评审、代码质量分析、PR review
44
+ - 系统接口压测、服务性能测试、数据库性能优化
45
+ - 模型训练、微调、调参、loss 分析
46
+ - 与评测无关的一般工程开发任务
47
+
48
+ 这类请求虽然也可能出现”测试””评估””benchmark”等词,但不属于 AstronEval 当前的评测范围。
49
+
50
+ ## 执行要求
51
+
52
+ 一旦判断清楚意图,立即调用对应子技能,不要在本技能中重复实现子技能已经覆盖的流程。路由后,简短告诉用户你已选择的子技能和原因即可。
53
+
54
+ 对于 `model-evaluation`,关注模型评测场景、评测集、维度、任务状态和结果查看。
55
+
56
+ 对于 `skill-driven-eval`,关注目标技能、待比较模型、测试用例、盲评、执行记录、时间与 token 指标,以及最终的比较报告。
57
+
58
+ ## 扩展方式
59
+
60
+ 后续 AstronEval 新增评测子技能时,在本文件中补充该技能解决的问题边界、典型触发语句和与现有技能的区分标准。新增的子技能仍应遵循同一原则:先判断评测目标,再路由到专门技能,而不是在入口技能中堆叠全部实现细节。
@@ -0,0 +1,180 @@
1
+ ---
2
+ name: model-evaluation
3
+ description: 当用户提到'模型评测'/'评测模型'/'评估模型'/'测试模型效果',或'查看评测进度'/'查看评测结果',或说'继续评测'/'恢复评测'时使用。协助完成AI模型评测任务的全流程管理,包括评测集处理、维度配置、任务提交和结果查看。
4
+ user-invocable: false
5
+ ---
6
+
7
+ # 模型评测技能
8
+
9
+ ## 概述
10
+
11
+ 协助用户完成AI模型评测任务的全流程管理。
12
+
13
+ **核心原则**:自动识别优先,渐进式确认,可恢复执行。
14
+
15
+ **适用场景**:评测大模型(LLM)输出质量
16
+
17
+ **不适用场景**(引导用户使用其他方式):
18
+ - 代码质量审查 → 建议使用代码审查工具
19
+ - 系统性能测试 → 建议使用性能测试框架
20
+ - 模型训练/微调 → 不属于评测范畴
21
+
22
+ ---
23
+
24
+ ## 处理阶段
25
+
26
+ | 阶段 | 文档 | 核心任务 |
27
+ |------|------|----------|
28
+ | 初始化 | [eval-init.md](./eval-init.md) | 环境检测、鉴权验证、会话目录 |
29
+ | 构建配置 | [eval-build.md](./eval-build.md) | 场景确认、评测标准确认、评委配置、评测集处理 |
30
+ | 执行评测 | [eval-execute.md](./eval-execute.md) | 任务提交、状态监控、结果展示 |
31
+
32
+ **执行流程**:阶段1 → 阶段2 → 阶段3 → 评测结束
33
+
34
+ ---
35
+
36
+ ## 流程感知
37
+
38
+ **目标**:让用户清晰了解评测流程的全貌和当前进度。
39
+
40
+ ### 流程入口展示
41
+
42
+ 技能加载后,首次执行任何任务前,必须展示流程概览:
43
+
44
+ > **评测流程概览**
45
+ >
46
+ > **1. 初始化**
47
+ > 环境及依赖检测 → 验证鉴权Token → 确认会话目录
48
+ >
49
+ > **2. 构建配置**
50
+ > 确认评测场景 → 确认评测标准 → 配置评委 → 处理评测集
51
+ >
52
+ > **3. 执行评测**
53
+ > 提交评测任务 → 监控执行状态 → 展示评测结果
54
+
55
+ ### 阶段进度跟踪
56
+
57
+ 进入每个阶段时,必须:
58
+
59
+ 1. **展示阶段信息**:输出当前阶段名称和核心任务流程
60
+ 2. **使用 TodoWrite 初始化任务列表**:将该阶段任务添加到 TodoWrite
61
+ 3. **执行时更新状态**:开始任务时标记进行中,完成时标记已完成
62
+ 4. **阶段结束时告知进度**:展示完成摘要,提示进入下一阶段
63
+
64
+ **⚠️ 输出顺序要求**:文本信息优先于工具调用
65
+
66
+ 进入阶段或任务时,遵循以下顺序:
67
+
68
+ | 顺序 | 操作 | 说明 |
69
+ |------|------|------|
70
+ | 1 | 文本输出阶段信息 | 让用户先理解上下文 |
71
+ | 2 | TodoWrite 初始化任务列表 | 首个任务标记为 in_progress |
72
+ | 3 | 文本输出当前任务信息 | 展示具体任务内容 |
73
+ | 4 | 执行具体步骤 | 调用脚本、读取文件等 |
74
+
75
+ **错误示例**:TodoWrite → 文本 → TodoWrite → 文本(工具调用打断信息流)
76
+
77
+ **正确示例**:文本(阶段)→ TodoWrite → 文本(任务)→ 执行步骤
78
+
79
+ ### 状态标记
80
+
81
+ ⬜ 待开始 → 🔄 进行中 → ✅ 已完成
82
+
83
+ **⚠️ 阶段执行规则**:
84
+
85
+ 1. **默认按序执行**:无明确意图时,从初始化阶段开始,按顺序执行各阶段任务
86
+ 2. **用户指明时可跳转**:用户明确指明要进行某个阶段、任务或步骤时,可直接进入该位置执行
87
+ 3. **阶段内自动流转**:当前阶段全部任务完成后,自动进入下一阶段,无需询问用户
88
+
89
+ **错误示例**:
90
+ - ❌ 用户说"开始新评测"后直接询问评测集 → 用户意图是新建评测,应从初始化阶段开始,评测集属于构建阶段任务4,不可提前询问
91
+ - ✅ 用户说"我要配置评测集" → 用户明确指明任务,可直接进入构建阶段任务4
92
+
93
+ ---
94
+
95
+ ## 交互规范
96
+
97
+ ### 渐进式交互
98
+
99
+ | 场景 | 处理方式 |
100
+ |------|----------|
101
+ | 可自动推断 | 直接处理,仅做结果确认 |
102
+ | 需用户确认 | 提供候选项供选择(AskUserQuestion) |
103
+ | 需用户输入 | 直接请求输入(文本输入) |
104
+
105
+ **判断标准**:能否提前列出所有有效答案?能→AskUserQuestion,不能→文本输入。
106
+
107
+ **帮助触发**:用户困惑("不懂"、"怎么...")时暂停并解释;关键步骤前可附带"了解更多"。
108
+
109
+ ### 命令执行
110
+
111
+ **禁止复合命令**,逐条执行:
112
+
113
+ ```bash
114
+ mkdir -p dir
115
+ cd dir
116
+ python script.py
117
+ ```
118
+
119
+ ### 可恢复性
120
+
121
+ 失败时:清晰解释原因 → 说明当前进度 → 指明下一步操作 → 保留已完成产物
122
+
123
+ ---
124
+
125
+ ## Red Flags
126
+
127
+ **常见借口与纠正**:
128
+
129
+ | 借口 | 现实 |
130
+ |------|------|
131
+ | "用户应该知道选哪个" | 用户可能不清楚概念,需展示选项 |
132
+ | "这个确认可以跳过" | 所有确认步骤都是必需的 |
133
+ | "复合命令更快" | 复合命令难以调试,必须拆分 |
134
+ | "默认配置就行" | 维度权重影响评测结果,必须确认 |
135
+ | "这个信息可以先问" | 当前阶段未完成且用户未指明跳转时,不可提前询问后续任务信息 |
136
+
137
+ ---
138
+
139
+ ## 目录结构
140
+
141
+ ### 技能目录
142
+
143
+ ```
144
+ {skill-dir}/.claude/skills/model-evaluation/
145
+ ├── SKILL.md, eval-init.md, eval-build.md, eval-execute.md
146
+ ├── assets/ # 资源文件:eval-judge.json, experts/, dimensions/
147
+ ├── processes/ # 独立流程:evalset-create-process.md, evalset-parse-process.md, dimension-process.md, keypoint-process.md
148
+ ├── references/ # 参考文档:服务接口、中间产物、脚本定义、模板说明
149
+ └── scripts/ # 可执行脚本:eval_auth.py, eval_set.py, eval_task.py, eval_dimension.py
150
+ ```
151
+
152
+ > ⚠️ `assets/` 目录存放**内置模板**,**只读不可写**。自定义模板应放在工作目录 `{work-dir}/.eval/{session-id}/`。
153
+
154
+ ### 工作目录
155
+
156
+ ```
157
+ {work-dir}/.eval/
158
+ ├── auth.json # 鉴权Token
159
+ └── session-{id}/ # 会话目录
160
+ ├── evalset/ # 评测集相关文件
161
+ ├── evaltask/ # 任务相关文件
162
+ ├── eval-dimension.json # 维度配置
163
+ └── eval-judge.json # 评委配置
164
+ ```
165
+
166
+ ---
167
+
168
+ ## 变量速查
169
+
170
+ | 变量 | 说明 |
171
+ |------|------|
172
+ | `{python-cmd}` | Python命令,根据初始化阶段检测结果为 `python` 或 `python3` |
173
+ | `{python-env}` | Python环境变量前缀,Windows非UTF-8终端为 `PYTHONUTF8=1 `,其他情况为空 |
174
+ | `{work-dir}` | 当前工作目录 |
175
+ | `{session-id}` | 会话目录名,格式 `session-{8位字母数字}` |
176
+ | `{skill-dir}` | 技能安装目录 |
177
+ | `{state_token}` | OAuth授权状态令牌(UUID格式) |
178
+ | `{auth_code}` | 用户授权后获得的授权码 |
179
+ | `{task_id}` | 评测任务ID |
180
+ | `{ext}` | 文件扩展名 |
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "内容相关性",
3
+ "description": "助手响应内容和用户问题的相关性。例如,用户问题是出一份五一合肥周边亲子游行程,助手响应要输出五一&合肥周边&亲子游的行程规划强相关的内容",
4
+ "config": {
5
+ "name": "内容相关性",
6
+ "type": "llm-judge",
7
+ "judge_id": "",
8
+ "params": {
9
+ "answer": "answer",
10
+ "reference": "reference"
11
+ },
12
+ "prompt": {
13
+ "role": "",
14
+ "definition": "助手响应内容和用户问题的相关性。\r\n例如,用户问题是出一份五一合肥周边亲子游行程,助手响应要输出五一&合肥周边&亲子游的行程规划强相关的内容。",
15
+ "instruct": "助手响应内容是否与用户问题强相关,是通过,否不通过。\r\n\r\n评分建议:\r\n - 评判过程要考虑助手响应内容是否满足用户需求,比如指定的时间、路线、途经点、穿越点等等。不考虑行程安排是否合理。\r\n - 如果用户需求是一日游,但助手响应安排了住宿,不影响相关性评判。\r\n - 如果助手响应的全部内容只是说明其会生成或已生成相关内容,但是实际并没有对应内容,则认为不通过。",
16
+ "step": "注意,整个评判过程必须只考虑该评测维度,并严格遵循评分标准和评分建议进行评分。\r\n另外,整个评判过程必须忽略用户对字数的要求和限制,不考虑助手响应是否满足字数要求。\r\n\r\n请遵循下面的步骤进行评判:\r\n 1. 深入分析用户问题,识别用户的具体诉求。\r\n 2. 结合对话场景深入分析助手响应。\r\n 3. 准确把握当前的维度说明和评判标准等,区分是客观判断还是主观评分。\r\n 4. 以裁判的视角结合场景和评判维度对助手响应进行评判。\r\n 5. 先清晰地陈述评判依据,再得出最终的评判结果。如果是评分方式,评判结果只能是评分标准中列举的分数值。\r\n 6. 严格按照输出格式要求提供最终的输出内容。"
17
+ },
18
+ "weight": 0.15
19
+ }
20
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "内容精确",
3
+ "description": "大模型回复是否符合预期",
4
+ "config": {
5
+ "name": "内容精确",
6
+ "type": "builtin",
7
+ "params": {
8
+ "answer": "answer",
9
+ "reference": "reference"
10
+ },
11
+ "prompt": {
12
+ "role": "",
13
+ "definition": "大模型回复是否符合预期",
14
+ "instruct": "",
15
+ "step": ""
16
+ },
17
+ "func": "EQUAL"
18
+ }
19
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "准确性",
3
+ "description": "推荐项的信息是否精确可靠,包括价格、时间、可用性、联系方式等。需通过Agent联动外部数据源验证",
4
+ "config": {
5
+ "name": "准确性",
6
+ "type": "llm-score",
7
+ "judge_id": "",
8
+ "params": {
9
+ "answer": "answer",
10
+ "reference": "reference"
11
+ },
12
+ "prompt": {
13
+ "role": "",
14
+ "definition": "推荐项的信息是否精确可靠,包括价格、时间、可用性、联系方式等。需通过Agent联动外部数据源验证。",
15
+ "instruct": "5分:完全准确,90%及以上信息正确。所有关键信息(价格、时间、地点、状态)均准确无误\n3分:正确率在60%-90%之间(左闭右开)。大部分信息准确,存在少量次要信息错误\n1分:正确率低于60%。多数信息错误或关键信息错误(如价格错误、时间错误)",
16
+ "step": "请遵循下面的步骤进行评判:\n1. 深入分析用户问题,识别用户的具体诉求。\n2. 结合对话场景深入分析助手响应。\n3. 深入理解评测维度,准确把握当前评测维度中的维度说明和评测标准等。\n4. 以裁判的视角结合场景和评测维度对助手响应进行评测,评测过程只考虑该评测维度,并严格遵循评测标准。\n5. 先清晰地陈述评判依据,再得出最终的评判结果。如果是评分方式,评判结果只能是评测标准中列举的分数值。\n6. 严格按照输出格式要求提供最终的输出内容。"
17
+ },
18
+ "weight": 0.2
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "准确性",
3
+ "description": "聚合的数据是否准确,引用的数据是否正确,是否存在虚构或错误数据",
4
+ "config": {
5
+ "name": "准确性",
6
+ "type": "llm-score",
7
+ "judge_id": "",
8
+ "params": {
9
+ "answer": "answer",
10
+ "reference": "reference"
11
+ },
12
+ "prompt": {
13
+ "role": "",
14
+ "definition": "聚合的数据是否准确,引用的数据是否正确,是否存在虚构或错误数据。",
15
+ "instruct": "5分:完全准确,90%及以上数据正确。所有引用数据均正确,来源可靠\n3分:正确率在60%-90%之间(左闭右开)。大部分数据准确,存在少量次要数据错误\n1分:正确率低于60%。多数数据错误或关键数据错误",
16
+ "step": "请遵循下面的步骤进行评判:\n1. 深入分析用户问题,识别用户的具体诉求。\n2. 结合对话场景深入分析助手响应。\n3. 深入理解评测维度,准确把握当前评测维度中的维度说明和评测标准等。\n4. 以裁判的视角结合场景和评测维度对助手响应进行评测,评测过程只考虑该评测维度,并严格遵循评测标准。\n5. 先清晰地陈述评判依据,再得出最终的评判结果。如果是评分方式,评判结果只能是评测标准中列举的分数值。\n6. 严格按照输出格式要求提供最终的输出内容。\n\n\n"
17
+ },
18
+ "weight": 0.25
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "准确性",
3
+ "description": "响应对元素准确性的校验,枚举需检查准确性元素为:景点信息、交通方式&价格、门票、住宿地点&价格",
4
+ "config": {
5
+ "name": "准确性",
6
+ "type": "llm-score",
7
+ "judge_id": "",
8
+ "params": {
9
+ "answer": "answer",
10
+ "reference": "reference"
11
+ },
12
+ "prompt": {
13
+ "role": "",
14
+ "definition": "响应对元素准确性的校验,枚举需检查准确性元素为:景点信息、交通方式&价格、门票、住宿地点&价格。",
15
+ "instruct": "5分:完全准确:\r\n所有元素信息完全正确,包括不限于交通方式、时间、价格与信源数据一致,景点开放时间、门票价格标注最新来源(如2024年官网),天气、必需物品、美食推荐、费用预算等数据真实可靠。无任何虚构内容(0处'小众秘境''独家路线'等误导表述)\r\n4分:存在瑕疵:\r\n≥90%的元素信息正确,存在10%的元素出现误差。\r\n3分:基本正确:\r\n≥60%的元素信息正确,如推荐的酒店已拆迁。\r\n2分:大部分错误:\r\n≥40%元素正确,存在较多的错误,如景点开放时间、门票价格与信源不符;必需物品遗漏关键项(如身份证未提及)。\r\n弱元素错误较多:如推荐的酒店已拆迁、美食菜品与当地不符\r\n1分:严重失实:\r\n≥20%元素信息正确,绝大多数元素错误严重影响可用性:\r\n如交通方式不可行(如推荐停运的列车班次)、核心景点信息错误(如营业时间完全颠倒)、多数推荐内容不真实(如虚构餐厅、酒店)\r\n0分:完全不可信:\r\n元素全部错误:交通、景点、门票等核心信息均为虚构;涉及敏感内容或高风险活动(如推荐政治争议地点)",
16
+ "step": "注意,整个评判过程必须只考虑该评测维度,并严格遵循评分标准和评分建议进行评分。\r\n另外,整个评判过程必须忽略用户对字数的要求和限制,不考虑助手响应是否满足字数要求。\r\n\r\n请遵循下面的步骤进行评判:\r\n 1. 深入分析用户问题,识别用户的具体诉求。\r\n 2. 结合对话场景深入分析助手响应。\r\n 3. 准确把握当前的维度说明和评判标准等,区分是客观判断还是主观评分。\r\n 4. 以裁判的视角结合场景和评判维度对助手响应进行评判。\r\n 5. 先清晰地陈述评判依据,再得出最终的评判结果。如果是评分方式,评判结果只能是评分标准中列举的分数值。\r\n 6. 严格按照输出格式要求提供最终的输出内容。"
17
+ },
18
+ "weight": 0.15
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "准确性",
3
+ "description": "工具调用准确性:工具名称、参数值、调用顺序是否正确;输出结果准确性:执行结果是否符合预期",
4
+ "config": {
5
+ "name": "准确性",
6
+ "type": "llm-score",
7
+ "judge_id": "",
8
+ "params": {
9
+ "answer": "answer",
10
+ "reference": "reference"
11
+ },
12
+ "prompt": {
13
+ "role": "",
14
+ "definition": "工具调用准确性:工具名称、参数值、调用顺序是否正确\n输出结果准确性:执行结果是否符合预期(SQL语句、判罚结果、生成内容等)",
15
+ "instruct": "5分:工具调用完全正确,输出结果完全准确。工具名称、参数、顺序均正确,结果符合预期\n3分:次要参数错误,但核心功能正确。工具名称和关键参数正确,次要参数有瑕疵,结果基本可用\n1分:工具名称错误或关键参数错误。调用了错误的工具或关键参数错误,导致执行失败或结果错误\n0分:API调用失败或未调用工具。无法执行任务\n\n典型测试用例:\nText2SQL场景:\n用户:\"\"查询销售额大于10000的产品\"\"\n期望SQL:SELECT * FROM products WHERE sales > 10000\n5分:生成正确的SQL并返回正确结果\n1分:SQL语法错误或查询结果错误",
16
+ "step": "请遵循下面的步骤进行评判:\n1. 深入分析用户问题,识别用户的具体诉求。\n2. 结合对话场景深入分析助手响应。\n3. 深入理解评测维度,准确把握当前评测维度中的维度说明和评测标准等。\n4. 以裁判的视角结合场景和评测维度对助手响应进行评测,评测过程只考虑该评测维度,并严格遵循评测标准。\n5. 先清晰地陈述评判依据,再得出最终的评判结果。如果是评分方式,评判结果只能是评测标准中列举的分数值。\n6. 严格按照输出格式要求提供最终的输出内容。"
17
+ },
18
+ "weight": 0.3
19
+ }
20
+ }