[MVP] Admin AI规格批量匹配 #199

Open
opened 2026-08-13 10:04:10 +08:00 by ila · 2 comments
Owner

背景与目标

现有 Admin 已能把顺运宝规格与已采集的 PDD 可购买 SKU 做确定性排序,并由采购员在单条详情中人工保存映射。本 MVP 增加批量 AI 规格匹配:采购员在顺运宝列表勾选商品后发起匹配,AI 只能从当前真实候选中选择;通过服务端硬校验的结果直接写入现有规格映射并标记来源为 AI,之后仍由采购员显式创建真实采购任务。

同时在 Admin 增加仅管理员可访问的 AI 模型配置,用于快速切换服务商、OpenAI 兼容接口和模型。API Key 不写数据库、data/、日志、Gitea 或文档,保存后任何账号(包括管理员)都不能回显明文,只允许替换或清除。

范围与非范围

  • 范围:
    • Admin 内部集成 AI,不新建独立服务。
    • 管理员维护多个服务商配置并选择当前启用项;MVP 使用 OpenAI 兼容协议。
    • 采购员可在顺运宝列表对勾选商品执行批量 AI 匹配。
    • 已有有效映射优先复用;已有人工映射不得被 AI 覆盖。
    • AI 结果通过候选���份、可购买状态、颜色冲突、额外维度、置信度及上下文版本校验后直接保存。
    • 当前有效映射保存来源(AI/人工/规则)并保留不可覆盖的决策审计;人工修改后当前来源改为人工,历史 AI 审计保留。
    • 处理阶段筛选增加“AI规格匹配”,列表同时展示持久的匹配来源。
  • 非范围:
    • 不让模型生成数据库中不存在的规格。
    • 不自动创建采购任务、不自动登录、不自动付款。
    • 不改变 Client 四接口和真实下单门禁。
    • MVP 不开发各服务商专有协议,不拆独立 AI 微服务。
    • 不允许查看已保存 API Key 明文,不保存完整提示词、完整模型请求或业务隐私数据。

关键架构决策

  1. AI 调用放在 Admin 的独立客户端边界;页面、业务编排、数据库与外部 HTTP 调用继续分层。
  2. 普通配置(服务商、Base URL、模型、超时、并发、置信度阈值、启用状态)可进数据库;API Key 只进入部署时明确指定、位于仓库/data//release 之外且权限为 600 的密钥文件。生产建议路径为 /etc/cmautobuy/ai-secrets.yaml。
  3. 配置页面仅管理员可访问,服务端强制鉴权和 CSRF;采购员只使用批量匹配,不接触配置。
  4. 批量任务按“蝦皮商品 + SYB 规格身份 + 当前 PDD 商品 + 上下文版本”去重,持久化���度并限制并发;单条失败不回滚其他条。
  5. 模型只能返回服务器提供的候选 ID。保存前重新读取上下文并复用现有映射保存和失效校验原则。
  6. AI 映射是有效映射,可进入“可创建采购任务”;“AI规格匹配”是当前处理阶段筛选,而独立的来源标记在后续采购阶段仍可追溯。
  7. 配置变更不影响已启动批次:批次固定使用启动时的服务商、模型与规则版本快照。
  8. 模型调用失败、超时或不确定时保持“规格待匹配”,不猜测、不降级成自动选择。

阶段与子工单

  1. 管理员 AI 服务商配置与安全密钥存储。
  2. AI 候选匹配、直接落库、来源和审计。
  3. 顺运宝列表批量交互、进度和筛选。
  • #200 Admin:增加管理员 AI 服务商与模型配置
  • #201 Admin:实现 AI 规格候选匹配、直接落库与来源审计(依赖 #200)
  • #202 Admin:顺运宝列表增加批量 AI 匹配、进度与筛选(依赖 #200、#201)
  • #223 Admin:AI 服务商 Base URL 兼容 HTTP(补充 #200)

依赖与风险

  • 依赖现有 PDD 采集结果、spec_mappings、�����下文版本和人工详情页保存逻辑。
  • 模型可能返回错误、超时���格���异常,必须由确定性硬门禁拦截。
  • 自动写入错误映射会影响后续真实采购,因此已有人工映射不可覆盖,额外维度不明确时不得写入,人工修改必须立�����取���当前 AI 来源标记。
  • API Key 泄露风险通过独立密钥文件、权限 600、禁止明���回显和日志脱敏控制。
  • 数据库迁移使用实施时下一个未占用版本,旧版本可继续人工匹配;回退时停止新 AI 批次并保留已写入的有效���射和审计。

