98 lines
2.5 KiB
Markdown
98 lines
2.5 KiB
Markdown
|
|
# API 契约:提取阶段标注工作台
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## GET /api/extraction/{taskId}
|
|||
|
|
|
|||
|
|
**权限**: ANNOTATOR(且为任务持有者)
|
|||
|
|
**描述**: 获取当前提取结果(含 AI 预标注候选,供人工编辑)
|
|||
|
|
|
|||
|
|
**响应** `200`:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": "SUCCESS",
|
|||
|
|
"data": {
|
|||
|
|
"taskId": 101,
|
|||
|
|
"sourceType": "TEXT",
|
|||
|
|
"sourceFilePath": "text/202604/50.txt",
|
|||
|
|
"isFinal": false,
|
|||
|
|
"resultJson": {
|
|||
|
|
"items": [
|
|||
|
|
{
|
|||
|
|
"subject": "北京",
|
|||
|
|
"predicate": "是...首都",
|
|||
|
|
"object": "中国",
|
|||
|
|
"sourceText": "北京是中国的首都",
|
|||
|
|
"startOffset": 0,
|
|||
|
|
"endOffset": 8
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## PUT /api/extraction/{taskId}
|
|||
|
|
|
|||
|
|
**权限**: ANNOTATOR(且为任务持有者)
|
|||
|
|
**描述**: 更新提取结果(**整体 JSONB 覆盖,PUT 语义,禁止局部 PATCH**)
|
|||
|
|
|
|||
|
|
**请求体**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"items": [
|
|||
|
|
{
|
|||
|
|
"subject": "北京",
|
|||
|
|
"predicate": "是...首都",
|
|||
|
|
"object": "中国",
|
|||
|
|
"sourceText": "北京是中国的首都",
|
|||
|
|
"startOffset": 0,
|
|||
|
|
"endOffset": 8
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应** `200`: `{"code": "SUCCESS", "data": null}`
|
|||
|
|
**失败**: `400` `INVALID_JSON`: 提交的 JSON 格式不合法
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## POST /api/extraction/{taskId}/submit
|
|||
|
|
|
|||
|
|
**权限**: ANNOTATOR(且为任务持有者)
|
|||
|
|
**描述**: 提交提取结果,任务状态 IN_PROGRESS → SUBMITTED,进入审批队列
|
|||
|
|
|
|||
|
|
**响应** `200`: `{"code": "SUCCESS", "data": null}`
|
|||
|
|
**失败**: `409` `INVALID_STATE`: 任务当前状态不允许提交
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## POST /api/extraction/{taskId}/approve
|
|||
|
|
|
|||
|
|
**权限**: REVIEWER
|
|||
|
|
**描述**: 审批通过。**两阶段操作**:
|
|||
|
|
1. 同步(同一事务):`annotation_result.is_final = true`,任务状态 SUBMITTED → APPROVED,写任务历史
|
|||
|
|
2. 异步(事务提交后):AI 生成候选问答对 → 写 training_dataset → 创建 QA_GENERATION 任务 → source_data 状态推进
|
|||
|
|
|
|||
|
|
**响应** `200`: `{"code": "SUCCESS", "data": null}`
|
|||
|
|
**失败**:
|
|||
|
|
- `403` `SELF_REVIEW_FORBIDDEN`: 不允许审批自己提交的任务
|
|||
|
|
- `409` `INVALID_STATE`: 任务状态不为 SUBMITTED
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## POST /api/extraction/{taskId}/reject
|
|||
|
|
|
|||
|
|
**权限**: REVIEWER
|
|||
|
|
**描述**: 驳回提取结果,任务状态 SUBMITTED → REJECTED,标注员可重领
|
|||
|
|
|
|||
|
|
**请求体**: `{"reason": "三元组边界不准确,请重新标注"}`
|
|||
|
|
**响应** `200`: `{"code": "SUCCESS", "data": null}`
|
|||
|
|
**失败**:
|
|||
|
|
- `403` `SELF_REVIEW_FORBIDDEN`: 不允许驳回自己提交的任务
|
|||
|
|
- `409` `INVALID_STATE`: 任务状态不为 SUBMITTED
|
|||
|
|
- `400` `REASON_REQUIRED`: 驳回原因不能为空
|