1
T-277
ila edited this page 2026-08-07 16:37:14 +08:00

同步来源:docs/tasks/T-277.md · commit afc651f75a3a


id: T-277 title: 使用节点 JSON 和本机 VLM 兜底规格与价格 phase: 2 deps:

  • T-272
  • T-276 status: DONE created: 2026-08-01 context_ref: 258fc1b work_branch: null write_paths:
  • docs/tasks/T-277.md
  • docs/current-state.md
  • docs/04-architecture.md
  • docs/05-coding-rules.md
  • docs/api.md
  • android-buyer/app/src/main/**
  • android-buyer/app/src/test/**
  • backend-api/migrations/**
  • backend-api/internal/**

问题 / 背景

确定性无障碍解析在拼多多把“券后”“¥”“10.49”拆成多个节点、规格节点没有可靠 selected 状态或“已选择”摘要缺失时,会保存空 sku_text/price_text。T-272 已能用 受限节点 JSON 和本机 VLM 定位规格选项,但最终复核只证明颜色/尺码,没有从同一快照 恢复 SKU 摘要和拆分价格,也没有把未知状态显式回传后台。

行为契约

  1. 颜色、尺码选择和价格读取始终先执行确定性规则;只有目标选择、已选摘要或唯一组合价 无法确认时,才允许调用 Roubao 本机已配置模型。
  2. 复用 T-272 当前规格快照:最多 200 个节点、深度 12、单节点文字 160 字,附带当前 规格截图;禁止上传完整 AccessibilityNodeInfo.toString()、订单、店铺或设备凭证。
  3. 模型严格返回目标颜色/尺码证据 node ID、价格 node ID、置信度和稳定状态。App 必须 复核 node ID 属于当前快照、节点可见/启用、结构 hash 未变化,并由代码按节点顺序拼接 和解析人民币价格;不接受模型独立生成的金额或坐标。
  4. 颜色和尺码仍逐项单步点击,每次点击后重新获取根节点;最终模型只能证明当前快照中 两项目标同时选中,不能声明历史点击成功。
  5. 候选显式回传 sku_verification_status=MATCH|MISMATCH|UNVERIFIED、 price_verification_status=VERIFIED|UNVERIFIED 和 value_source=DETERMINISTIC|LOCAL_VLM。空 SKU/价格必须对应 UNVERIFIED,不得伪装 成匹配或已验证。
  6. Admin 保存并展示上述状态。LOCAL_VLM 只表示值的解析来源,不降低商品身份、证据、 人工确认、授权、下单或支付边界。
  7. 第二轮 FALLBACK 不调用规格模型;只显式回传 UNVERIFIED,供采购员人工判断。

方案

  1. 将规格 VLM schema 升级,最终 verify 响应增加受限价格节点集合;通过当前节点原文 计算 selectedSummary,通过共享人民币解析器计算 PinduoduoSpecificationPrice。
  2. 当确定性目标已选但摘要/价格缺失时也执行一次最终复核;接受后把 proof、摘要、价格 和 LOCAL_VLM 来源绑定同一截图 SHA-256 并写入现有进度快照。
  3. Android 候选 outbox 增加三个状态字段;Go API 严格校验状态组合,migration 为候选 observation 增加审计列,仓储和 Admin 详情透传展示。
  4. 增加模型输出伪造价格、未知 node ID、结构变化、低置信度、空价格和 fallback 禁用模型 的回归测试。

验收要点

  • 确定性规格和价格完整时零模型调用,状态为 MATCH/VERIFIED/DETERMINISTIC。
  • 拆分价格节点可经最终 VLM 选择后由代码解析,SKU 和价格不再为空。
  • 未知节点、模型自报金额、旧快照、低置信度和不安全内容全部失败关闭。
  • 无法读取价格时可回传 UNVERIFIED 候选,但不能显示为价格已验证。
  • 第二轮 fallback 不调用模型并显式回传两个 UNVERIFIED 状态。
  • Admin 保存并显示验证状态和来源;历史候选默认按 UNVERIFIED 读取。
  • migration up/down/up、Go 全量测试、Android 双变体单测、lint 和构建通过。

边界

  • 本任务不修改任务价格为空时的授权上限策略,该策略由 T-278 完成。
  • 不把模型配置移到 Admin,不把节点 JSON、截图或模型原始响应写日志/数据库。
  • 不在订单 dry-run 使用本兜底;确认商品后的下单链路由 T-279 接入。

执行记录

  • 2026-08-01:复用 T-272 安全节点快照和本机模型边界创建任务,状态 TODO。
  • 2026-08-01:完成规格/价格节点复核、显式验证状态、数据库审计列和 Admin 展示; Go 全量测试及 Android Debug/Release 共 934 项测试、lint、构建通过,状态 DONE。