Automation Skills
Operational Steps
- 确认输入参数完整
- 执行核心操作(参考本目录下的 scripts/ 或 references/)
- 验证输出符合契约
- 保存结果并报告
Pitfalls
-
-
Verification
-
-
-
-
1. 2. 3.
IO_CONTRACT
- input:
request: str, context: dict— 用户请求描述、上下文信息 - output:
result: dict — 技能执行结果(结构因技能而异)
对应原则:P2(机械原子暴露输入输出规范)
(P032 语义去重: 移除 2 份截断的 Batch Quality Score Extraction 重复副本, 保留完整 1 份(含 Golden); 父技能标题归位顶部)
Batch Quality Score Extraction
触发条件: 对一批论文(10-34 篇)批量处理 step_quality_check.md 中的 quality_score 并写入 state.json。
背景
Synthos 管线中,每篇论文的 01-manuscript/step_quality_check.md 包含一个 JSON 块,其中 score 字段有多种格式。
批量处理时必须处理所有格式变体,且需要清理 LaTeX 反斜杠才能解析 JSON。
步骤
- 列出目标论文目录 — 从 paper-queue.json 获取批次列表
- 逐篇定位
step_quality_check.md— 使用os.walk()查找,因为文件可能在不同子目录 - 清理 LaTeX 反斜杠 — 在
json.loads()之前移除所有非法\X转义 - 提取分数 — 根据格式类型映射到 0-100 范围
- 写入 state.json — 更新
quality_score字段,设置gate_status
分数格式映射
| 格式 | 提取逻辑 | 示例 |
|---|---|---|
score(number) + max_score |
score / max_score * 100 |
2.5/10 → 25 |
score(dict) + total_score |
total_score * 10 |
7.8 → 78 |
overall_score(number) |
overall_score * 10 |
6.5 → 65 |
detailed_scores(dict) |
avg(vals) / max(vals) * 100 |
均值/最大值 → 百分比 |
| 纯文本(如 "T1 QUALIFIED") | 人工判断 90+ | QUALIFIED → 95 |
LaTeX 反斜杠清理代码
import json
def clean_json_for_latex(content):
"""Parse JSON from content containing LaTeX backslash escapes."""
start = content.find('{')
end = content.rfind('}') + 1
if start < 0:
raise ValueError("No JSON block found")
json_str = content[start:end]
result = []
i = 0
while i < len(json_str):
if json_str[i] == '':
if i + 1 < len(json_str) and json_str[i+1] in '"\\bfnrtu/':
result.append(json_str[i:i+2])
i += 2
elif i + 1 < len(json_str) and json_str[i+1] == 'u':
result.append(json_str[i:i+6])
i += 6
else:
result.append(json_str[i+1]) # \sigma -> sigma
i += 2
else:
result.append(json_str[i])
i += 1
return json.loads(''.join(result))
陷阱
论文目录命名不一致
尝试变体:name, name.replace('_','-'), f'paper-{name}' 等。
文件位置不固定
step_quality_check.md 可能在 01-manuscript/、07-quality/、根目录等。
必须使用 os.walk() 查找。
已处理过的论文跳过
检查 state.json 中是否已有 quality_score,避免重复写入。
批量处理的超时
34 篇论文可能超时。建议分批次(10-15 篇/批),每批一个 queue item。
相关
ref/latex-escape-json-parsing-fix.md(research-paper-search) — 完整的 LaTeX 清理代码和已知影响论文清单ref/gate-batch-processing-pattern.md(quality-gate) — G1-G7 批处理模式- paper-pipeline — 管线整体编排
- quality-gate — G1-G7 闸门定义
验证清单 · VERIFICATION
- 已用
os.walk()在目标论文目录下定位到每篇的step_quality_check.md(兼容不同子目录与命名变体) - 已对 JSON 块执行 LaTeX 反斜杠清理(
clean_json_for_latex)后再json.loads(),无非法\X残留导致解析失败 - 每篇 quality_score 按格式映射表(score/max_score、total_score、overall_score、detailed_scores、纯文本)归一到 0-100
- 已有
quality_score的论文被跳过(查state.json),无重复写入 - 批次按 10-15 篇/批拆分执行,避免 34 篇全量超时
-
state.json中quality_score与gate_status已更新且可被后续闸门读取
约束规则 · RULES
- 输入约束: 参数类型、范围、格式必须校验
- 输出约束: 返回值结构、编码、命名必须一致
- 异常约束: 错误信息必须包含上下文和恢复建议
- 安全约束: 不执行未验证的任意代码,不暴露内部状态
Golden 集合 · GOLDEN SET
- Golden Input: 标准输入样本(覆盖正常路径)
- Golden Output: 预期输出(精确匹配或格式校验)
- Golden Error: 预期错误信息(覆盖失败路径)
Golden 集合是测试的单一真理来源。所有改进必须通过 golden 测试。
违反规则的操作视为不安全,必须拒绝或隔离。
每项验证必须可执行、可记录、可复现。验证失败时记录原因和修复。
Genes (策略基因)
紧凑策略表示。条件→策略。需要深度时参考完整文档。
- [AUTO-001] 解析含 LaTeX 转义的 JSON 数据 → 在
json.loads()前执行自定义清理逻辑,移除非法\X转义以保留合法 JSON 结构 - [AUTO-002] 处理多种分数格式变体 → 根据字段类型(number/dict/text)映射到统一 0-100 范围,纯文本合格标记默认赋高值(如 95)
- [AUTO-003] 目标文件位置不固定 → 使用
os.walk()递归遍历目录查找文件,而非依赖固定路径 - [AUTO-004] 论文目录命名不一致 → 尝试多种命名变体(如
name,name.replace('_','-'),f'paper-{name}')以匹配实际目录 - [AUTO-005] 批量处理任务量较大(>10 项) → 分批次执行(每批 10-15 项)以避免超时,每批作为独立队列项
- [AUTO-006] 重复处理同一对象 → 检查状态文件(如
state.json)中是否已存在结果字段,若存在则跳过以避免重复写入