> ## Documentation Index
> Fetch the complete documentation index at: https://automationlaboratoryprotocol.mimedal.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 能力校验

> 使用统一评分结构检查设备技能描述

## 输入

输入是按照[设备能力](/specification/capability/overview)生成的设备技能描述。

### 输入示例

```markdown theme={null}
设备编码: 2002186824385539
name: Liquid_Handling_Station_1ml_V2
来源修订号: 12

技能: 加液_物料绑定
请求分类: invoke
对象: 离心瓶；container_status=无盖
控制: 参数 container_ids、dispensing_plan；状态更新 sample_status 空→液体
系统: 设备必须空闲；执行后验证实际加液结果和容器状态
```

评估器读取的不是设备动作请求，而是能力说明文本及其结构。它检查内容是否足以生成和验证函数调用，不接触物理设备。

评估器检查：

```text theme={null}
设备名称和标题
技能描述与请求分类
对象、控制、系统三个维度
参数信息
初始状态
状态更新
约束规则
Frontmatter 完整性
参数约束规范
嵌套参数展开
返回值
状态转换完整性
示例完整性
```

## 评估实现逻辑

质量评估器先把设备技能描述解析为结构化章节和字段，再按检查项逐一判定，不依赖设备名称猜测能力。核心过程如下：

1. 检查元数据、技能名称、请求分类和来源修订号是否存在；
2. 对每个参数检查名称、类型、必填性、单位、范围、枚举和嵌套字段是否完整且可解析；
3. 检查每项技能的三个维度是否完整，对前置条件、约束、状态变化、返回值和结果验证建立对应关系；
4. 将强制缺失或矛盾记录为失败项，将可改善但不阻断的问题记录为建议项；
5. 汇总得分、通过状态和逐项修订要求，作为是否进入技能库的唯一依据。

评估器不执行设备动作，也不修改原始能力数据。它的输出是可复查的评估报告：失败时输出具体缺失字段和修订动作，修订后必须重新解析全文并重新评分。

## 检查项

| 编号   | 检查项     | 作用                  | 满分 |
| ---- | ------- | ------------------- | -- |
| `R1` | 设备名称/标题 | 确保能力有稳定主体           | 10 |
| `R2` | 技能描述    | 确保每项技能用途和请求分类明确     | 10 |
| `R3` | 参数信息    | 检查类型、单位、范围、枚举、必填和说明 | 15 |
| `R4` | 初始状态    | 确保调用前状态可判断          | 10 |
| `R5` | 状态更新    | 确保成功后的状态可计算         | 10 |
| `R6` | 约束规则    | 确保强制限制可验证           | 5  |
| `O1` | 元数据完整性  | 检查标识、名称、说明和模块       | 5  |
| `O2` | 相似设备区别  | 避免把相近能力错误绑定         | 5  |
| `O3` | 整体流程约束  | 检查操作间先后依赖           | 5  |
| `O4` | 参数约束规范  | 检查范围表达可解析           | 5  |
| `O5` | 嵌套参数展开  | 防止对象数组只保留模糊描述       | 5  |
| `O6` | 文件参数    | 检查文件型输入的格式和用途       | 3  |
| `O7` | 返回值     | 确保下游能消费结果           | 5  |
| `O8` | 状态转换完整性 | 检查前态与后态闭合           | 4  |
| `O9` | 示例完整性   | 检查调用示例是否可理解         | 3  |

## 通过输出示例

以下示例展示一个总分 95、达到阈值但缺少整体流程约束章节的评估结果：

```json theme={null}
{
  "device_name": "Liquid_Handling_Station_1ml_V2",
  "total_score": 95.0,
  "required_score": 60,
  "optional_raw_score": 35,
  "optional_weighted_score": 35.0,
  "grade": "A（优秀）",
  "passed": true,
  "threshold": 60,
  "required_checks": [
    {
      "id": "R1",
      "name": "设备名称/标题",
      "score": 10,
      "max_score": 10,
      "passed": true,
      "detail": "LLM未评估，以正则预检结果为准",
      "coefficient": null,
      "coefficient_reason": null
    },
    {
      "id": "R3",
      "name": "参数信息",
      "score": 15,
      "max_score": 15,
      "passed": true,
      "detail": "LLM未评估，以正则预检结果为准",
      "coefficient": null,
      "coefficient_reason": null
    }
  ],
  "optional_checks": [
    {
      "id": "O3",
      "name": "整体流程约束",
      "score": 0,
      "max_score": 5,
      "passed": false,
      "detail": "LLM未评估，以正则预检结果为准",
      "coefficient": 0.0,
      "coefficient_reason": "LLM未评估，正则预检通过则系数1.0，未通过则0.0"
    }
  ],
  "coefficient_report": [
    {
      "id": "O3",
      "name": "整体流程约束",
      "coefficient": 0.0,
      "coefficient_reason": "LLM未评估，正则预检通过则系数1.0，未通过则0.0",
      "raw_score": 0,
      "weighted_score": 0.0
    }
  ],
  "fix_instructions": [
    {
      "check_id": "O3",
      "check_name": "整体流程约束",
      "issue": "LLM未评估，以正则预检结果为准",
      "action": "添加## 整体流程约束小节，说明操作间的先后依赖关系",
      "priority": "medium"
    }
  ],
  "suggestions": [
    "整体流程约束未通过（得分0/5）：LLM未评估，以正则预检结果为准"
  ]
}
```

### 输出字段

| 字段                        | 类型              | 作用                   |
| ------------------------- | --------------- | -------------------- |
| `device_name`             | `string`        | 被评估能力的稳定名称           |
| `total_score`             | `number`        | 必选分与加权可选分之和          |
| `required_score`          | `number`        | 必选检查得分               |
| `optional_raw_score`      | `number`        | 可选检查加权前得分            |
| `optional_weighted_score` | `number`        | 可选检查加权后得分            |
| `grade`                   | `string`        | 面向人的等级说明             |
| `passed`                  | `boolean`       | 是否允许进入能力库            |
| `threshold`               | `number`        | 本次评估采用的准入阈值          |
| `required_checks[]`       | `array[object]` | 每项必选检查的编号、得分、通过状态和说明 |
| `optional_checks[]`       | `array[object]` | 每项可选检查的编号、得分、通过状态和说明 |
| `coefficient_report[]`    | `array[object]` | 可选项系数、理由、原始分和加权分     |
| `fix_instructions[]`      | `array[object]` | 可执行的修订要求及优先级         |
| `suggestions[]`           | `array[string]` | 不改变机器判断结果的可读建议       |

## 准入判断

设备技能描述只有同时满足以下条件才能准入：

```text theme={null}
passed == true
total_score >= threshold
```

默认样例阈值为 60。阈值来自质量评估配置，不作为所有部署不可修改的协议常量。

## 不通过与修订

评估不通过时，仍使用同一报告结构：

* `passed=false`；
* 失败项保留在 `required_checks` 或 `optional_checks`；
* `fix_instructions` 给出修订要求；
* `suggestions` 给出非阻断建议。

修订后必须重新生成完整报告，不能只修改总分。

## 对 FSP 数据的补充检查

从 FSP 生成能力说明时还应检查：

* 来源设备和修订号是否存在；
* 每项技能的对象、控制和系统三个维度是否可解析且相互一致；
* 控制参数和状态字段是否能够无损映射；
* 系统安全围栏和结果验证是否进入说明；
* 派生说明是否遗漏 FSP 强制约束。

这些检查可以加入部署采用的评分配置，但输出仍必须使用本页定义的报告字段。
