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
@@ -0,0 +1,171 @@
1
+ ---
2
+ name: evalset-parse-process
3
+ description: Use when user has an existing evaluation dataset file and needs to parse field mapping
4
+ ---
5
+
6
+ # 评测集解析流程
7
+
8
+ ## 目标
9
+
10
+ 获取评测集文件 → 解析字段结构 → 生成映射配置 → 用户确认,完成后返回标准化转换流程。
11
+
12
+ ---
13
+
14
+ ## 何时使用
15
+
16
+ - 用户已有完整评测集文件(JSONL/JSON/CSV/XLSX)
17
+ - 需要解析字段映射关系
18
+ - 接收生成流程或补充流程输出的评测集
19
+
20
+ ---
21
+
22
+ ## 步骤1:获取评测集文件
23
+
24
+ **判断**:`evalset-prepared.{ext}` 是否存在?
25
+
26
+ | 状态 | 动作 |
27
+ |------|------|
28
+ | 已存在 | → 步骤2 |
29
+ | 不存在 | 执行如下命令,获取用户文件 |
30
+
31
+ ```bash
32
+ cp {用户路径} {work-dir}/.eval/{session-id}/evalset/evalset-prepared.{ext}
33
+ # 或远程下载
34
+ curl -o {work-dir}/.eval/{session-id}/evalset/evalset-prepared.{ext} {下载链接}
35
+ ```
36
+
37
+ > `{ext}` 从文件路径提取(如 `data.xlsx` → `ext=xlsx`)。
38
+
39
+ ---
40
+
41
+ ## 步骤2:解析字段结构
42
+
43
+ **判断**:`evalset-structure.json` 是否存在?
44
+
45
+ | 状态 | 动作 |
46
+ |------|------|
47
+ | 已存在 | → 步骤3 |
48
+ | 不存在 | 执行解析 |
49
+
50
+ ```bash
51
+ {python-env}{python-cmd} {skill-dir}/scripts/eval_set.py analysis \
52
+ --input {work-dir}/.eval/{session-id}/evalset/evalset-prepared.{ext} \
53
+ --output {work-dir}/.eval/{session-id}/evalset/evalset-structure.json
54
+ ```
55
+
56
+ 输出包含:`file`、`format`、`total_rows`、`fields`(字段名+类型)。
57
+
58
+ ---
59
+
60
+ ## 步骤3:生成字段映射
61
+
62
+ **判断**:`evalset-fields-mapping.json` 是否存在?
63
+
64
+ | 状态 | 动作 |
65
+ |------|------|
66
+ | 已存在 | → 步骤4 |
67
+ | 不存在 | 生成映射 |
68
+
69
+ 读取结构文件 → 匹配字段 → 生成映射配置。
70
+
71
+ ### 字段匹配关键词表
72
+
73
+ | 标准字段 | 含义 | 匹配关键词 |
74
+ |----------|------|------------|
75
+ | question | 评测输入问题 | question, prompt, input, query, 问题, 提问 |
76
+ | answer | 模型实际回答 | answer, response, output, reply, 回答, 回复 |
77
+ | model | 生成回答的模型标识 | model, model_name, model_id, llm, llm_name, 模型, 模型名称 |
78
+ | case_id | 用例唯一标识,用于关联同一问题的多模型回答 | case_id, caseid, 用例id;**精确匹配**:id |
79
+ | system | 系统提示词 | system, system_prompt, 系统提示 |
80
+ | context | 附加上下文信息 | context, 上下文 |
81
+ | category | 用例分类标签 | category, type, 分类, 类别 |
82
+ | reference | 参考答案,用于评分对比 | reference, ref, gold, 参考答案, 标准答案 |
83
+ | keypoint | 评测关键点,用于细粒度评分 | keypoint, keypoints, 关键点, 评测点 |
84
+
85
+ **匹配规则**:精确匹配优先,包含匹配次之(优先更长关键词)。
86
+
87
+ **必填字段**:question、answer、model、case_id。
88
+
89
+ ### 映射格式
90
+
91
+ ```json
92
+ {
93
+ "question": {"source_field": "问题", "default": null},
94
+ "answer": {"source_field": "回答", "default": null},
95
+ "model": {"source_field": "模型名称", "default": null},
96
+ "case_id": {"source_field": "id", "default": null}
97
+ }
98
+ ```
99
+
100
+ **生成规则**:匹配到 → `source_field=源字段名`;未匹配到 → `source_field=null, default=待确认`。
101
+
102
+ > `case_id` 的 `default` 不使用,有 `source_field` 用源数据值,无则自动生成。
103
+
104
+ ---
105
+
106
+ ## 步骤4:确认映射配置
107
+
108
+ > 注意,如果先前评测集全部由AI助手生成,则跳过此步骤。因为评测集都是按标准格式生成,无需用户确认映射配置。
109
+
110
+ **判断**:用户是否已确认映射?
111
+
112
+ | 状态 | 动作 |
113
+ |------|------|
114
+ | 已确认 | → 保存并返回 |
115
+ | 未确认 | 执行确认流程 |
116
+
117
+ ### 4.1 字段映射确认
118
+
119
+ 向用户说明映射目的:将评测集的原始字段映射为标准字段,标准化后便于后续统一处理(标准化转换、评测执行、评分判定等环节均基于标准字段工作)。
120
+
121
+ 展示映射表(含标准字段含义),等待用户确认。
122
+
123
+ > **此步骤必须等待用户确认,不可跳过。**
124
+
125
+ | 用户选择 | 后续动作 |
126
+ |----------|----------|
127
+ | Y | → 4.2 |
128
+ | n | 调整映射,重新确认 |
129
+
130
+ ### 4.2 模型字段确认
131
+
132
+ | model.source_field | 处理 |
133
+ |---------------------|------|
134
+ | 有值 | 直接使用源字段值,无需询问 |
135
+ | null | 询问评测场景:多模型横评→提示需补充模型字段,单模型→设置default字段值 |
136
+
137
+ ### 4.3 case_id 字段确认
138
+
139
+ | case_id.source_field | 处理 |
140
+ |-----------------------|------|
141
+ | 有值 | 直接使用源数据值 |
142
+ | null | 标准化时根据 question 分组自动生成 |
143
+
144
+ > 多模型横评时,同一问题的不同模型回答共享相同 case_id。
145
+
146
+ ### 4.4 保存
147
+
148
+ 保存至 `{work-dir}/.eval/{session-id}/evalset/evalset-fields-mapping.json`,返回 **eval-build.md 任务4步骤4**(标准化转换)。
149
+
150
+ ---
151
+
152
+ ## 常见错误
153
+
154
+ | 错误 | 解决方案 |
155
+ |------|----------|
156
+ | 字段匹配失败 | 手动指定映射 |
157
+ | 文件格式不支持 | 转换为JSONL/JSON/CSV/XLSX |
158
+ | 结构解析报错 | 检查编码,转为UTF-8 |
159
+
160
+ ---
161
+
162
+ ## 变量速查
163
+
164
+ | 变量 | 说明 |
165
+ |------|------|
166
+ | `{work-dir}` | 当前工作目录 |
167
+ | `{session-id}` | 会话目录名(`session-{8位字母数字}`) |
168
+ | `{skill-dir}` | 技能安装目录 |
169
+ | `{ext}` | 文件扩展名 |
170
+ | `{python-env}` | Python环境变量前缀 |
171
+ | `{python-cmd}` | Python命令 |
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: evalset-supplement-process
3
+ description: Use when user has a question-only evaluation dataset and needs AI to generate answers
4
+ ---
5
+
6
+ # 评测集补充答案流程
7
+
8
+ 本文档定义补充答案流程,为仅有问题的评测集生成答案。
9
+
10
+ ---
11
+
12
+ ## 触发条件
13
+
14
+ 用户仅有问题评测集,需AI补充答案。
15
+
16
+ ---
17
+
18
+ ## 目标
19
+
20
+ 读取仅有问题的文件,AI 为每条问题生成答案,输出为 JSONL 格式。
21
+
22
+ ---
23
+
24
+ ## 步骤1:获取问题集
25
+
26
+ 支持格式:JSONL、JSON、CSV、Excel(xlsx)
27
+
28
+ ```
29
+ 请提供仅有问题的评测集文件:
30
+ ```
31
+
32
+ 复制文件至:`{work-dir}/.eval/{session-id}/evalset/evalset-questions.{ext}`
33
+
34
+ **注意**:Excel 格式仅作为输入,输出统一转为 JSONL。
35
+
36
+ ---
37
+
38
+ ## 步骤2:验证文件格式
39
+
40
+ 执行脚本验证文件结构:
41
+
42
+ ```bash
43
+ {python-env}{python-cmd} {skill-dir}/scripts/eval_set.py analysis \
44
+ --input {work-dir}/.eval/{session-id}/evalset/evalset-questions.{ext} \
45
+ --output {work-dir}/.eval/{session-id}/evalset/evalset-structure.json
46
+ ```
47
+
48
+ 验证结果:
49
+ - 文件格式有效(JSONL/JSON/CSV/Excel)
50
+ - 包含 `question` 字段
51
+ - 缺少或为空 `answer` 字段
52
+
53
+ - **验证通过** → 进入步骤3
54
+ - **验证失败** → 提示错误,返回步骤1
55
+
56
+ ---
57
+
58
+ ## 步骤3:AI 生成答案
59
+
60
+ 遍历每条问题,生成理想参考答案。
61
+
62
+ **主 Agent 职责**(格式处理):
63
+ - JSONL 格式:直接读取问题列表
64
+ - 其他格式:读取文件 → 转换为问题列表 → 准备接收答案
65
+ - 答案生成后:添加 `answer` 字段 → 输出 JSONL
66
+
67
+ **SubAgent 职责**(仅答案生成,大批量时启用):
68
+ - 输入:问题文本列表
69
+ - 输出:答案文本列表
70
+ - 不涉及:文件读取、格式转换、文件写入
71
+
72
+ **执行方式**:
73
+ - 数据量 ≤50 条:主 Agent 直接生成
74
+ - 数据量 >50 条:可选使用 SubAgent 分批生成答案
75
+ - 主 Agent context 满载时:必须使用 SubAgent 分批生成
76
+
77
+ **生成要求**:
78
+ - 答案完整、准确、符合问题要求
79
+ - 作为评测基准
80
+ - 保留原始字段,仅补充 `answer` 字段
81
+
82
+ 保存至:`{work-dir}/.eval/{session-id}/evalset/evalset-prepared.jsonl`
83
+
84
+ ---
85
+
86
+ ## 步骤4:预览与确认
87
+
88
+ 展示前3条数据,等待用户确认:
89
+
90
+ ```
91
+ 是否确认保存?(Y/n/重新生成)
92
+ ```
93
+
94
+ **⚠️ 不可跳过**:此步骤必须等待用户确认。
95
+
96
+ - **Y** → 返回解析流程
97
+ - **n** → 取消补充,返回步骤1
98
+ - **重新生成** → 返回步骤3
99
+
100
+ ---
101
+
102
+ ## 返回点
103
+
104
+ 流程结束后返回 **eval-build.md 任务4步骤3**(执行解析流程)。
105
+
106
+ ---
107
+
108
+ ## 常见错误
109
+
110
+ | 错误 | 原因 | 解决方案 |
111
+ |------|------|----------|
112
+ | 文件格式不支持 | 文件不是 JSONL/JSON/CSV/Excel 格式 | 转换为支持的格式后重试 |
113
+ | 缺少 question 字段 | 文件不包含问题字段 | 确保文件包含 `question` 字段 |
114
+ | 答案风格不一致 | 多个 SubAgent 生成风格差异 | 主 Agent 后处理统一风格,或单 Agent 生成 |
115
+ | 用户确认被跳过 | ClaudeCode 直接保存 | 预览步骤标注 `⚠️ 不可跳过`,必须等待确认 |
116
+
117
+ ---
118
+
119
+ ## 产物命名规范
120
+
121
+ | 产物 | 说明 |
122
+ |------|------|
123
+ | `evalset-prepared.jsonl` | JSONL 格式评测集(含答案) |
124
+
125
+ ---
126
+
127
+ ## 变量速查
128
+
129
+ | 变量 | 说明 |
130
+ |------|------|
131
+ | `{work-dir}` | 当前工作目录 |
132
+ | `{session-id}` | 会话目录名,格式 `session-{8位字母数字}` |
133
+ | `{ext}` | 文件扩展名(jsonl/json/csv/xlsx) |
134
+ | `{skill-dir}` | 技能安装目录 |
135
+ | `{python-env}` | Python环境变量前缀 |
136
+ | `{python-cmd}` | Python命令(`python` 或 `python3`) |
@@ -0,0 +1,148 @@
1
+ ---
2
+ name: keypoint-process
3
+ description: Use when case-level evaluation requires generating keypoints for evaluation items
4
+ ---
5
+
6
+ # 评测点生成流程
7
+
8
+ **触发条件**:定制用例级评测且标准化评测集无 keypoint 字段。
9
+
10
+ **目标**:根据问题、参考答案、上下文字段自动生成 1-3 个评测点,覆盖原 evalset-standard.jsonl 文件。
11
+
12
+ ---
13
+
14
+ ## 步骤1:场景判断
15
+
16
+ 根据标准化评测集字段组合识别场景类型。
17
+
18
+ **字段说明**
19
+
20
+ | 字段 | 字母代表 | 说明 | 用途 |
21
+ |------|------|------|------|
22
+ | `question` | Q | 用户问题 | 评测的核心输入 |
23
+ | `answer` | - |模型输出的回答 | 待评测内容,**不是参考答案** |
24
+ | `reference` | R | 参考答案/理想答案 | 用于提炼评测要点 |
25
+ | `context` | C | 上下文信息 | 用于理解问题背景 |
26
+
27
+ **重要区分**:
28
+ - `answer` 是待评测的模型输出,不属于场景判断的依据
29
+ - `reference` 才是参考答案,用于场景判断和评测点生成
30
+
31
+ | 场景 | 包含字段 | 评估点来源 | 典型用途 |
32
+ |------|----------|------------|----------|
33
+ | Q | 仅 `question` | 基于问题推断 | 通用数据集(质量一般) |
34
+ | QR | `question` + `reference` | 从参考答案提炼关键信息点 | 通用数据集(推荐) |
35
+ | QC | `question` + `context` | 从上下文推导应提取的要点 | 私域数据集 |
36
+ | QRC | `question` + `reference` + `context` | 最佳效果 | 私域数据集(推荐) |
37
+
38
+ **判断逻辑**(忽略 `answer` 字段):
39
+ ```
40
+ if reference AND context: scene = "QRC"
41
+ elif reference: scene = "QR"
42
+ elif context: scene = "QC"
43
+ else: scene = "Q"
44
+ ```
45
+
46
+ ---
47
+
48
+ ## 步骤2:生成评测点
49
+
50
+ 调用 `{skill-dir}/scripts/utils/keypoint_prompts.py` 生成提示词:
51
+
52
+ - **系统提示词**:使用 `SYSTEM_PROMPT`(包含四步思考法和7条质量标准)
53
+ - **用户提示词**:使用 `build_user_prompt(question, answer, context)` 构建
54
+
55
+ ### 执行方式:
56
+
57
+ 1. **准备提示词**:
58
+ - 读取 `keypoint_prompts.py` 中的 `SYSTEM_PROMPT` 作为系统提示词
59
+ - 使用 `build_user_prompt(question, reference, context)` 构建用户提示词
60
+
61
+ 2. **调用内置模型**:
62
+ - 使用 Agent 工具(subagent_type=general-purpose)批量生成评测点
63
+ - 每条数据独立生成,确保评测点质量
64
+
65
+ 3. **执行示例**:
66
+ ```python
67
+ # 构建提示词
68
+ from keypoint_prompts import SYSTEM_PROMPT, build_user_prompt
69
+
70
+ user_prompt = build_user_prompt(question, reference, context)
71
+
72
+ # 通过 Agent 工具调用内置模型生成
73
+ # Agent prompt 示例:
74
+ # f"{SYSTEM_PROMPT}\n\n{user_prompt}"
75
+ ```
76
+
77
+ 4. **批量处理建议**:
78
+ - 数据量 ≤ 50 条:主 Agent 直接生成
79
+ - 数据量 > 50 条:使用 Agent 工具分批执行
80
+ - 主 Agent context 满载时:必须使用 SubAgent 分批生成
81
+
82
+ **⚠️ 禁止行为**:
83
+ - ❌ 不调用模型直接"编造"评测点
84
+ - ❌ 跳过 SYSTEM_PROMPT 中的思考步骤
85
+ - ❌ 忽略质量标准要求
86
+
87
+ ### 输出格式:
88
+ ```json
89
+ ["是否提及xxx", "是否包含xxx"]
90
+ ```
91
+
92
+ ### 失败处理
93
+ - 评测点生成失败时重试一次
94
+ - 仍失败则跳过该条数据,继续处理下一条
95
+ - 记录跳过的数据条目,最后汇总报告
96
+
97
+ ---
98
+
99
+ ## 步骤3:预览与确认
100
+
101
+ 展示**前3条**数据的评测点预览:
102
+
103
+ | 序号 | 问题 | 生成的评测点 |
104
+ |------|------|--------------|
105
+ | 1 | 什么是机器学习? | ["是否定义了机器学习", "是否提及与人工智能的关系"] |
106
+ | 2 | 如何评估模型性能? | ["是否列举评估指标", "是否说明各指标适用场景"] |
107
+ | 3 | 深度学习有哪些应用? | ["是否列举应用领域", "是否给出具体案例"] |
108
+
109
+ 预览展示后,询问用户:
110
+
111
+ ```
112
+ 是否确认保存以上评测点?
113
+ - Y:保存并覆盖原文件
114
+ - n:取消生成,不修改文件
115
+ - 调整:描述调整需求,重新生成
116
+ - 查看更多:展示更多数据的评测点
117
+ ```
118
+
119
+ **⚠️ 必须遵守**:
120
+ - 严格展示前3条数据,不得跳过
121
+ - 必须等待用户确认,不可自动继续
122
+
123
+ ---
124
+
125
+ ## 步骤4:保存结果
126
+
127
+ 将 keypoint 字段添加到原 `{work-dir}/.eval/{session-id}/evalset/evalset-standard.jsonl`文件:
128
+
129
+ **字段格式**:字符串数组转为 JSON 字符串存储。
130
+ - 示例:`["是否...", "是否..."]` 存储为 `"[\"是否...\", \"是否...\"]"`
131
+
132
+ **注意**:覆盖原文件,不创建新文件。
133
+
134
+ ---
135
+
136
+ ## 返回点
137
+
138
+ 流程结束后返回 **任务4步骤6**(上传评测集)。
139
+
140
+ ---
141
+
142
+ ## 变量速查
143
+
144
+ | 变量 | 说明 |
145
+ |------|------|
146
+ | `{work-dir}` | 当前工作目录 |
147
+ | `{session-id}` | 会话目录名,格式 `session-{8位字母数字}` |
148
+ | `{skill-dir}` | 技能安装目录 |
@@ -0,0 +1,113 @@
1
+ # Python 环境检测流程
2
+
3
+ ## 适用场景
4
+
5
+ - 初始化阶段检测 Python 环境
6
+ - 环境缓存失效时重新检测
7
+
8
+ ## 输出
9
+
10
+ | 变量 | 说明 |
11
+ |------|------|
12
+ | `{python-cmd}` | Python 命令(`python3` 或 `python`) |
13
+ | `{python-env}` | 环境变量前缀(Windows GBK 为 `PYTHONUTF8=1 `,其他为空) |
14
+
15
+ ---
16
+
17
+ ## 流程步骤
18
+
19
+ ### 步骤1:检测 Python 命令
20
+
21
+ 依次尝试 `python3` 和 `python` 命令:
22
+
23
+ ```bash
24
+ python3 --version
25
+ ```
26
+
27
+ - **返回版本信息** → 设置 `{python-cmd}` 为 `python3` → 进入步骤2
28
+ - **命令不存在** → 尝试备用命令:
29
+
30
+ ```bash
31
+ python --version
32
+ ```
33
+
34
+ - **返回 Python 3.x** → 设置 `{python-cmd}` 为 `python`(注意,不是 `python3`) → 进入步骤2
35
+ - **返回 Python 2.x** → 查找 Python 3 路径或提示用户安装
36
+ - **命令不存在** → 提示用户安装 Python 3
37
+
38
+ ---
39
+
40
+ ### 步骤2:检测依赖
41
+
42
+ 执行一次命令检测所有依赖:
43
+
44
+ ```bash
45
+ {python-cmd} -c "
46
+ deps = [
47
+ ('requests', '必需'),
48
+ ('pandas', '可选'),
49
+ ('openpyxl', '可选')
50
+ ]
51
+ installed = []
52
+ missing = []
53
+ for name, category in deps:
54
+ try:
55
+ __import__(name)
56
+ installed.append(name)
57
+ except ImportError:
58
+ missing.append(f'{name}({category})')
59
+ print('OK' if not missing else 'MISSING')
60
+ print('已安装:', ', '.join(installed))
61
+ print('缺失:', ', '.join(missing) if missing else '无')
62
+ "
63
+ ```
64
+
65
+ **输出示例**:
66
+
67
+ | 情况 | 输出 |
68
+ |------|------|
69
+ | 全部已安装 | `OK`<br>`已安装: requests, pandas, openpyxl`<br>`缺失: 无` |
70
+ | 部分缺失 | `MISSING`<br>`已安装: requests`<br>`缺失: pandas(可选), openpyxl(可选)` |
71
+
72
+ **后续动作**:
73
+
74
+ - **输出 OK**(无缺失) → 进入步骤3
75
+ - **输出 MISSING**(有缺失) → 根据缺失项提示安装:
76
+ - 缺失 `requests`:`pip install requests`
77
+ - 缺失 `pandas` 或 `openpyxl`:`pip install pandas openpyxl`
78
+
79
+ > **说明**:`requests` 用于 HTTP 请求,是必需依赖;`pandas` 用于数据处理,`openpyxl` 是 pandas 读取 Excel 的引擎,两者为可选依赖
80
+
81
+ ---
82
+
83
+ ### 步骤3:检测编码环境
84
+
85
+ ```bash
86
+ {python-cmd} -c "import sys; print(sys.platform)"
87
+ ```
88
+
89
+ 根据检测结果设置 `{python-env}` 变量:
90
+
91
+ | sys.platform | 终端编码页 | `{python-env}` 值 |
92
+ |--------------|-----------|------------------|
93
+ | `win32` | 非65001 | `PYTHONUTF8=1 ` |
94
+ | `win32` | 65001 | 空 |
95
+ | 其他 | - | 空 |
96
+
97
+ 检测终端编码页(仅 Windows):`chcp`,输出包含 `65001` 则为 UTF-8 模式。
98
+
99
+ ---
100
+
101
+ ## 使用示例
102
+
103
+ 在调用脚本时使用 `{python-env}` 前缀:
104
+
105
+ ```bash
106
+ {python-env}{python-cmd} scripts/eval_auth.py check --output {work-dir}/.eval/auth.json
107
+ ```
108
+
109
+ Windows GBK 终端下,`{python-env}` 为 `PYTHONUTF8=1 `,实际执行:
110
+
111
+ ```bash
112
+ PYTHONUTF8=1 python scripts/eval_auth.py check --output {work-dir}/.eval/auth.json
113
+ ```