# 长文本字段归纳Skill 设计

## 1. Skill 定位

`长文本字段归纳Skill` 负责对规则和表格无法稳定抽取的长文本字段进行证据限定后的 LLM 归纳。

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

本 Skill 必须通过 LLM Provider 调用模型，并支持 Mock Provider。

## 2. 输入

```python
@dataclass
class LongTextFieldSummarizeInput:
    documents: list[DocumentContent]
    field_definitions: list[FieldDefinition]
    enable_rag_context: bool = True
```

## 3. 输出

```python
@dataclass
class LongTextFieldSummarizeOutput:
    candidates: list[FieldCandidate]
    evidence_refs: list[EvidenceRef]
    tool_calls: list[dict]
    failed_fields: list[dict]
```

## 4. 处理字段

1. 检测靶标。
2. 适用范围 / 预期用途。
3. 性能指标。
4. 临床评价路径。

## 5. 核心方法

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

主入口方法。

### 5.2 `locate_field_context(document, field_definition) -> list[EvidenceChunk]`

通过 RAG 或关键词定位候选片段。

### 5.3 `build_llm_prompt(field_definition, chunks) -> str`

构造限定上下文提示词。

### 5.4 `call_provider(prompt, output_schema) -> dict`

调用 LLM Provider。

### 5.5 `validate_output(output) -> FieldCandidate`

校验结构化输出。

## 6. 技术实现

使用技术：

1. RAG fallback / Chroma
2. LLM Provider
3. JSON schema
4. Mock Provider

## 7. 异常处理

1. 找不到候选片段：字段标记待人工复核。
2. Provider 不可用：跳过 LLM。
3. 输出 JSON 非法：丢弃结果。
4. 输出没有来源片段：标记低可信。

## 8. 测试要点

1. Mock Provider 可返回固定字段。
2. 找不到上下文时不会编造字段。
3. 非法 JSON 被拦截。
4. LLM 关闭时主流程仍可完成。

