基于Sorftime MCP的深度选品调研,LLM Agent执行多维分析(数据采集→属性标注→交叉分析→竞品VOC→壁垒评估→选品决策评估),交互式输出Markdown报告和Dashboard看板。
基于 Sorftime MCP + LLM Agent 的深度选品调研。LLM 直接执行分析逻辑,脚本仅负责数据采集和报告渲染。
核心特点:
脚本用途何时调用run_analysis.py主入口脚本:整合数据采集、分析、报告生成推荐使用collect_data.pySorftime 数据采集(类目、Top100、关键词、趋势)Step 1get_reviews.py竞品差评数据采集Step 4api_client.pySorftime API 调用 + SSE 解析 + 编码修复每次 API 调用render_dashboard.py生成 Dashboard 可视化看板(v3.1 修复版)报告生成阶段fix_data_json.py数据验证和修复脚本:校验并自动修复 data.jsonDashboard 生成前validate_data.py数据验证脚本:校验 data.json 字段命名和数据一致性报告生成前
脚本职责:
推荐使用方式:
bash
# 阶段1:数据采集(基础版 Dashboard)
python scripts/run_analysis.py "earbuds" US
# 阶段2:LLM 分析完成后,生成最终版报告
python scripts/run_analysis.py "earbuds" US --final
# 其他选项
python scripts/run_analysis.py "earbuds" US --collect-only # 仅数据采集
python scripts/run_analysis.py "earbuds" US --no-reviews # 跳过差评采集
重要:选品分析分为两个阶段,数据采集由脚本自动完成,LLM 分析需要人工参与。
bash
python scripts/run_analysis.py "keyword" US
输出:
data.json - 基础数据结构(不含分析结论)dashboard.html - 基础版看板(不含决策评分、VOC 等)raw/ - 原始数据文件脚本自动完成:
必须完成的 LLM 分析任务:
步骤任务输出到 data.json1属性标注product_types、 dimensions_analysis2交叉分析cross_analysis3VOC 分析voc_analysis.dimensions4壁垒评估barriers5决策评估decision (overall_score, verdict)
完成后运行:
bash
python scripts/run_analysis.py "keyword" US --final
--final 参数会:
也可以单独检查数据完整性:
bash
python scripts/render_dashboard.py data.json --check
输出示例:
text
✓ 数据完整,可以渲染完整版 Dashboard
包含: decision.overall_score, voc_analysis.dimensions, barriers, cross_analysis
或
text
⚠️ 数据不完整,缺少以下字段:
- decision.overall_score
- voc_analysis.dimensions
ℹ️ 请先完成 LLM 分析,然后重新运行渲染
text
📋 选品分析 - 信息确认
1. 产品/类目关键词:[用户提供]
2. 目标站点:[US/GB/DE/FR/IT/ES/CA/JP,默认US]
3. 选品场景:[新手入门/蓝海发现/季节性/品牌打造/定向品类]
4. 约束条件(可选):
- 价格区间:如 $10-40
- 月销量:如 > 1000
- 预算:如 10万人民币
API 调用顺序:
步骤API输出说明优先级0.5search_categories_broadlyblue_ocean_categories.json**【新增】蓝海市场发现📋 按需1.1category_name_searchcategory_info.json按产品名搜索类目(使用 searchName 参数)⛔ 必调1.2category_reporttop100.jsonTop100 产品数据⛔ 必调1.3keyword_detail × 3+keywords.json多维度关键词对比⛔ 必调1.4category_trendtrend.json新品占比趋势⛔ 必调1.5keyword_extendskeyword_extends.json【新增】关键词延伸词(维度发现)📋 推荐1.6potential_productpotential_products.json【新增】潜力产品发现**📋 推荐1.7product_detail × 6-10products.json竞品详情(按需)📋 按需1.8product_reviews × 6-10reviews.json竞品差评(按需)📋 按需
⚠️ 重要:API 参数说明(v3.0)
category_name_search 参数: {"amzSite": "US", "searchName": "bluetooth speaker"}
search_categories_broadly 参数(蓝海发现): {"amzSite": "US", "top3Product_sales_share": 0.4}potential_product 参数(潜力产品): {"amzSite": "US", "monthlySales_min": 500}keyword_extends 参数(延伸词): {"amzSite": "US", "keyword": "bluetooth speaker"}category_report 参数: {"amzSite": "US", "nodeId": "7073956011"}
脚本调用方式:
python
# 方法1: 使用 collect_data.py (推荐)
from scripts.collect_data import collect_data
result = collect_data("bluetooth speaker", "US")
# 方法2: 使用 api_client.py
from scripts.api_client import SorftimeClient
client = SorftimeClient()
# 获取类目ID(正确的方式)
category = client.search_category_by_product_name("US", "bluetooth speaker")
node_id = category[0]['nodeId']
# 获取Top100
top100 = client.get_category_report("US", node_id)
# 获取关键词详情
keywords = client.get_keyword_detail("US", "bluetooth speaker")
LLM 任务:从 Top100 标题中提取关键差异化维度
markdown
## 属性标注任务
基于以下 Top100 产品标题,提取 3-6 个关键差异化维度:
### 标题样本
[提供 Top20-30 标题作为样本]
### 提取要求
1. 识别差异化维度(如:功率、防水、续航、形态等)
2. 为每个产品标注维度值
3. 标注置信度(高/中/低)
### 输出格式
| ASIN | 功率 | 防水 | 续航 | ... | 置信度 |
对低置信度产品:调用 product_detail 补充验证
LLM 任务:从标注数据中发现供需缺口
markdown
## 交叉分析任务
基于以下已标注的 Top100 产品数据,执行交叉分析:
### 数据
[提供标注后的产品数据]
### 分析要求
1. 选择 2-3 对有意义的维度组合(如:功率×价格、防水×场景)
2. 识别:空白点(0产品)、薄供给(≤2产品)、高需求低供给
3. 分析每个缺口的原因(技术限制?需求不存在?被忽视?)
4. 按机会价值排序
### 输出格式
| 维度组合 | 状态 | 产品数 | 月销量 | 原因分析 | 机会评级 |
关键点:让 LLM 直接从数据中发现规律,而不是用 Python 脚本计算
竞品选择逻辑表(LLM 按细分段选择):
ASIN品牌选择理由类型覆盖维度[LLM 选择 6-10 个代表性竞品]
⛔ 差评维度归类(关键步骤)
必须按维度归类,禁止按 ASIN 组织
LLM 任务:将竞品差评按属性维度归类,并映射到品牌能力和产品方案
输入: competitor_reviews.json(按 ASIN 组织的原始差评)
输出: data.json 中的 voc_analysis 字段(按维度归类)
归类要求:
识别主要维度(3-6 个)- 基于差评内容提取痛点类别
每个维度包含:
dimension: 维度名称(如:音质/音量、舒适度、续航)pain_point: 痛点描述frequency: 提及频次percentage: 占比(如 "32%")affected_brands: 涉及品牌列表brand_opportunity: 品牌/供应链能力如何解决product_solution: 具体产品改进方向输出格式示例:
json
{
"voc_analysis": {
"dimensions": [
{
"dimension": "音质/音量",
"pain_point": "音量太小,户外听不清",
"frequency": 45,
"percentage": "32%",
"affected_brands": ["SHOKZ", "JLab"],
"brand_opportunity": "有14.2mm大动圈供应链",
"product_solution": "14.2mm动圈+音量增强模式"
}
],
"summary": "主要痛点集中在音质(32%)、舒适度(28%)、续航(18%)"
}
}
禁止的输出方式:
{"B0XXX": {"reviews": [...]}}进入壁垒评估:
壁垒类型等级数据锚点预估成本缓解方案Review 壁垒中/高Top10 均值 XXX 评论$XXXVine + PPC资金壁垒中/高首批备货 + 广告¥XX控制首批 MOQ...............
选品决策评估(五维评分):
维度权重评分(1-10)加权分依据市场规模20%[LLM 评分]X.X[数据依据]竞争格局25%[LLM 评分]X.X[数据依据]...............总分100%-X.XX****决策结论
决策结论映射:
产品矩阵(Tier 1 必填具体规格):
markdown
### Tier 1: [产品定位]
**目标市场**:[维度组合空白/机会]
**决策理由**:[数据依据]
| 维度 | 规格 | 决策依据 |
|------|------|----------|
| [维度1] | [具体值] | [为什么] |
| [维度2] | [具体值] | [为什么] |
**目标定价**:$XX.XX
**差异化主张**:[一句话]
**对标竞品**:[ASIN] — [我们的优势]
**预估月销潜力**:XX-XX 件
输出文件:
text
product-research-reports/
└── {category}_{site}_{YYYYMMDD}/
├── report.md # Markdown 完整报告(LLM 直接输出)
├── data.json # 结构化数据(供 Dashboard 使用)
├── dashboard.html # 可视化看板(脚本渲染)
└── raw/ # 数据文件
├── category_info.json # 类目信息
├── top100.json # Top100 产品数据
├── trend.json # 趋势数据
└── keywords.json # 关键词数据
data.json 结构(简化版):
json
{
"metadata": {
"category": "bluetooth speaker",
"site": "US",
"date": "20260319"
},
"market_overview": {
"top100_monthly_sales": 55000,
"top100_monthly_revenue": 5200000,
"avg_price": 95,
"top3_product_concentration": 0.2578,
"top3_brand_concentration": 0.5058,
"top10_brand_concentration": 0.8234
},
"dimensions": [...],
"cross_analysis": [...],
"competitors": [...],
"voc_analysis": {
"dimensions": [
{
"dimension": "音质/音量",
"pain_point": "音量太小,户外听不清",
"frequency": 45,
"percentage": "32%",
"affected_brands": ["SHOKZ", "JLab"],
"brand_opportunity": "采用更大驱动单元",
"product_solution": "14.2mm动圈+音量增强模式"
}
],
"summary": "主要痛点集中在音质(32%)、舒适度(28%)、续航(18%)"
},
"barriers": [...],
"go_nogo": {...}
}
⛔ 重要:数据字段命名规范
字段名说明示例top3_product_concentrationTop3 产品 销量占 Top100 总销量的比例0.2578 = 25.78%top3_brand_concentrationTop3 品牌 销量占 Top100 总销量的比例0.5058 = 50.58%top10_brand_concentrationTop10 品牌 销量占 Top100 总销量的比例0.8234 = 82.34%new_product_share新品(上架<6个月)销量占比0.26 = 26%
禁止模糊命名:
top3_concentration(不明确是产品还是品牌)top3_product_concentration 或 top3_brand_concentration⛔ 重要:VOC 分析数据结构
voc_analysis 字段必须包含按 维度归类 的差评分析,而非按 ASIN 组织:
字段类型说明dimensionstring痛点维度(如:音质/音量、舒适度、续航等)pain_pointstring痛点描述frequencynumber提及频次percentagestring占比(如 "32%")affected_brandsarray涉及的品牌列表brand_opportunitystring品牌/供应链能力如何解决product_solutionstring具体产品改进方案
render_dashboard.py 负责将 data.json 渲染为可视化看板。关键渲染规则:
html
<!-- 维度分布:双表格布局 -->
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 24px;">
<!-- 价格区间表格 -->
<!-- 产品形态表格 -->
</div>
<!-- 交叉分析:矩阵表格 -->
<table>
<thead><!-- 表头:产品形态 --></thead>
<tbody><!-- 行:价格区间,列:产品数 --></tbody>
</table>
<div class="insight-box">洞察:...</div>
详细 Prompt 模板请参考: references/prompt_templates.md
包含 6 个模板:
data.json 的 voc_analysis 字段top3_product_concentration / top3_brand_concentration,禁止模糊的 top3_concentrationdata.json 中的数值与报告文本一致text
category-selection (品类筛选五维评分)
↓
product-research (深度选品调研) ← 本 Skill
↓
amazon-analyse (竞品 Listing 深挖)
↓
review-analysis (评论深度分析)
区别:
category-selection:品类级别的快速筛选,五维评分product-research:指定品类的深度调研,多维度分析 + 选品决策评估amazon-analyse:单个竞品 Listing 的详细分析review-analysis:评论的深度痛点分析US, GB, DE, FR, IT, ES, CA, JP, MX, AE, AU, BR, SA
.mcp.json 读取raw/ 目录供验证错误信息原因解决方案HTTP Error 406: Not AcceptableAPI参数错误检查参数名是否为 searchName 而非 productName``An error occurred invoking 'xxx'API工具不存在检查 TOOLS 映射表中的工具名称未查询到对应产品ASIN无效或站点错误验证ASIN格式, 确认产品在该站点销售Authentication requiredAPI Key错误检查 .mcp.json 中的 key 参数中文乱码Mojibake编码脚本自动修复, 或运行 fix_encoding.py``IndentationError: unexpected indentWindows 命令行问题使用脚本文件而非 python -c``输出目录路径错误相对路径问题使用 run_analysis.py,自动处理路径NameError: name 'xxx' is not defined缺少 datetime 导入检查脚本 import 语句Dashboard 渲染问题Dashboard 显示空白data.json 结构不匹配v3.5 已修复: run_analysis.py 自动渲染 DashboardDashboard 未自动生成旧版本未集成渲染v3.5 已修复:数据采集完成后自动渲染PermissionError: [Errno 13]传递目录路径而非文件路径使用绝对路径调用: python render_dashboard.py -o output.html data.json``unrecognized arguments参数顺序错误正确格式: python render_dashboard.py -o dashboard.html data.jsonDashboard 缺少 VOC 数据LLM 未生成完整 voc_analysis确保 LLM 生成包含 voc_analysis.dimensions 的完整 data.jsonDashboard 交叉分析为空price_type_matrix 数据缺失确保数据采集包含价格区间分析KeyError: 'xxx'字段名不一致v3.4 已修复:支持新旧字段名兼容AttributeError: 'str' object has no attribute 'get'data.json 格式问题v3.4 已修复:自动转换为列表格式
如果自动渲染失败,可以手动调用:
bash
# 从输出目录调用
python .claude/skills/product-research/scripts/render_dashboard.py \
-o product-research-reports/{keyword}_{site}_{date}/dashboard.html \
product-research-reports/{keyword}_{site}_{date}/data.json
# 或者使用绝对路径
python "D:\amazon-mcp\.claude\skills\product-research\scripts\render_dashboard.py" \
-o "D:\amazon-mcp\product-research-reports\{keyword}_{site}_{date}\dashboard.html" \
"D:\amazon-mcp\product-research-reports\{keyword}_{site}_{date}\data.json"
功能工具名称参数类目搜索category_name_search``amzSite, searchName类目报告category_report``amzSite, nodeId类目趋势category_trend``amzSite, nodeId, trendIndex关键词详情keyword_detail``amzSite, keyword产品详情product_detail``amzSite, asin产品评论product_reviews``amzSite, asin, reviewType
print() 调试信息curl "https://mcp.sorftime.com?key=YOUR_KEY" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'版本: v3.6 (两阶段工作流 + 数据验证) | 最后更新: 2026-03-19