4.2 KiB
4.2 KiB
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 服务商;未在生产数据上评价匹配准确率。
相关提交
aac289afeat: 实现 AI 规格候选匹配与审计 (#201)