# LMCC 系列考试说明

## 1. 考试定位

LMCC 系列考试强调三件事：

1. 工程可落地
2. 推理可解释
3. 输出可执行

它不只考 API 和记忆，更关注你是否能在真实约束下交付结果。

## 2. 题型分层

- `T0`：教学题，同题双解，用来验证基础环境与双路径能力。
- `T1`：简单题，强调 Prompt 控制、格式约束和稳定输出。
- `T2`：困难题，要求围绕固定 `Qwen3-0.6B` 基座，参考前两题的 Prompt 方法自行构造真实工具调用训练数据，并在官方提供的部分训练骨架上完成带外层 `wait_for_result` 的并行工具调用 Qwen 模板 SFT 与全量微调训练，按固定路径提交训练数据、SFT 数据和完整模型目录，评测时直接测试该模型的并行工具调用性能。
- `T3`：探索题，要求阅读新论文并补全关键机制代码。

## 3. 同题双解

LMCC 鼓励两种能力并行：

1. `传统 CSP 解法`
2. `大模型工具解法（Transformers + PyTorch）`

同一任务允许两种路径完成，目的不是二选一，而是检查你是否既能写出确定性规则，也能驾驭模型推理流程。

## 4. 评测风格

常见评分方式包括：

- 精确字段命中
- 严格格式检查
- 轻量代理指标
- 分项计分

设计原则如下：

1. 公开评测逻辑尽量透明。
2. 隐藏测试只扩展分布，不改变题意。
3. 格式错误会被明确扣分，避免“语义差不多”但工程不可用。

## 5. 文件结构说明

本赛后答案包中，公开数据和最终评测数据都放在 `data/` 下。

命名规则如下：

- 公开数据保留原名，例如 `T1_visible_test_data.jsonl`
- 对应隐藏数据统一命名为同名 `*.final.jsonl`

例如：

- `T0_test_data.jsonl`
- `T0_test_data.final.jsonl`
- `T2_public_eval_queries.jsonl`
- `T2_public_eval_queries.final.jsonl`

其中，`*.final.jsonl` 表示赛后公开的最终评测数据。它的作用是帮助你复盘隐藏/最终测试如何扩展公开集分布，并用同一份本地评测脚本复现最终评分口径。不同题目的使用方式略有差异：`T0/T1/T2` 的评测脚本会读取对应的 `*.final.jsonl` 参与计分；`T3` 的默认评测脚本只读取公开案例，`T3_public_cases.final.jsonl` 作为赛后补充案例和答案对照材料保留。

## 6. 作答环境与交卷要求

**注意：本节后续出现的文件路径均为考试现场环境中的示例路径；赛后复现或本地阅读时，请务必替换成你自己机器上的实际本地路径，并自行完成这些路径替换。**

### 6.1 `lmcc` 目录放置位置

正式考试与最终评测都按固定路径执行：

- `lmcc` 根目录必须放在 `/home/ma-user/work/lmcc`

请注意：

1. 不要改目录名。
2. 不要把题库放到其它路径后再做软链接替代。
3. 不要额外再套一层目录，例如 `/home/ma-user/work/xxx/lmcc`。

如果目录位置不对，官方评测脚本可能无法按预期找到题目、数据和提交产物。

### 6.2 考试所需环境路径

原始考试环境中的常见路径示例如下：

1. Python 环境路径示例：`/home/ma-user/anaconda3/envs/PyTorch-2.6.0/`
2. 题库工作目录示例：`/home/ma-user/work/lmcc`
3. 基础模型目录示例：`/home/ma-user/Qwen/Qwen/`

赛后复现时不建议在代码中继续写死这些绝对路径。推荐通过环境变量指定模型位置：

