一套可靠的 AI 选品系统,不应只是 “搜索商品后让模型打分”,而应把数据检索、规则过滤、视觉分析、侵权预警、浏览器采集和报表交付组织成可验证、可恢复的工程流水线。
本文基于一个亚马逊美国站选品项目的代码结构,梳理其设计思路、执行顺序和改进方向。文中的模块名用于说明架构;账号、密钥、内网地址和真实人员信息均已移除。
第三方平台页面、接口和自动化政策可能变化。实施前应确认当前版本、账号权限、调用配额和平台规则,并优先使用获准的官方能力。
# 一、项目要解决什么问题
人工选品通常需要反复完成以下工作:
- 根据关键词搜索大量商品;
- 判断标题、主图和使用场景是否符合目标类目;
- 分析价格趋势与异常波动;
- 排查品牌、角色和知识产权风险;
- 打开第三方分析页面补充数据;
- 汇总为带图片、可审阅的 Excel 报表。
这个项目把上述过程拆成三层:
| 层次 | 主要职责 |
|---|---|
| 数据检索层 | 通过 MCP 工具获取商品、价格趋势和流量关键词 |
| AI 与规则筛选层 | 使用 Dify 工作流、确定性规则和词库逐步缩小候选集 |
| 采集与交付层 | 通过受控浏览器补充页面证据,最终写入 Excel |
核心目标不是让 AI 代替所有判断,而是让确定性规则、模型判断和人工复核各自承担合适的职责。
# 二、总体架构
关键词与业务参数 | |
↓ | |
MCP 商品搜索 | |
↓ | |
逐轮候选集 | |
↓ | |
标题分析 → 主图分析 → 价格趋势 → 风险词检测 | |
↓ | |
ASIN 清单与检查点 | |
↓ | |
第三方数据导出 | |
↓ | |
浏览器采集与视觉分析 | |
↓ | |
数据校验、图片嵌入与 Excel 报表 |
项目采用 “逐轮处理” 而不是一次加载全部商品。每轮搜索完成后立即筛选,并把通过的 ASIN 交给后续阶段。这种设计有三个好处:
- 降低一次性内存占用;
- 让长任务尽早产出结果;
- 单轮失败时可以从检查点恢复,不必全部重跑。
# 2.1 建议的代码分层
原项目的活动代码集中在 scrpit_test/ 。从长期维护角度看,建议逐步迁移为更清晰的结构:
src/ | |
├── config/ # 配置模型、参数校验、密钥引用 | |
├── adapters/ | |
│ ├── mcp/ # 商品、Keepa、流量词等 MCP 适配器 | |
│ ├── dify/ # 文本与图片工作流适配器 | |
│ ├── browser/ # 浏览器会话与页面适配器 | |
│ └── excel/ # 报表输出与回滚 | |
├── domain/ # 商品、价格序列、筛选结果等领域模型 | |
├── pipeline/ # 阶段编排、状态机、检查点 | |
├── policies/ # 类目、价格、侵权和失败策略 | |
└── observability/ # 日志、指标、审计与通知 |
这样可以把平台变化限制在适配器中,避免页面选择器、业务规则和 Excel 写入逻辑互相耦合。
# 三、三阶段流水线
# 3.1 阶段一:MCP 搜索与多层筛选
主编排器以生成器方式逐轮获取商品。逻辑步骤编号与实际执行顺序并不完全相同,当前推荐顺序是:
| 执行顺序 | 逻辑步骤 | 能力 | 说明 |
|---|---|---|---|
| 1 | Step 1 | MCP 商品搜索 | 分页获取候选商品并写入本轮原始文件 |
| 2 | Step 2 | Dify 文本分析 | 根据标题判断类目、场景和初步价值 |
| 3 | Step 3 | 暂停 | 五点描述筛选当前直接放行 |
| 4 | Step 5 | 暂停 | 上架时长移动到后续采集阶段 |
| 5 | Step 6 | Dify 视觉分析 | 先用主图过滤明显不合适的商品 |
| 6 | Step 4 | MCP + 统计规则 | 对缩小后的集合执行价格趋势分析 |
| 7 | Step 7 | MCP + 词库 | 获取流量词并进行知识产权风险预警 |
| 8 | Step 8 | 本地输出 | 生成 JSON、ASIN 清单和检查点 |
主图分析提前到价格趋势之前,可以减少较昂贵的数据请求,但需要用真实数据验证 “节省配额” 是否会牺牲召回率。
# 为什么暂停步骤不能被悄悄忽略
Step 3 和 Step 5 虽然暂时跳过,仍应在结果中明确记录:
{ | |
"step": "description_filter", | |
"status": "skipped", | |
"reason": "disabled_by_policy", | |
"policy_version": "2026-08" | |
} |
否则下游使用者容易把 “未执行” 误认为 “已通过”。
# 3.2 阶段二:第三方分析数据导出
阶段二读取本轮 ASIN 清单,通过受控浏览器进入第三方分析工具并下载竞品数据。
关键控制点包括:
- 只操作明确授权的账号和店铺;
- 使用稳定的任务 ID 关联输入清单与下载文件;
- 记录运行前后的下载目录快照;
- 校验导出文件中的 ASIN 覆盖率;
- 不按文件修改时间盲目选择 “最新文件”;
- 下载文件进入隔离目录后再解析。
如果导出数量低于预期阈值,应把本轮标记为 “不完整”,而不是直接进入最终报表。
# 3.3 阶段三:浏览器采集与 AI 分析
阶段三读取导出的 Excel,为每个 ASIN 补充页面数据和图片证据:
打开商品页 | |
→ 校验 ASIN 和站点 | |
→ 获取流量关键词 | |
→ 采集价格与销量图表 | |
→ 下载主图和必要截图 | |
→ 识别变体与上架信息 | |
→ 执行风险规则和 AI 分析 | |
→ 增量写入中间结果 | |
→ 生成最终带图报表 |
验证码、MFA 和安全挑战应转交人工处理,不应通过模型或脚本绕过。自动化恢复后,需要重新校验 ASIN、账号和页面状态。
# 四、核心模块职责
# 4.1 配置中心
配置层应负责:
- 命令行参数和环境变量解析;
- 关键词、节日和日期区间映射;
- 并发、限流、超时和重试参数;
- 允许域名、目标站点和输出路径;
- 策略版本与功能开关;
- 必填项、格式和互斥项校验。
配置不应直接保存真实密钥。推荐只保存 “密钥名称” 或安全存储引用。
# 4.2 MCP 适配器
MCP 适配器统一包装:
- 商品搜索;
- Keepa 或同类价格序列;
- 流量关键词;
- 商品详情。
适配器应把平台响应转换为稳定的内部模型,例如:
@dataclass | |
class ProductCandidate: | |
asin: str | |
marketplace: str | |
title: str | |
image_url: str | None | |
price_currency: str | |
source_timestamp: datetime |
上层流水线不应直接依赖第三方返回字段。
# 4.3 Dify 工作流客户端
Dify 客户端承担文本和图片工作流调用,但不应该成为业务规则的唯一来源。
建议为每次调用记录:
- 工作流与 Prompt 版本;
- 输入内容哈希;
- 模型输出原文;
- 结构化解析结果;
- 解析失败原因;
- 调用耗时和重试次数。
模型输出必须经过 JSON Schema 或等价结构校验,不能仅靠正则从自由文本中 “猜” 结果。
# 4.4 价格趋势分析
原有逻辑包含最低价、月内跌幅、跨月跌幅、整体趋势和异常点等规则。更稳妥的做法是把规则配置化:
price_policy: | |
minimum_price: 10 | |
first_month_drawdown_limit: 0.20 | |
month_to_month_drop_limit: 0.08 | |
overall_drop_limit: 0.08 | |
currency: USD | |
timezone: America/Los_Angeles |
还应明确:
- 缺失天数如何处理;
- 促销价、优惠券和变体价是否纳入;
- 使用均值、中位数还是加权价格;
- 异常点剔除前后是否保留两份结论;
- 数据不足时返回 “无法判断”,而不是默认通过。
统计检验只能辅助解释,不能替代业务阈值与数据质量检查。
# 4.5 知识产权风险预警
词库匹配适合作为低成本预警层,但不等同于法律结论。
推荐采用:
- 标准化大小写、连字符和 Unicode;
- 词边界与短词例外;
- 品牌、角色、作品和高风险主题分组;
- 标题、关键词、图片 OCR 分别记录命中来源;
- 白名单、别名和误报复核;
- 定期更新词库版本。
最终结果应写成 “风险提示,需要复核”,而不是 “确认侵权”。
# 五、并发、限流与重试
项目同时使用异步任务、线程池和浏览器并发。并发越高不一定越快,必须同时受以下资源约束:
| 资源 | 需要控制的内容 |
|---|---|
| MCP | 每分钟配额、突发限制、分页大小 |
| Dify | 工作流并发、上传大小、总超时 |
| 浏览器 | 标签页数量、内存、渲染稳定性 |
| Excel | 文件锁、写入互斥、图片内存 |
| 网络 | 连接池、DNS、代理和总带宽 |
重试策略应按错误类型决定:
| 错误类型 | 示例 | 策略 |
|---|---|---|
| 瞬时错误 | 超时、限流、临时网络失败 | 指数退避并限制次数 |
| 数据错误 | 字段缺失、金额格式异常 | 记录并进入人工复核 |
| 身份错误 | ASIN、账号或站点不匹配 | 立即停止当前任务 |
| 安全挑战 | CAPTCHA、MFA | 人工接管 |
| 页面漂移 | 选择器或字段结构改变 | 熔断并维护适配器 |
| 输出错误 | 文件占用、写入校验失败 | 回滚,不继续覆盖 |
非幂等动作不能自动重试。
# 六、检查点与断点续跑
检查点文件是长任务可恢复的关键,但仅保存 “已处理列表” 还不够。建议包含:
{ | |
"run_id": "run_demo_001", | |
"round": 1, | |
"step": "price_filter", | |
"input_hash": "<sha256>", | |
"policy_version": "2026-08", | |
"completed_asins": [], | |
"failed_asins": [], | |
"created_at": "<ISO-8601>", | |
"updated_at": "<ISO-8601>" | |
} |
恢复前必须校验输入哈希、策略版本和代码版本。否则旧检查点可能把已经变化的商品或规则错误地标记为完成。
检查点应先写临时文件,再通过同卷原子替换提交,避免进程中断留下半个 JSON。
# 七、Excel 报表的可靠写入
最终报表不仅是展示结果,也是交付物。推荐流程:
- 先生成结构化中间数据;
- 校验 ASIN 唯一性、站点、币种和必填字段;
- 把图片下载到受控缓存并验证类型与大小;
- 写入临时工作簿;
- 重新打开并校验工作表、行数、主键和公式;
- 为已有文件创建备份;
- 原子替换正式文件;
- 记录文件哈希、运行 ID 和生成时间。
外部文本以 = + - @ 开头时,需要防范 Excel 公式注入。图片、URL 和模型输出也应视为不可信输入。
# 八、Prompt 设计原则
标题和主图筛选可以采用分层 Prompt:
第一层:一票否决条件 | |
→ 明显不属于目标场景 | |
→ 高风险品牌或角色元素 | |
第二层:核心保留条件 | |
→ 节日或主题氛围 | |
→ 设计功能 | |
→ 目标符号或使用场景 | |
第三层:价值分级 | |
→ 可扩展的高优先级 | |
→ 形态单一的普通优先级 | |
→ 证据不足,人工复核 |
Prompt 中应要求模型输出 “结论 + 证据 + 置信度 + 不确定性”,并保留结构化 Schema。业务阈值和禁止项仍应由代码配置控制。
# 九、安全配置示例
公开文档只能使用占位符:
MCP_URL=https://mcp.example.com/mcp
MCP_API_KEY=<FROM_SECRET_STORE>
DIFY_BASE_URL=https://dify.example.com/v1
DIFY_APP_KEY=<FROM_SECRET_STORE>
MODEL_API_KEY=<FROM_SECRET_STORE>
BROWSER_ACCOUNT=<FROM_SECRET_STORE>
BROWSER_PASSWORD=<FROM_SECRET_STORE>
推荐优先级:
系统凭据库或密钥服务 | |
→ CI/CD 加密变量 | |
→ 仅限本机且不进入版本控制的环境文件 |
还应执行:
.env加入.gitignore;- 日志按字段白名单脱敏;
- URL 不记录密钥查询参数;
- 截图和下载文件设置访问权限与留存期限;
- 泄露过的密钥立即吊销和轮换;
- 测试环境与生产环境使用不同凭据。
# 十、安全的运行方式
示例命令使用匿名参数,不包含密钥或人员信息:
python run.py ` | |
--keyword "Halloween decor" ` | |
--operator "test-user" ` | |
--marketplace "US" ` | |
--month "2026-09" ` | |
--date-range "7-10" ` | |
--max-rounds 1 ` | |
--dry-run |
推荐按以下顺序晋级:
配置校验 | |
→ 单元测试 | |
→ 录制数据回放 | |
→ 单轮 dry-run | |
→ 单轮只读执行 | |
→ 人工检查结果 | |
→ 小批量金丝雀 | |
→ 正式批量 |
# 十一、验收清单
# 数据与规则
# 稳定性
# 输出与安全
# 结语
AI 选品流水线的价值,不只在于减少人工点击,更在于把选品逻辑变成可审阅的规则、证据和数据契约。
当 MCP 负责稳定取数、AI 负责处理非结构化判断、确定性代码负责校验与安全边界、人工负责授权和疑难复核时,这套系统才具备持续演进的基础。
