feat(edit): AI套图生成、图片切七牛

This commit is contained in:
2026-10-04 20:47:47 +08:00
parent 696112e74d
commit e20cd7547f
60 changed files with 6241 additions and 312 deletions
+45 -1
View File
@@ -2,6 +2,44 @@
> 更新:2026-09-30。此文是新 AI 对话、架构讨论与开发工作的首读入口。开始开发前,必须先阅读并遵守 [`development-collaboration-contract.md`](./development-collaboration-contract.md) 和仓库 `AGENTS.md`。下方按日期记录的旧方案仅供追溯;当前状态以本节、2026-09-29 类目佣金记录及最新的 1.47 节为准。
## 2026-10-04 SKU 主动重算使用最新默认方案
根因:`SkuPricing.calculate` 优先使用 SKU 已保存的 `pricing_draft`,「重新试算」和批量按钮只强制重发相同参数,旧零折扣因此使实际售价与划线价相同。当前集成会话仅调整 Web `SkuPricing`、补充定价引擎公式回归测试及 API/交接说明,不修改服务端业务、HTTP 字段、定价引擎或数据库。
两个主动入口重读目标店铺定价目录,使用最新默认方案的完整参数替换旧 SKU 参数,沿用当前成本与有效包装;无默认方案/费率不可用/读取失败时明确提示,不回退零折扣。自动试算、手工售价输入和试算详情继续使用当前参数。批量跳过已导入 SKU,试算结果仍需保存草稿确认。表单监听保留未注册字段,返回报价直接核对实时表单,避免参数回填的渲染时序误丢弃报价;建立同一计算上下文时不取消已经发出的匹配请求。
验证:ego-browser 隔离真实组件复现旧零折扣两价相同,确认单 SKU 与批量使用最新 50% 折扣、划线价为实际售价两倍,保留成本和包装继承,跳过已上架 SKU;页面打开后将默认方案改为 25% 再重算能读取新值;手工实际售价不覆盖当前折扣;无默认方案、费率不可用、目录失败均不生成回退报价。定价引擎 16 项(新增 CNY/RUB 的 50% 折扣)和定价保存 12 项通过;Web/API 源码与测试类型检查、构建及差异检查通过。临时页面已清理,无真实商品保存或平台发布,未手动启停原有服务。
## 2026-10-04 实际售价、划线价展示与首次发布价格
本轮由当前集成会话负责,范围为 Web `SkuPricing`、`PricingCalculator`、`ProductPublishActions`、SKU 样式,API 发布映射/校验、发布回归测试和相关文档。按维护者要求,首次上架的 Ozon `price` 改为已确认 `listing.list_price`,不发送 `old_price`;保持 HTTP 字段、定价公式、数据库和 Worker 冻结快照执行方式。实际售价继续用于目标利润计算,用户上线后在 Ozon 调整实际售价;已创建任务沿用原价格快照,已导入 SKU 不自动更新。
SKU 收起摘要和展开定价区显示采购价、实际售价、划线价、预估净利润;试算结果实际售价与划线价同行。非人民币报价按同一报价快照比例换算摘要,不读取当前汇率改写历史价格。确认上架表格同时显示两价,划线价标为「本次上报价」。服务端预检与创建要求划线价有效且不低于实际售价,缺失/零值返回 `LIST_PRICE_REQUIRED`,低于实际售价返回 `LIST_PRICE_INVALID`;零折扣两价相同可发布。
验证:发布 11 项、商品编辑 13 项、定价引擎 15 项、定价保存 12 项全部通过,覆盖十进制划线价冻结/实际模拟 Ozon 请求、实际售价保留、零折扣、缺失/零划线价阻断、幂等和租户隔离。API 源码/测试类型检查及构建、Web 类型检查及构建通过。ego-browser 隔离真实组件检查 721px/390px 下的两价同行与无页面横向溢出、展开区、上架确认和 RUB 报价的人民币摘要;未向真实 Ozon 发布,未修改真实商品,原有服务未手动启停。临时验证页面已清理。
## 2026-10-04 主题标签格式与 AI 输出校验
本轮由当前集成会话负责,范围为共享 `ozon-hashtags.ts` 规则、Web SPU/SKU 标签提示、API 发布预检/创建校验、Worker AI 全局及 SKU 文案提示词与输出整理,以及相关测试和文档;不修改 HTTP 请求结构、数据库或标签覆盖继承语义。标签逐项以单个 # 开头,正文只允许字母、数字和下划线,无内部空格;每项含 # 最多 30 字符,最多 30 项,发布继续拼为一个 Ozon 属性值。AI 补齐缺失 #,词间空白及连字符转下划线,过滤非法、超长及重复项,并保留同项中文对照。
历史与手工草稿仍允许保存,Web 给出具体格式提示;预检和任务创建按所选 SKU 实际使用的标签拦截,返回 `OZON_HASHTAG_INVALID`,合法 SKU 独立覆盖不受未使用的通用标签阻断。Web 支持以空格拆分多个输入标签,不自动改写已有内容。新规则及示例见商品编辑 API 文档。
验证:Worker 11 项、发布 HTTP/数据库/模拟 Ozon 10 项、商品编辑 13 项通过;contracts/API/Worker/Web 类型检查与构建通过。ego-browser 隔离真实组件验证缺少 #、内部空格、非法标点、合法标签清除提示、空格拆分及 SKU 覆盖独立提示;临时页面已清理。未调用收费 AI 或向真实 Ozon 店铺发布,API/Worker 仍沿用原有开发监听进程,无手动启停。
## 2026-10-04 Ozon 多主题标签发布修复
本轮由当前集成会话负责,范围为 API 发布映射、发布集成测试和 API/交接文档,无 Web、Worker、数据库迁移或共享类型变更。原代码把每个主题标签分别映射到属性 `23171` 的 `values[]`,被实际 Ozon schema 的单值限制误阻断。读取本地缓存的 Ozon 原始说明确认:支持最多 30 个标签,用空格分隔放在同一个属性值中。草稿继续保存标签数组;发布时先按 SKU 覆盖或 SPU 继承解析标签,再过滤空项、去除首尾空白并拼成一个值,无标签则不提交属性。
先用新增回归复现相同的「#主题标签最多 1 个值」错误,修复后发布 HTTP/数据库/Worker 模拟平台测试全部 8 项通过,覆盖 SKU 覆盖、SPU 继承、30 个标签及空标签,并核对实际组装的 `/v3/product/import` 模拟请求。API 源码/测试类型检查与构建通过,未向真实店铺发布商品。原有 API 开发监听进程已自动重载并继续监听 8200,无手动启停;测试使用临时监听端口并已退出。
## 2026-10-04 套图生成固定操作区
本轮由当前集成会话负责,仅修改 Web 套图抽屉、底部操作区组件、样式与交接记录,复用现有 API,无契约或数据模型变更。维护者已确认「并列操作」设计:策略内容独立滚动,底部固定「本次生成」,生成/排队时并列显示取消和状态,智能规划有独立取消文案;取消确认及重复操作保护已接入,失败/取消后在同一区域只重试未完成图片。任务摘要使用执行快照,成功图片保留,结果列移除重复进度和重试入口。使用真实组件及模拟任务验证桌面/窄屏、滚动固定、取消和重试状态,Web 类型检查与构建通过;未调用收费模型,未保存商品,临时页面已清理,原有开发服务未手动重启。具体前端交接见 [`../../apps/web/HANDOFF.md`](../../apps/web/HANDOFF.md)。
## 2026-10-03 智能规划失败诊断
当前集成会话修复范围为 Worker、共享错误码及相关文档,无请求字段、数据库迁移或生图流程变更。用户授权的两次真实 DeepSeek 诊断均在四张图片的 `type` 字段发生枚举校验错误;提示词改用有效示例和明确英文枚举,重试携带具体字段校验规则。Worker 每次校验失败和最终失败打印安全结构化日志,最终诊断写入 operation.result.failure;张数、字段、主体图、主题、尺寸及保存失败使用不同错误码。历史记录不回填推测结果,不保存模型原文、商品资料或凭据。离线测试验证错误路径、纠正反馈和诊断持久化;修复后的真实模型规划尚未再次调用。维护者 API/Worker 仍使用原有 watch 进程,无手动重启。
## 1. 项目定位
这是一个全新的云端产品,不是 `ozon-seller-kit` 的本地版重构。目标用户可拥有多个门店,每个门店只能绑定一个平台;平台自身可支持多个市场、国家、语言和币种。因此语言、币种、类目和发布规则不能写死为 Ozon 或中文/俄文。
@@ -12,9 +50,15 @@ pnpm monorepo 包含 Web、NestJS API、BullMQ Worker、WXT 浏览器扩展、
## 0. 交接结论(先看这里)
### 2026-10-03:AI 套图生成
智能规划已重新设计为按当前总张数预算规划(`image_count` 1–20、默认 4),不沿用旧项目固定图类配额。使用 Worker `.env` 中的 DeepSeek 配置,按 SKU 文字资料/要求和出图配置安排各张用途;底图 ID 不当作视觉识别证据,资料不足时不编造卖点或参数。严格校验预算、分类、主题、底图与实物单位;业务方案无效时重试一次,失败返回固定脱敏诊断。影响 Web/API/Worker/contracts,数据库结构不变。
已按维护者确认的三列右侧抽屉接入 Web、API、Worker、contracts 与数据库。默认 4 张(白底/场景/核心卖点/细节各 1)、四大类及逐张方案编辑,最多 8 张底图,逐张选用最多 3 张;明确绑定已保存 SKU。DeepSeek 异步规划,Pcore 复用单图链路并汇总为一个套图任务。支持历史结果、后台生成、取消、保留部分成功图与重试;重试代次避免旧轮询/迟到回写污染新任务。结果只回填目标 SKU 表单。迁移 056–059;具体契约与验收范围见 [套图 API](../api/product-image-suites.md)。API/数据库/Worker 自动测试不发起收费模型调用;真实套图质量仍需业务样本验证。
已完成“采集 → 采集箱 → 商品编辑草稿”的主要数据闭环、平台级类目/属性/字典目录与发布预检。编辑页已接入异步「AI 填报」:基于来源资料与 Atlas 类目树生成类目建议、型号/SKU 货号、证据充分的包装建议及 SPU 中俄文案;单 SKU 文案由用户单独生成并确认应用。AI 结果只回填未保存表单,保存草稿仍是持久化边界。Ozon 动态类目属性可按已选类目加载并手工填写,**当前不由 AI 自动填报**。SKU 图片选择现支持采集候选图、工作空间上传图和网络导入图;在弹窗确认后回填草稿,页面保存后持久化。
SKU 定价已打通试算、表单应用与原子保存确认,在线商品同步已有 API/Worker。首次发布 job/import 与结果轮询已接入;生产启用仍需完成 VAT 与七牛图片交付验收;正式定价还需完成 CEL 费率及类目佣金映射审核。AI 类目推荐和文案已能运行,但不能等同于跨来源样本验收;尤其应继续用 1688/淘宝/天猫样本核验 Atlas 类目候选质量,以及俄文文案、包装证据和 SKU 继承行为。AI 套图生图仍是占位入口;图片「编辑」菜单中的一键 3:4、添加水印和单张 AI 编辑已接入异步素材任务。
SKU 定价已打通试算、表单应用与原子保存确认,在线商品同步已有 API/Worker。首次发布 job/import 与结果轮询已接入;生产启用仍需完成 VAT 与七牛图片交付验收;正式定价还需完成 CEL 费率及类目佣金映射审核。AI 类目推荐和文案已能运行,但不能等同于跨来源样本验收;尤其应继续用 1688/淘宝/天猫样本核验 Atlas 类目候选质量,以及俄文文案、包装证据和 SKU 继承行为。AI 套图已接入规划、逐张生成、取消和失败重试;图片「编辑」菜单中的一键 3:4、添加水印和单张 AI 编辑已接入异步素材任务。
当前优先事项:用真实来源样本回归 AI 类目推荐、文案与图片选择,补做真实图片上传/网络导入联调;审核正式物流费率与佣金映射,并用实际结算账单核对 Ozon 平台服务费、收款费和其他扣费;完成首次发布在中国主体跨境 rFBS 测试店铺的 VAT 省略与七牛延迟抓图验收。平台参考目录目前由平台级参考源和同步任务维护,不能把 9 月 10 日的门店级缓存描述当作现行架构。