84 lines
1.9 KiB
Markdown
84 lines
1.9 KiB
Markdown
# 统一字段池写入Skill 设计
|
|
|
|
## 1. Skill 定位
|
|
|
|
`统一字段池写入Skill` 负责将标准化后的字段候选写入统一字段池,并为每个字段选择推荐值、保留候选值和来源证据。
|
|
|
|
英文实现标识建议使用 `UnifiedFieldPoolWriteSkill`。
|
|
|
|
## 2. 输入
|
|
|
|
```python
|
|
@dataclass
|
|
class UnifiedFieldPoolWriteInput:
|
|
batch_id: int
|
|
normalized_candidates: list[NormalizedFieldCandidate]
|
|
field_definitions: list[FieldDefinition]
|
|
source_priority: dict
|
|
```
|
|
|
|
## 3. 输出
|
|
|
|
```python
|
|
@dataclass
|
|
class UnifiedFieldPoolWriteOutput:
|
|
field_pool_items: list[FieldPoolItem]
|
|
candidate_records: list[dict]
|
|
manual_review_fields: list[dict]
|
|
write_status: str
|
|
```
|
|
|
|
## 4. 推荐值选择规则
|
|
|
|
1. 优先选择高置信候选。
|
|
2. 同置信度时按来源优先级选择。
|
|
3. 来源优先级一致时选择规则抽取结果。
|
|
4. 多候选值明显不同则标记 `conflict_candidate`。
|
|
5. 待人工复核字段不作为无条件回填值。
|
|
|
|
## 5. 核心方法
|
|
|
|
### 5.1 `run(input) -> UnifiedFieldPoolWriteOutput`
|
|
|
|
主入口方法。
|
|
|
|
### 5.2 `group_candidates_by_field(candidates) -> dict`
|
|
|
|
按 `field_key` 分组。
|
|
|
|
### 5.3 `select_recommended_value(field_key, candidates, priority) -> FieldPoolItem`
|
|
|
|
选择推荐值。
|
|
|
|
### 5.4 `persist_field_pool_item(item) -> RegistrationFieldPoolItem`
|
|
|
|
写入字段池。
|
|
|
|
### 5.5 `persist_field_candidates(item, candidates) -> None`
|
|
|
|
保留所有候选值。
|
|
|
|
## 6. 技术实现
|
|
|
|
使用技术:
|
|
|
|
1. Django ORM
|
|
2. JSONField
|
|
3. 批量写入
|
|
4. 唯一约束:`batch + field_key`
|
|
|
|
## 7. 异常处理
|
|
|
|
1. 没有候选值:写入空字段并标记待复核。
|
|
2. 数据库写入失败:任务失败并写审计。
|
|
3. 字段重复写入:更新字段池版本或覆盖当前批次结果。
|
|
4. 候选冲突:保留候选并标记冲突候选。
|
|
|
|
## 8. 测试要点
|
|
|
|
1. 高置信候选被选为推荐值。
|
|
2. 来源优先级生效。
|
|
3. 冲突候选被保留。
|
|
4. 可回填字段标记正确。
|
|
|