# T0-LMCC：星港舱门报码归一化（大模型 Prompt 路线）

## 题目背景

星港是一座用于向太空输送物资的集散港。运行区有一整套连接主压差环、减压环廊、货运气闸和外作业桥的标准舱门网络。任何一扇舱门报码不清，都会影响人员隔离、货箱转运和局部舱段的气压切换。

一线报码通常来自巡检蜂群、拖运司机和夜班值守员，短、急、乱，但主控台需要的是稳定、可解析、可落库的标准 JSON。你的任务是通过 Prompt 约束，让模型把这些自然语言报码整理成统一结构。

## 题目描述

对于每条输入报码，模型最终必须输出一个 JSON，包含两个字段：

1. `gate_id`：标准化舱门编号
2. `status`：标准化舱门状态

`gate_id` 的格式固定为 `X-YY`：

- `X` 为区域字母，只能是 `E / W / N / S / I / O`
- `YY` 为两位数字编号

区域映射规则如下：

- `E`：东环 / 东区 / 东侧
- `W`：西环 / 西区 / 西侧
- `N`：北环 / 北区 / 北侧
- `S`：南环 / 南区 / 南侧
- `I`：主环 / 内环 / 内侧
- `O`：外环 / 外侧

编号规则如下：

1. 需要从文本中识别“几号门”。
2. 阿拉伯数字直接转为两位数字，例如 `2号门` -> `02`。
3. 中文数字也要识别，例如 `七号门` -> `07`，`十号门` -> `10`，`十一号门` -> `11`，`十二号门` -> `12`。

`status` 只能是以下三种之一：

- `open`
- `closed`
- `fault`

状态按以下优先级判定：

1. 若文本中出现故障语义，如“故障”“打不开”“拉不开”“失灵”“卡住”“异常”“坏了”，则判为 `fault`。
2. 否则，若出现关闭语义，如“关闭”“封闭”“锁住”“关着”“暂停通行”，则判为 `closed`。
3. 否则，若出现开启语义，如“开启”“打开”“恢复通行”“放行”“通了”“重新打开”，则判为 `open`。

也就是说：`fault > closed > open`。

## 你需要实现

在 `submission.py` 中完成：

1. `build_messages(raw_text: str) -> list[dict]`
2. `build_generation_parameters() -> dict`

其中 `build_generation_parameters()` 主要用于微调输出稳定性，不要求复杂。

## 输入格式

本题为函数式评测。

评测器会读取一条报码文本 `raw_text`，调用你实现的 `build_messages(raw_text)` 组织对话，然后用统一模型进行生成。你可以把 `raw_text` 理解为“一条用户输入”。

## 输出格式

模型输出必须满足：

1. 只输出一行 JSON。
2. JSON 只能有两个键：`gate_id`、`status`。
3. `gate_id` 必须符合 `X-YY` 格式，且编号在 `01` 到 `12` 之间。
4. `status` 必须是 `open / closed / fault` 之一。
5. 不要输出解释、代码块、前后缀。

## 输入输出样例

### 样例输入 1

```text
外环七号门完全拉不开
```

### 样例输出 1

```json
{"gate_id":"O-07","status":"fault"}
```

说明：`外环` 映射为 `O`，`七号门` 需要标准化为 `07`，`拉不开` 属于故障语义。

### 样例输入 2

```text
主环8号门已经放行
```

### 样例输出 2

```json
{"gate_id":"I-08","status":"open"}
```

说明：`主环` 映射为 `I`，`8号门` 需要补零成 `08`，`放行` 属于开启语义，因此 `status` 为 `open`。

## 数据范围

### 可见数据

1. 文件路径：`../data/T0_test_data.jsonl`
2. 数据规模：共 `8` 条
3. 主要覆盖标准说法，以及阿拉伯数字 / 中文数字混合写法
4. 所有舱门编号均在 `1` 到 `12` 之间

### 隐藏数据

1. 文件路径：`../data/T0_test_data.final.jsonl`
2. 数据规模：共 `4` 条
3. 与可见集保持同一档难度，只是换了一批不同的区域、编号和状态组合
4. 本题特意直接给出这 `4` 条 final data，方便考生更直观地理解区域映射、编号补零和状态优先级这些 Prompt 约束
5. 隐藏集不会故意更难，也不会额外加入新的刁钻说法；它只用来检查你的 Prompt 是否真正学会了同类归一化规则

## 评分说明

总分 `10` 分：

- 内容正确 `8` 分：在可见集与隐藏集上联合按字段级准确率计分
- 格式正确 `2` 分：在可见集与隐藏集上联合按格式命中率计分

### 运行方式

```bash
python T0_LMCC/evaluate.py
```

### 提示

1. 这题的 Prompt 核心不是“解释”，而是把规则写得可执行。
2. 你可以用少量 few-shot 样例帮助模型学会区域映射、编号补零和状态优先级。
3. 对于 T0 来说，大模型路线会更自然，但规则路线同样完全可做。
