feat(t208): close candidate decision feedback loop
This commit is contained in:
+51
-7
@@ -438,7 +438,8 @@ candidate evidence SHA-256 和结构化模型判断。结果不得包含 Key、A
|
||||
|
||||
## 执行事件与结果
|
||||
|
||||
App 使用加密 outbox 按“事件 -> evidence asset -> 候选 -> 终态”顺序提交。所有写接口
|
||||
App 使用加密 outbox 按“事件 -> evidence asset -> 候选 -> 人工 review -> 终态”
|
||||
顺序提交。所有写接口
|
||||
重新校验 BUYER/device/task/execution/claim 和幂等键。原设备可以在
|
||||
`execution_expires_at` 后补报授权内已经产生的结果;后端记录
|
||||
`received_after_execution_expiry=true`,但这不允许 App 在过期后继续自动化。
|
||||
@@ -474,7 +475,7 @@ App 使用加密 outbox 按“事件 -> evidence asset -> 候选 -> 终态”顺
|
||||
|
||||
### `POST /api/v1/tasks/{task_id}/candidates`
|
||||
|
||||
批量保存当前 execution 实际检查后通过策略的 `0..5` 个候选,必须带
|
||||
批量保存当前 execution 实际检查的 `0..5` 个原始曝光候选,必须带
|
||||
`Idempotency-Key`。正式参考图检索使用固定审计值 `PDD_IMAGE_SEARCH`,不把标题或
|
||||
SKU 伪装成图片检索词:
|
||||
|
||||
@@ -533,11 +534,54 @@ SKU 伪装成图片检索词:
|
||||
```
|
||||
|
||||
`MANUAL_FIRST` 时 `provenance` 和 `evaluation` 为空,但候选观察、搜索审计值和人工
|
||||
结果仍可提交。`AI_ASSISTED` 的非空 `evaluation` 必须同时包含唯一的 `COLOR` 和
|
||||
`SIZE`,且全部为 `MATCH`;schema v2 还要求分数和置信度均不低于 `0.75`,非空批次的
|
||||
推荐必须指向排序后的第 1 项。没有候选满足条件时提交空 `candidates` 和空
|
||||
`recommendation`,不得用弱匹配或未知项凑数。后端校验 ordinal 连续唯一、最多 5 个和
|
||||
任务内容哈希;不请求 `product_url` 或 `image_url`,主要证据必须是已鉴权 asset。
|
||||
结果仍可提交。`AI_ASSISTED` 为每个原始 observation 保存 evaluation;颜色/尺码状态
|
||||
可以是 `MATCH/MISMATCH/UNKNOWN`,模型拒绝项也必须保留。schema v2 的
|
||||
`recommendation` 只能指向颜色和尺码均为 `MATCH`、分数和置信度均不低于 `0.75`
|
||||
且没有拒绝原因的原始 ordinal;没有满足项时只省略 recommendation,不能删除原始
|
||||
候选。后端在同一事务内写入 search run、observation、model evaluation 和
|
||||
recommendation,并保留旧 JSON 审计副本;不请求 `product_url` 或 `image_url`,
|
||||
主要证据必须是已鉴权 asset。
|
||||
|
||||
### `POST /api/v1/tasks/{task_id}/human-reviews`
|
||||
|
||||
采购员确认候选后、提交终态前调用。请求使用设备 Bearer token、`X-Claim-Token`
|
||||
和 `Idempotency-Key`:
|
||||
|
||||
```json
|
||||
{
|
||||
"execution_id": "e3190742-a24b-441e-b5c1-c7ed10ed342f",
|
||||
"claim_generation": 1,
|
||||
"task_content_sha256": "64-char-lowercase-hex",
|
||||
"reason_schema_version": 1,
|
||||
"outcome": "CANDIDATE_ACCEPTED",
|
||||
"selected_candidate_ordinal": 2,
|
||||
"primary_reason_code": "SELECTED_BEST_MATCH",
|
||||
"note": "",
|
||||
"supersedes_review_id": null,
|
||||
"items": [
|
||||
{
|
||||
"candidate_ordinal": 1,
|
||||
"label": "REJECT",
|
||||
"primary_reason_code": "NOT_BEST_MATCH",
|
||||
"reason_codes": ["NOT_BEST_MATCH"],
|
||||
"note": ""
|
||||
},
|
||||
{
|
||||
"candidate_ordinal": 2,
|
||||
"label": "ACCEPT",
|
||||
"primary_reason_code": "SKU_MATCH",
|
||||
"reason_codes": ["SKU_MATCH"],
|
||||
"note": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
非空 review 必须恰好覆盖本次所有 observation;接受时只有所选 ordinal 为
|
||||
`ACCEPT`,其余全部为 `REJECT`。零候选只允许 `NO_MATCH` 或
|
||||
`MANUAL_REQUIRED` 且 items 为空。理由使用 T-208 版本 1 allowlist;任务没有预算时
|
||||
禁止价格类理由,`OTHER` 必须带 4-200 字备注。同一幂等键重放返回原 review;
|
||||
修订必须通过 `supersedes_review_id` 引用当前最新版本,服务端追加版本并保留历史。
|
||||
|
||||
### `POST /api/v1/tasks/{task_id}/complete`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user