baodan/docs/PPT与海报Phase1实施记录_20260802.md
wsb1224 2422303b36 前工程开发已经推进到 Phase 6 基础能力,但正式验收还没有完成。更准确地说:Phase 0~5 的主要代码链路已经落地,Phase 6 完成了治理框架,尚缺生产化和真实数据验收。
阶段	当前状态	说明
Phase 0~3	基本完成	Document IR、证据链、人工确认、不可变 PlanData Snapshot、海报/PPT 投影已实现
Phase 4	代码完成	场景、策略、模板版本,校验/发布门禁,确定性 resolver 和严格槽位合并已实现
Phase 5	代码完成	输入冻结、PPTX/海报对账、失败关闭、幂等、心跳、重试和冻结输入重放已实现
Phase 6	基础完成	质量看板、结构化告警、Golden 审批、留存清理、孤儿检查和灰度开关已实现
正式上线	未完成	缺真实样本、生产模板、业务规则签字和灰度观察

目前验证基线:
PPT/海报专项测试:107 passed, 1 skipped
Vue TypeScript 检查:通过
前端生产构建:通过
代码变更仍在工作区,尚未提交
仓库全量测试仍有既有失败/挂起项,暂时不能宣称全仓测试完全绿色
仍未完成的代码任务主要有:
影子解析差异流水线
目前有灰度开关,但还没有完整的“新旧解析同时运行、字段差异入库、按保司/profile 聚合”的影子比较任务。

自动视觉回归
目前实现的是 DOM 模块、溢出、尺寸、文本和数值检查;还缺基于真实模板和标准图片的像素差异、字体缺失、遮挡和裁切回归。

告警通道接入
后台已经能产生结构化质量告警,但尚未自动推送到邮件、企微或其他通知通道。

留存任务生产化
dry-run、实删服务和失败审计已经具备,但尚未接入周期性 Celery/定时任务,也没有自动重试失败清理批次。

旧链路最终下线
旧 PPT 解析器和海报紧凑解析仍保留为回滚路径。需要全量灰度稳定后才能删除或彻底关闭写入口。

全仓测试收口
需要处理现有无关失败和挂起测试,建立真正全绿的 CI 基线。

仍需外部输入和生产环境完成的事项:
至少 30 份脱敏 Golden PDF,并完成双人标注和精确率验收。
业务专家确认派生公式、缺失值、可比较性和结论策略。
上传并标注真实生产 PPTX 的语义 shape、页面类型和容量。
安装生产字体并建立视觉基准图片。
实际执行数据库迁移 038~040。
完成留存 dry-run、实删演练以及 10% → 30% → 100% 灰度。
观察期通过后开启 SCENARIO_ENGINE_V2,目前它仍默认关闭;真实清理开关也默认关闭。
完整状态记录在 [PPT与海报Phase4至6补充实施记录](D:/work/code/python/coding/baodanagent/docs/PPT与海报Phase4至6补充实施记录_20260802.md)。
2026-08-02 16:34:06 +08:00

3.7 KiB
Raw Blame History

PPT 与海报生成全链路 Phase 1 实施记录

日期2026-08-02
依据:PPT与海报生成全链路详细修复计划书_20260802.md Phase 1

1. 本轮完成范围

P1-A统一文档摄取

  • 新增 api/insurance/document/ingest.py,统一校验 PDF 内容、文件大小、页数、SHA-256、Document IR 和缓存键。
  • 支持 PyMuPDF 与 pdfplumber 版面解析,逐页保存真实文本块 bbox、读取顺序和质量。
  • PDF 分类不再依赖全文乱码率,综合逐页文本量、可读率和图像覆盖率判断 native/scanned/mixed。
  • OCR 以低质量页优先并受页数、像素预算约束;超预算明确标记 partial/blocked。
  • Tesseract OCR 使用 TSV 输出恢复真实词块坐标;渲染支持 PyMuPDF 和 pypdfium2。
  • 删除兼容解析器中的 120000 字符全局截断;业务选择器仍按页面和单次调用预算分块。
  • 缓存键包含文档哈希、parser、OCR、profile、规则、模型和 Prompt 版本。
  • 文件缺失、格式错误、加密、超大小、超页数、组件缺失和低质量使用结构化错误。

P1-B表格与跨页关系

  • 新增 layout.pytables.py,保留表格 bbox、列位置、表头、页面和行结构。
  • 跨页识别同时校验连续页、场景、表头指纹、左右边界和列坐标。
  • 行主键使用 (table_id, scenario_type, policy_year, row_variant)
  • 删除“只按 policy_year 选择更完整行”的覆盖逻辑;同主键不同值保留全部候选并生成 unresolved conflict。
  • 来源页由实际页面摄取过程写入;模型页码只有在原值能在该页真实 bbox 中找到时才可形成证据。

P1-CEvidenceRef

  • 新增 evidence.py,提供 Schema 兼容的 EvidenceRef、最小原文片段和 SHA-256。
  • 建立字段到页面区域、页面区域到字段的双向索引。
  • PPT 与海报 Worker 都会把解析值映射到本次 Document IR 的真实文本块;无法定位原值时不创建证据。
  • 新增受鉴权接口:
    • GET /insurance/documents/{id}
    • GET /insurance/documents/{id}/pages/{page}
    • GET /insurance/documents/{id}/pages/{page}/preview
    • GET /insurance/documents/{id}/evidence?fieldPath=...

数据与安全

  • 新增 migrate_036.py 和三张表:insurance_documentsinsurance_document_pagesinsurance_document_tables
  • (user_id, sha256) 唯一,不跨用户复用授权。
  • expires_at 暂时可空;业务未确认留存期限前不启用自动清理。
  • PPT 会话、任务、海报记录和计划书上传响应统一移除本地路径,改用布尔状态或受鉴权下载地址。

2. 验证结果

  • 后端目标回归123 passed3 skipped跳过项为系统 Python 缺少 PDF/PPT 可选运行时。
  • 工作区 PDF/PPT 运行时回归95 passed无跳过。
  • 真实 PDFDocument IR Schema、bbox 摄取、SQLite 迁移与分页持久化通过。
  • 前端 vue-tsc:通过。
  • 前端生产构建:通过。
  • Python compileall:通过。
  • git diff --check:通过,仅有仓库换行符提示。

3. 尚未达到的 Phase 1 出口门禁

  • Goldens 仍为 0/10无法可信测量跨页表行召回率、扫描件 OCR 准确率和关键金额证据覆盖率。
  • Tesseract 的繁体/简体语言包和生产任务预算仍需在实际部署环境验证。
  • 未建立 migrate_037 的独立 evidence 表;当前 EvidenceRef 随现有 PPT extraction 或海报 parsed_data 保存,待 Phase 2/3 迁移到版本化 PlanData Snapshot。
  • 尚不能声称“每个关键金额都有 bbox”代码已失败关闭且不伪造证据但真实覆盖率必须由获批样本证明。

因此本轮完成 Phase 1 的代码基础和兼容接入,但 Phase 1 数据质量出口仍保持阻断。