Files
cmautobuy/docs/task/201-Admin实现AI规格候选匹配直接落库与来源审计.md
T
2026-08-14 10:09:21 +08:00

4.2 KiB
Raw Blame History

201 Admin:实现 AI 规格候选匹配、直接落库与来源审计

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#199 / AI规格批量匹配
  • 状态:已完成
  • 日期:2026-08-14
  • Gitea 工单:#201

背景与目标

现有确定性规则只能排序 PDD 规格,歧义结果仍需逐条人工保存。本任务在现有候选和采购 门禁上增加 OpenAI 兼容模型选择,并且只允许合格结果写入当前有效映射。人工映射始终 优先,AI 决策历史只追加、不删除。

最终方案

  • MySQL v21 为 spec_mappings 增加 manual、rule、ai 来源以及服务商、模型、 置信度、原因、版本和上下文版本字段;新增不含凭据和订单信息的 AI 决策审计表。
  • 先运行原有规则。唯一确定结果直接以 rule 保存,不调用模型;额外维度能从 SYB 文本得到唯一信号时先缩小候选,否则转人工。
  • 模型只收到商品标题、SYB 规格文本和最多 24 个候选短编号。返回值使用严格 JSON, 服务端维护短编号到真实 pdd_option_key 的映射,伪造编号无法落库。
  • 自动保存前重新读取 PDD 采集结果和上下文版本,并再次执行可购买、颜色冲突、额外 维度和候选白名单检查。模型置信度必须达到批次快照中的管理员阈值。
  • 自动 upsert 在数据库表达人工优先和幂等规则:任何人工映射都不被覆盖;同一上下文 的并发自动结果由先写入者获胜;PDD/规则上下文变化后可以替换旧自动结果。
  • 人工详情保存固定把当前来源改回 manual 并清空当前 AI 元数据,但保留只追加审计。

改了哪些

  • admin/service/ai_specmatch_client.go:OpenAI 兼容请求、响应大小限制和严格 JSON 解析。
  • admin/service/ai_specmatch.go:规则短路、候选约束、模型调用、硬门禁、事务落库和审计。
  • admin/repository/mapping.go、admin/repository/ai_config.go:映射来源、自动幂等写入、 AI 决策审计和当前启用服务商读取。
  • admin/repository/mysql_db.go:MySQL v21 追加迁移和 schema 自检。
  • admin/repository/syb.go、admin/service/purchase_workflow.go:读取映射来源,人工保存 恢复 manual 来源并记录上下文版本。
  • admin/model/model.go:增加当前映射和 AI 决策模型。
  • admin/service/ai_specmatch*_test.go、admin/repository/mysql_db_integration_test.go: 增加模型结构、候选白名单、额外维度、低置信度、规则短路、人工并发优先和迁移测试。
  • docs/admin/:同步需求、架构、数据模型和安全基线。

验收结果

验收标准 结果
模型只能选择当前真实候选,伪造候选被拒绝 通过
唯一规则结果和已有人工映射不调用模型 通过
冲突、额外维度不明、低置信度、无效 JSON、超时和上下文变化不落库 通过(代码与假模型测试;上下文事务实库待验证)
合格结果写入有效映射并可被采购校验复用 通过(代码路径)
人工修改恢复 manual 且保留 AI 审计 通过(集成用例已编写)
PDD 重新采集后失效判断与人工映射一致 通过(复用现有可购买选项校验)
审计不含密钥、完整提示词/响应和订单/个人数据 通过
并发不覆盖人工映射,同一上下文保持幂等 通过(原子 SQL 与集成用例已编写)
MySQL 8.4 _test 迁移、事务和并发 未验证:本机未启用隔离测试库
固定 Go 1.23.0 build、test、vet 通过

测试

  • 执行的命令:
    • go test ./service ./repository -count=1
    • $env:GOTOOLCHAIN="go1.23.0"; go build ./...; go test ./... -count=1; go vet ./...
  • 结果:固定 Go 1.23.0 的构建、全量测试和静态检查全部通过;不需要 MySQL 的模型协议、 严格结构、候选编号和额外维度单元测试已实际执行。
  • 没验证到的部分:未执行 MySQL 8.4 _test 实库迁移、事务回滚和并发用例;未调用 真实 AI 服务商;未在生产数据上评价匹配准确率。

相关提交

  • aac289a feat: 实现 AI 规格候选匹配与审计 (#201)