单证识别运行时
Document Recognition 不再拥有作业执行运行时。运行时创建和执行由 Fusion 子系统负责,本模块只消费已持久化的 Fusion run input/output,并生成可回顾、可修改、可持久化的单证识别 projection。
运行阶段
stateDiagram-v2
[*] --> fusion_run_created
fusion_run_created --> fusion_run_completed
fusion_run_completed --> persist_projection
persist_projection --> review_required
review_required --> in_review
in_review --> reviewed
review_required --> flagged
flagged --> in_review
reviewed --> [*]
当前运行特点
- Fusion run 是识别结果来源。
- 只有被 admin registry 注册的 Fusion agent,才会被视为 document-recognition runtime。
GET /document-recognition/runtime-agents返回当前可选 runtime agent 的名称、描述与状态。GET /document-recognition/runtime-agents/{runtime_agent_id}返回当前 published 版本、fusion_input_contract、fusion_execution_policy与上传槽位解析摘要。POST /document-recognition/runs负责校验 registry、解析 published 版本与上传槽位,并创建底层 Fusion run。- 管理端 registry 写入只允许具备
document_recognition.write的管理员执行,并写入 admin audit;该操作不要求密码重输 challenge。 /document-recognition/runs/{run_id}会按需把 Fusion output 持久化为 review projection。/document-recognition/runs/{run_id}同时返回 canonicalworkspace_output,供 Outlook Index 直接渲染字段、表格与 bbox。/document-recognition/runs/{run_id}的field_reviews[]会附带轻量 revision summary,但不会默认内联完整 timeline。- 字段 review 更新会刷新 run-level review counters 和 summary projection,并在字段发生有效变化时写入 append-only revision ledger。
GET /document-recognition/runs/{run_id}/field-reviews/{field_id}/revisions用于按需读取单字段 timeline;没有 ledger 的旧 run 也会返回 baseline 快照与history_status=unrecorded。- 旧 review storage 只通过 infrastructure bridge 复用。
Fusion Run Projection
Document Recognition 从 Fusion run 读取:
fusion_run_inputs:source file name、MIME type、object keyfusion_run_outputs:structured JSON result、result object keyfusion_runs.governance_context_json:validation issue contextfusion_runs.status/error_message:run lifecycle 和失败信息
状态语义
completed:Fusion run 已完成,projection 可生成。failed:Fusion run 失败,projection 会保留错误 issue。review_required:projection 生成后仍有字段等待人工处理。in_review:部分字段已处理。reviewed:全部字段已接受或修正。flagged:存在需跟进字段。
Consumer 视角
调用方应使用:
GET /document-recognition/runtime-agentsGET /document-recognition/runtime-agents/{runtime_agent_id}POST /document-recognition/runsGET /document-recognition/runsGET /document-recognition/runs/{run_id}PATCH /document-recognition/runs/{run_id}/field-reviews/{field_id}GET /document-recognition/runs/{run_id}/field-reviews/{field_id}/revisionsGET /document-recognition/runs/{run_id}/source-documentGET /document-recognition/runs/{run_id}/source-pdfGET /document-recognition/runs/{run_id}/result
这些 canonical routes 当前直接以公开 surface 提供,不再维护额外的前缀别名。
旧 /agents/{agent_id}/extraction-jobs 不再由 ai_service/document_recognition 包注册。
管理端使用以下接口维护 runtime registry:
GET /admin/document-recognition/runtime-agentsGET /admin/document-recognition/runtime-agent-candidatesPUT /admin/document-recognition/runtime-agents/{agent_id}DELETE /admin/document-recognition/runtime-agents/{agent_id}
PUT / DELETE 继续以 agent_id 作为稳定标识,服务端不会接受 agent name 作为 registry 主键。
这些写入需要管理员会话和 document_recognition.write,成功和失败都会进入 admin_action_audits,但不再要求 x-admin-challenge-token。