MVP 验收标准

  • 仅管理员能够查看和修改 AI 配置;采购员访问页面或接口返回拒绝。
  • 可以配置、测试并热切换 OpenAI 兼容服务商和模型,失败时保留上一有效配置。
  • API Key 未进入数据库、data/、日志、响应正文、工单或文档,保存后不能回显明文。
  • 勾选 SYB 商品可创建批量 AI 匹配,进度可查看,单条失败不影响其他条。
  • AI 只能选择当前可购买候选;硬门禁不通过时不写映射。
  • 合格 AI 结果直接保存并显示“AI匹配”,人工修改后当前标记变为“人工匹配”且审计历史保留。
  • 处理阶段可筛选“AI规格匹配”,后续阶段仍可查看匹配来源。
  • 已有人工映射不被覆盖,PDD/SYB 上下文变化会阻止过期结果写入。
  • 不自动创���采购任务,不改变 Client 四接口,不触发自动付款。
  • 固定 Go 1.23.0 的 build、test、vet,MySQL 8.4 _test 首建/升级/重放及权限、并发、超时回归通过。

回退策略

关闭 AI 功能并停止新批次即可回到现有单条人工匹配流程;配置和审计表保留。已经写入且仍有效的 AI 映射不做破坏性回滚,采购员可在详情页人工改写为人工映射。

实施中新增缺陷(2026-08-14)

  • #222 Admin:修复 AI 服务商配置新增后未落库

HTTP 模型接口兼容范围变更(2026-08-14)

用户明确要求 OpenAI 兼容 Base URL 同时支持 HTTP 和 HTTPS,并且不增加配置项。#223 只扩展允许的 URL 协议;现有 URL 凭据禁用、私网/回环/元数据限制、DNS、实际拨号、重定向校验和独立密钥存储保持不变。HTTP 不提供传输加密,使用者需自行承担链路明文风险。

生产可用性与失败反馈(2026-08-14)

  • #229 Admin:AI 规格匹配失败弹窗反馈并补齐生产密钥配置

候选上限调整(2026-08-21)

  • #284 Admin:AI 规格匹配候选上限放大至 100 条(补充 #201)

2026-08-21 生产发布任务

  • #285 Admin:部署 AI 规格候选上限放大至生产(依赖 #284)

AI 超时调整(2026-08-21)

  • #286 Admin / Client:AI 规格解析等待时间调整为 66 / 132 秒

2026-08-21 AI 等待时间生产发布

  • #287 Admin:部署 AI 规格解析 66 秒等待时间到生产(依赖 #286)

2026-08-21 候选上限 150 条生产发布

  • #288 Admin:部署 AI 规格候选上限 150 条到生产(依赖 #284)
