# 法规证据检索Skill 设计

## 1. Skill 定位

`法规证据检索Skill` 负责为完整性检查结果补充法规原文证据，用于解释、页面展示和审计留痕。

英文实现标识建议使用 `RegulationEvidenceRetrieveSkill`。

本 Skill 不改变完整性判定结论。规则链路已经判定的缺失、错放和风险等级不能被 RAG 检索结果反向覆盖。

## 2. 输入

```python
@dataclass
class RegulationEvidenceRetrieveInput:
    requirement_results: list[CompletenessItemResult]
    rule_package_id: str
    workflow_type: str
    max_results_per_item: int = 3
```

## 3. 输出

```python
@dataclass
class RegulationEvidenceRetrieveOutput:
    evidence_refs: list[EvidenceRef]
    unavailable_items: list[dict]
    warnings: list[dict]
```

`EvidenceRef` 字段：

1. `requirement_id`
2. `source_document`
3. `source_type`
4. `chapter_code`
5. `section_title`
6. `snippet`
7. `page_no`
8. `retrieval_score`
9. `metadata`

## 4. 检索范围

只检索法规资料，不检索业务申报资料。

metadata 过滤：

1. `source_role = regulation`
2. `workflow_type = registration`
3. `rule_package_id = nmpa_ivd_registration_v1`
4. `requirement_id` 或 `chapter_code`

## 5. 核心方法

### 5.1 `run(input) -> RegulationEvidenceRetrieveOutput`

主入口方法。

### 5.2 `build_evidence_query(item_result) -> str`

根据要求项名称、章节点和规则配置生成检索 query。

### 5.3 `retrieve_from_vector_store(query, metadata_filter) -> list[EvidenceRef]`

优先使用 Chroma。

### 5.4 `retrieve_from_fallback_index(query, metadata_filter) -> list[EvidenceRef]`

当 Chroma 不可用时，使用本地切片或关键词 fallback。

### 5.5 `normalize_evidence_results(results) -> list[EvidenceRef]`

统一证据格式。

## 6. 技术实现

使用技术：

1. Chroma
2. 本地 fallback 检索
3. 文本切片 metadata
4. Python 关键词匹配

## 7. 异常处理

1. 向量库不可用：降级 fallback。
2. fallback 也不可用：返回证据不可用警告。
3. 找不到证据：不阻断完整性报告。
4. 命中业务资料：过滤掉，避免把申报资料当法规依据。

## 8. 测试要点

1. 能根据要求项生成查询。
2. Chroma 可用时返回证据。
3. Chroma 不可用时 fallback 生效。
4. 证据检索失败不改变缺失结论。
5. 非法规资料被过滤。

