# 2025 真题强化训练说明

本训练包严格围绕 2025 成人组第二轮的两种真实得分结构：

- T1：自然语言作业文本 → 逐题真假判断 → 严格 JSON。
- T2：Embedding → cosine → Top-K → RAG 消息 → 严格 JSON 数字答案。

## 题目构成

| 类型 | 题目 |
|---|---|
| T1 风格 | T1-01 答案提取；T1-02 多数字干扰；T1-03 单位与应用；T1-04 近真题批改 |
| T2 风格 | T2-01 折扣检索；T2-02 单位检索；T2-03 关系检索；T2-04 近真题 RAG |
| 综合 | 综合-01 批改后检索；综合-02 双任务限时 |

每题目录包含：

1. 题目说明。
2. starter.py：核心函数保留 TODO。
3. evaluate.py：独立评测入口。
4. data/：公开输入、题库或两者。
5. answers/题目名/：公开答案、隐藏数据、隐藏答案与参考原始输出。

## 做题顺序

1. 只打开 questions/题目名/，不要看 answers。
2. 复制或填写 starter.py。
3. 让模型或你自己的程序把原始输出写成 JSONL。
4. 先运行公开数据：

```bash
python questions/T1_01_答案提取/evaluate.py \
  --submission questions/T1_01_答案提取/starter.py \
  --outputs my_outputs.jsonl \
  --scope public
```

5. 公开集稳定后，才用 `--scope full` 检查隐藏数据。
6. 最后看 answers 中的参考输出，记录错误原因。

## 输出 JSONL 格式

T1：

```json
{"section":"t1","id":"t1-01-p1","raw_output":"{\"student_id\":\"basic_001\",\"judgements\":[true,true,true]}"}
```

T2：

```json
{"section":"t2","id":"t2-01-p1","raw_output":"{\"reasoning\":\"120 × 0.8 = 96\",\"answer\":\"96\"}"}
```

综合题把两种记录写到同一个输出 JSONL。

## 隐藏测试

隐藏数据不在 question 目录，而在 answers/题目名/。评测器在 `--scope full` 时才读取它们。它们改变学生文本、数值和查询，目的是暴露：

- 用公开 ID 或答案硬编码。
- 只适配一种文本格式。
- 忘记处理多数字干扰。
- 按错方向排序或复制参考答案。

## 一键回归

```bash
python run_all_reference.py
```

该命令会用训练包参考 submission 和参考原始输出，执行全部 10 题的公开与隐藏测试。

注意：T2 的本地 Mock Embedding 只验证函数调用、cosine、排序与 JSON 契约；它不替代官方真实 Embedding 模型。最终仍应在官方环境运行官方 evaluate.py。