## 背景与目标 现有 Admin 已能把顺运宝规格与已采集的 PDD 可购买 SKU 做确定性排序,并由采购员在单条详情中人工保存映射。本 MVP 增加批量 AI 规格匹配:采购员在顺运宝列表勾选商品后发起匹配,AI 只能从当前真实候选中选择;通过服务端硬校验的结果直接写入现有规格映射并标记来源为 AI,之后仍由采购员显式创建真实采购任务。 同时在 Admin 增加仅管理员可访问的 AI 模型配置,用于快速切换服务商、OpenAI 兼容接口和模型。API Key 不写数据库、`data/`、日志、Gitea 或文档,保存后任何账号(包括管理员)都不能回显明文,只允许替换或清除。 ## 范围与非范围 - 范围: - Admin 内部集成 AI,不新建独立服务。 - 管理员维护多个服务商配置并选择当前启用项;MVP 使用 OpenAI 兼容协议。 - 采购员可在顺运宝列表对勾选商品执行批量 AI 匹配。 - 已有有效映射优先复用;已有人工映射不得被 AI 覆盖。 - AI 结果通过候选���份、可购买状态、颜色冲突、额外维度、置信度及上下文版本校验后直接保存。 - 当前有效映射保存来源(AI/人工/规则)并保留不可覆盖的决策审计;人工修改后当前来源改为人工,历史 AI 审计保留。 - 处理阶段筛选增加“AI规格匹配”,列表同时展示持久的匹配来源。 - 非范围: - 不让模型生成数据库中不存在的规格。 - 不自动创建采购任务、不自动登录、不自动付款。 - 不改变 Client 四接口和真实下单门禁。 - MVP 不开发各服务商专有协议,不拆独立 AI 微服务。 - 不允许查看已保存 API Key 明文,不保存完整提示词、完整模型请求或业务隐私数据。 ## 关键架构决策 1. AI 调用放在 Admin 的独立客户端边界;页面、业务编排、数据库与外部 HTTP 调用继续分层。 2. 普通配置(服务商、Base URL、模型、超时、并发、置信度阈值、启用状态)可进数据库;API Key 只进入部署时明确指定、位于仓库/`data/`/release 之外且权限为 600 的密钥文件。生产建议路径为 `/etc/cmautobuy/ai-secrets.yaml`。 3. 配置页面仅管理员可访问,服务端强制鉴权和 CSRF;采购员只使用批量匹配,不接触配置。 4. 批量任务按“蝦皮商品 + SYB 规格身份 + 当前 PDD 商品 + 上下文版本”去重,持久化���度并限制并发;单条失败不回滚其他条。 5. 模型只能返回服务器提供的候选 ID。保存前重新读取上下文并复用现有映射保存和失效校验原则。 6. AI 映射是有效映射,可进入“可创建采购任务”;“AI规格匹配”是当前处理阶段筛选,而独立的来源标记在后续采购阶段仍可追溯。 7. 配置变更不影响已启动批次:批次固定使用启动时的服务商、模型与规则版本快照。 8. 模型调用失败、超时或不确定时保持“规格待匹配”,不猜测、不降级成自动选择。 ## 阶段与子工单 1. 管理员 AI 服务商配置与安全密钥存储。 2. AI 候选匹配、直接落库、来源和审计。 3. 顺运宝列表批量交互、进度和筛选。 - [ ] #200 Admin:增加管理员 AI 服务商与模型配置 - [ ] #201 Admin:实现 AI 规格候选匹配、直接落库与来源审计(依赖 #200) - [ ] #202 Admin:顺运宝列表增加批量 AI 匹配、进度与筛选(依赖 #200、#201) - [ ] #223 Admin:AI 服务商 Base URL 兼容 HTTP(补充 #200) ## 依赖与风险 - 依赖现有 PDD 采集结果、`spec_mappings`、�����下文版本和人工详情页保存逻辑。 - 模型可能返回错误、超时���格���异常,必须由确定性硬门禁拦截。 - 自动写入错误映射会影响后续真实采购,因此已有人工映射不可覆盖,额外维度不明确时不得写入,人工修改必须立�����取���当前 AI 来源标记。 - API Key 泄露风险通过独立密钥文件、权限 600、禁止明���回显和日志脱敏控制。 - 数据库迁移使用实施时下一个未占用版本,旧版本可继续人工匹配;回退时停止新 AI 批次并保留已写入的有效���射和审计。 ## MVP 验收标准 - [ ] 仅管理员能够查看和修改 AI 配置;采购员访问页面或接口返回拒绝。 - [ ] 可以配置、测试并热切换 OpenAI 兼容服务商和模型,失败时保留上一有效配置。 - [ ] API Key 未进入数据库、`data/`、日志、响应正文、工单或文档,保存后不能回显明文。 - [ ] 勾选 SYB 商品可创建批量 AI 匹配,进度可查看,单条失败不影响其他条。 - [ ] AI 只能选择当前可购买候选;硬门禁不通过时不写映射。 - [ ] 合格 AI 结果直接保存并显示“AI匹配”,人工修改后当前标记变为“人工匹配”且审计历史保留。 - [ ] 处理阶段可筛选“AI规格匹配”,后续阶段仍可查看匹配来源。 - [ ] 已有人工映射不被覆盖,PDD/SYB 上下文变化会阻止过期结果写入。 - [ ] 不自动创���采购任务,不改变 Client 四接口,不触发自动付款。 - [ ] 固定 Go 1.23.0 的 build、test、vet,MySQL 8.4 `_test` 首建/升级/重放及权限、并发、超时回归通过。 ## 回退策略 关闭 AI 功能并停止新批次即可回到现有单条人工匹配流程;配置和审计表保留。已经写入且仍有效的 AI 映射不做破坏性回滚,采购员可在详情页人工改写为人工映射。 ## 实施中新增缺陷(2026-08-14) - [ ] #222 Admin:修复 AI 服务商配置新增后未落库 ## HTTP 模型接口兼容范围变更(2026-08-14) 用户明确要求 OpenAI 兼容 Base URL 同时支持 HTTP 和 HTTPS,并且不增加配置项。#223 只扩展允许的 URL 协议;现有 URL 凭据禁用、私网/回环/元数据限制、DNS、实际拨号、重定向校验和独立密钥存储保持不变。HTTP 不提供传输加密,使用者需自行承担链路明文风险。 ## 生产可用性与失败反馈(2026-08-14) - [ ] #229 Admin:AI 规格匹配失败弹窗反馈并补齐生产密钥配置 ## 候选上限调整(2026-08-21) - [ ] #284 Admin:AI 规格匹配候选上限放大至 100 条(补充 #201) ## 2026-08-21 生产发布任务 - [ ] #285 Admin:部署 AI 规格候选上限放大至生产(依赖 #284) ## AI 超时调整(2026-08-21) - [ ] #286 Admin / Client:AI 规格解析等待时间调整为 66 / 132 秒 ## 2026-08-21 AI 等待时间生产发布 - [ ] #287 Admin:部署 AI 规格解析 66 秒等待时间到生产(依赖 #286) ## 2026-08-21 候选上限 150 条生产发布 - [ ] #288 Admin:部署 AI 规格候选上限 150 条到生产(依赖 #284)
Author
Owner