1. `QWEN_ROOT`：指向同时包含 `Qwen3-8B`、`Qwen3-0.6B`、`Qwen3-Embedding-0.6B` 的目录。
2. `MODEL_PATH`：覆盖 `T0_LMCC` / `T1` 使用的 `Qwen3-8B` 路径。
3. `T2_MODEL_PATH`：覆盖 `T2` 训练使用的 `Qwen3-0.6B` 路径。
4. `T2_EMBEDDING_MODEL_PATH`：覆盖 `T2` 评估数据多样性使用的 embedding 模型路径。
5. `TARGET_MODEL` / `DRAFT_MODEL`：覆盖 `T3_real_demo` 中 target / draft 模型路径。

如果没有设置这些环境变量，当前代码会优先尝试从题库相邻目录中自动发现 `Qwen/`，例如 `../Qwen`、`../../Qwen` 或 `../../../Qwen`。

### 6.3 不应修改的文件

以下文件属于官方评测基础设施或官方数据，不应作为作答内容修改：

1. 根目录 `result_store.py`
2. 各题官方评测脚本：
   - `T0_CSP/evaluate.py`
   - `T0_LMCC/evaluate.py`
   - `T1/evaluate.py`
   - `T2/evaluate.py`
   - `T3/evaluate.py`
3. 公开数据与最终评测数据，尤其是 `data/*.final.jsonl`

原因如下：

1. 这些文件用于说明题目、复现评测和对照最终结果，不属于作答内容。
2. 修改这些文件不会帮助理解参考答案，反而可能干扰本地复现。
3. 赛后复盘时真正需要关注的，是题目要求完成的代码、Prompt、训练数据、模型产物或算法实现。

### 6.4 交卷前请关闭机器上的额外进程

最终评测直接在考生自己的机器上执行，不会切到一台“干净的新机器”。因此，交卷前请自行清理你在本机启动的额外进程。

至少应停止以下内容：

1. 训练进程
2. 推理脚本
3. Notebook / Jupyter
4. 长时间占用资源的调试脚本
5. 通过 `nohup`、`screen`、`tmux`、后台 `python`、`torchrun`、`deepspeed` 等方式挂起的任务

这样做的目的是避免：

1. 占用 NPU / GPU / CPU / 内存，导致正式评测变慢、OOM 或超时
2. 占用端口、文件锁或工作目录，影响评测脚本运行
3. 让你的本地残留状态污染最终评分环境

如果因为考生自己未关闭残留进程而导致正式评测失败、超时或结果异常，责任由考生自行承担。

## 7. 结果文件说明

每道题的评测脚本都会调用统一的 `result_store.py`：

1. 在题库根目录更新 `results.json`
2. 在用户目录写出一份完整 JSON 结果
3. 在当前工作目录生成 Markdown 格式的 `考生得分情况.md`

Markdown 报告会展示：

- 各题得分
- 总分
- 每题详细评分拆解

## 8. 故事背景

`星港` 是一座用于向太空输送物资的大型集散港，是把海港、航天基地、自动化工业区和 AI 调度中心叠在一起的空天运输接口。

![星港概念图](img/星港概念图.png)

*上图为星港概念图，由 NanoBanana 2 生成。*

星港长期保持高负荷运转：

- 下层连着回收平台、物流区、维修坞和居住区
- 中层连着主环廊、减压环、货运气闸和检修井
- 上层连着补给臂、对接泊位、近轨摆渡船和轨道转运链路

默认存在的技术包括：

1. 近地轨道常态化摆渡
2. 全港数字孪生
3. 无人巡检蜂群与自动拖运车队
4. 低温推进剂系统、补给臂、减压环廊、货运气闸等工程化设备

星港的科幻感来自“日常场景已经全面空天化”，而不是魔法设定。

因此：

- `T0` 的舱门报码来自真实运行区
- `T1` 的口令整理来自高压夜班调度
- `T2` 的工具路由来自整座港城的 AI 操作系统
- `T3` 的推理解码题则对应星港内部的模型加速需求，例如用 `Qwen3-0.6B` 做 draft、用 `Qwen3-8B` 做 target 的双模型验证链路；题目自带的 `T3_real_demo/` 由早期 `T3/run_real_demo/` 移动并整理得到，只是纯 Python 机制复现与小型 Demo，不代表论文级或生产级真实加速实现，也不属于正式评分范围
