跳到主要内容

交付规范

每个挑战交付一个 skill、它的输出和运行日志。本页给出统一的格式。

Skill 的两种形态​

每个 skill 可以写成下面任意一种,也可以两种都写。

Python 脚本AI 可执行的说明
主文件skills/<名称>/run.pyskills/<名称>/SKILL.md,可附脚本
怎么调用命令行:输入文件、配置、输出位置让 AI 读 SKILL.md,按步骤执行
必须写明输入的列、输出的格式、假设、已知限制什么时候用、每一步做什么、每一步怎么检查、常见的失败
机器相关的内容从 machine.yaml 读,不写死在代码里写成"先读 machine.yaml,再……"
自证在第二份日志上运行的一个测试用它完成一次任务的记录

机器相关的内容必须放在配置里,这是 S8 能检验 skill 可移植性的前提:换一台机器时,理想情况下只需要换 machine.yaml。

目录结构​

<你的学号>/
machine.yaml # 数据词典和规则(S1 起,逐步补充)
skills/
check-log/ # S1
clean-log/ # S2
kpi-report/ # S3
data/
raw/ # 原始文件,只读
work/ # 各步骤生成的文件
outputs/
s1_phenomena.jsonl
s2_cleaning.jsonl
s3_report.md
runs.jsonl # 运行日志,所有 skill 共用

数据词典​

machine.yaml 的骨架。meaning 写含义,evidence 写你在哪里证实了它(时间、行号、回放页截图)。

machine.yaml(骨架)
machine:
model: DataLog-1
sample_rate_hz: 10
time:
columns: [Date, Time]
format: "%Y-%m-%d %H:%M:%S.%f"
timezone: local
step_s: 0.1
columns:
- name: T1
type: int
unit: balls
range: [0, 6]
meaning: 1 号管当前的球数
- name: Sensors_Left
type: bitfield
bits:
- {bit: 0, value: 1, name: S1_in, meaning: 大气缸缩回到位}
- {bit: 1, value: 2, name: S1_out, meaning: 大气缸伸出到位}
# ……
rest_value: 37
rules:
- id: time_repeated
category: time # time / range / count / conservation / cross_column / sequence
reference: manual # manual / physics / cross_column / baseline
check: 相邻两行的时间戳不相同
origin: self # self / ai
validated_on: demo_healthy.csv
events: # S3 起
- id: standing
rule: 两臂 Sensors & 127 == 37 且 Command_Stepper != 15,持续 ≥ 1 s

现象记录​

S1 的输出,每条现象一行 JSON。字段说明见 S1。

s1_phenomena.jsonl(一行,为便于阅读已换行)
{"first_seen": "08:00:03.6", "last_seen": "08:29:41.2", "rows": "39, 412, …", "count": 84,
"rule": "time_repeated", "reference": "manual",
"phenomenon": "84 行的时间戳与上一行相同,且整行内容也相同",
"evidence": "第 38、39 行"}

清洗日志​

S2 的输出,每个清洗动作一行。由代码在运行时写出。

s2_cleaning.jsonl(一行,为便于阅读已换行)
{"step": 1, "action": "drop_exact_duplicates", "rule": "time_repeated",
"rows": "39, 412, …", "rows_changed": 177, "reversible": true,
"detail": "整行完全相同的重复行只保留第一行",
"reason": "时间戳和内容都相同,属于重复记录"}
字段内容
step第几步,按执行顺序
action做了什么
rule由哪条规则发现
rows涉及的行
rows_changed改动、删除或标记了多少行
reversible能否由原始文件和这条记录恢复
detail具体怎么改的
reason为什么这样改

运行日志​

所有 skill 每运行一次,就往 runs.jsonl 追加一行。它是给你自己、老师和 AI 回看的过程记录。

runs.jsonl(一行,为便于阅读已换行)
{"time": "2026-11-19T10:42:03", "skill": "check-log", "version": "0.3",
"input": {"file": "data/raw/s1_problem.csv", "rows": 18084}, "config": "machine.yaml",
"checks": [{"name": "rules_quiet_on_acceptance_log", "ok": true}],
"output": {"file": "outputs/s1_phenomena.jsonl", "phenomena": 7},
"assumptions": ["standing = 两臂停在原位 ≥ 1 s"],
"notes": "5、6 号管没有 Full_Tube 位,只能用 Command_Stepper 判断它们的满管停机"}

运行日志由代码写出,不手写。它记录的是这次运行实际读了什么、做了什么、得到了什么。