MVP 集成候选已完成,待用户验收

#200、#201、#202 已按依赖顺序完成实现、单元归档和工单回写:

  • #200:管理员 AI 服务商配置、安全密钥文件、测试和启停;
  • #201:规则优先、AI 候选白名单、硬门禁、当前映射来源及只追加决策审计;
  • #202:顺运宝批量入口、批次持久化、有界并发、上下文去重、进度、来源筛选和重启中断。

MVP 边界保持不变:AI 匹配不创建采购任务、不调用 Client、不自动付款,也没有放宽真实采购门禁;API Key 不进入数据库、data、日志、响应、工单或归档。

固定工具链集成回归:

  • GOTOOLCHAIN=go1.23.0 go build ./...:通过
  • GOTOOLCHAIN=go1.23.0 go test ./... -count=1:通过
  • GOTOOLCHAIN=go1.23.0 go vet ./...:通过
  • node --check static/js/app.js:通过
  • 实际工具链:go1.23.0 windows/amd64

未验证项:当前没有启用独立 MySQL 8.4 _test 数据库,涉及 v20-v22 实际迁移、事务并发、重启恢复的专项用例被明确跳过;未连���真实模型服务,也未执行浏览器 1366×768 人工验收。没有使用生产库代替测试库。

按项目流程,本 MVP 和三个子工单继续保持打开;用户验收通过后再关闭子工单、更新本工单清单并创建 MVP 总结归档。

## MVP 集成候选已完成,待用户验收 #200、#201、#202 已按依赖顺序完成实现、单元归档和工单回写: - #200:管理员 AI 服务商配置、安全密钥文件、测试和启停; - #201:规则优先、AI 候选白名单、硬门禁、当前映射来源及只追加决策审计; - #202:顺运宝批量入口、批次持久化、有界并发、上下文去重、进度、来源筛选和重启中断。 MVP 边界保持不变:AI 匹配不创建采购任务、不调用 Client、不自动付款,也没有放宽真实采购门禁;API Key 不进入数据库、data、日志、响应、工单或归档。 固定工具链集成回归: - `GOTOOLCHAIN=go1.23.0 go build ./...`:通过 - `GOTOOLCHAIN=go1.23.0 go test ./... -count=1`:通过 - `GOTOOLCHAIN=go1.23.0 go vet ./...`:通过 - `node --check static/js/app.js`:通过 - 实际工具链:`go1.23.0 windows/amd64` 未验证项:当前没有启用独立 MySQL 8.4 `_test` 数据库,涉及 v20-v22 实际迁移、事务并发、重启恢复的专项用例被明确跳过;未连���真实模型服务,也未执行浏览器 1366×768 人工验收。没有使用生产库代替测试库。 按项目流程,本 MVP 和三个子工单继续保持打开;用户验收通过后再关闭子工单、更新本工单清单并创建 MVP 总结归档。
Author
Owner

关联跨端 MVP #253。#199 继续负责 Admin 网页批量 AI 匹配和通用 AI 配置/候选安全核心;#255 在其基础上增加采购运行时真机候选编排。两者必须复用同一模型客户端、端点安全、候选白名单、置信度和响应硬校验,不能复制第二套 AI 配置或密钥存储。

#253 会新增一次性 Client 规格解析命令,但不改变 #199 原有“SYB 列表人工发起批次”的范围,也不让模型创建采购任务或生成候选外规格。

关联跨端 MVP #253。#199 继续负责 Admin 网页批量 AI 匹配和通用 AI 配置/候选安全核心;#255 在其基础上增加采购运行时真机候选编排。两者必须复用同一模型客户端、端点安全、候选白名单、置信度和响应硬校验,不能复制第二套 AI 配置或密钥存储。 #253 会新增一次性 Client 规格解析命令,但不改变 #199 原有“SYB 列表人工发起批次”的范围,也不让模型创建采购任务或生成候选外规格。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#199