jungle-scout-deep-dive-analyzer

接入 Jungle Scout 真实数据,8 维度输出选品决策报告

SKILL.md

GitHub

选品深度调研——真实数据智能分析流水线

路径规范:以下所有技能内部路径均相对于 <skills_library> 中声明的技能安装目录。Agent 在运行时必须在前面加上技能基础路径。工作区输出路径相对于 <workspace_directory> 中定义的工作区根目录。

★★★ 绝对规则——final_report.md 是唯一交付物 ★★★

  1. final_report.md 必须由 Agent 写入 → 通过 write_file 写入沙箱 → 通过 submit_result 包含在 deliverables 中
  2. 任意步骤失败,仍须用现有数据写出 final_report.md——部分报告优于无报告
  3. 若流水线已执行,绝不以 deliverables: [] 调用 submit_result

双语支持

CJK 字符(U+4E00–U+9FFF)→ zh,否则 → en。所有输出跟随检测到的语言。

数据源标注

标注定义与用法见 references/data_source_badges.md。


适用场景

问题类型 示例(英文) 示例(中文)
市场机会 "Find blue ocean opportunities in Home & Kitchen" "寻找家居厨房品类的蓝海机会"
竞品分析 "Analyze competitor ASIN B0XXXXXX traffic keywords" "分析竞品 ASIN B0XXXXXX 的流量关键词"
产品验证 "Is the $25-$35 yoga mat market worth entering?" "瑜伽垫 $25-$35 价位值得进入吗?"
广告与流量 "What's the PPC bid for 'portable blender'?" "便携式搅拌机的 PPC 竞价是什么?"
趋势与季节性 "Is 'christmas lights' a seasonal product?" "圣诞灯饰是季节性产品吗?"

⛔ 不适用场景

若问题只需单次 API 调用即可回答,不要激活本技能。

用户意图 正确工具
关键词搜索量 jungle_scout_search(api_type="keywords_by_keyword_query")
ASIN 销量估算 jungle_scout_search(api_type="sales_estimates_query")
ASIN 关键词排名 jungle_scout_search(api_type="keywords_by_asin_query")
品牌声量份额 jungle_scout_search(api_type="share_of_voice")
产品数据库浏览 jungle_scout_search(api_type="product_database_query")
搜索量趋势 jungle_scout_search(api_type="historical_search_volume")
快速商品搜索 info_search(mode="shopping")
通用网络/趋势查询 info_search(mode="web/trend")

使用方法

⚠️ 轮次目录:所有路径使用 round-{N},不要硬编码 round-1。

总览

  1. 第 1 步 — 检测语言 → zh 或 en
  2. 第 2 步 — 收集 Jungle Scout API 数据(单次批量调用)→ CSV 文件
  3. 第 3 步 — 计算指标数据框架 → JSON
  4. 第 4 步 — 检测指标异常 → 生成 8 个决策导向子问题(每个含数据前提)
  5. 第 5 步 — 读取 CSV 数据 → Agent 交叉引用多源数据逐维分析 → 结构化答案 + 分析驱动的聚合产品推荐(★ 分析骨干)
  6. 第 6 步 — ★ 强制:三层产品推荐:分析驱动 → 数据筛选 → 搜索补充 → final_recommendations.csv + 图表(此时不要写报告)。报告第 4 节完全依赖本步输出。
  7. 第 7 步 — B2B 供应商搜索 → A 阶段:4 次 read_file(模板 + 答案 + CSV + 排名)→ B 阶段:按模板逐节组装报告 → C 阶段:写后核查清单 → 单次 write_file ★ + alibaba_supply.csv
  8. 第 8 步 — 调用 submit_result,在 deliverables 中包含 final_report.md

失败恢复:若任意步骤(2–6)报错,不要中止。继续执行并在第 7 步写出 final_report.md。 轮次预算:完整流水线约需 20 轮。若已超过第 25 轮但尚未开始第 7 步,跳过剩余步骤直接进入第 7 步。无论发生什么,调用 submit_result 前必须写出 final_report.md。


第 1 步:检测语言

使用 scripts/models.py 中的 detect_language()——CJK → zh,否则 → en。传入后续所有步骤。


第 2 步:收集 Jungle Scout API 数据 <cite>Jungle Scout</cite>

使用 jungle_scout_collect 工具在单次调用中获取所有 Jungle Scout 数据。该工具会自动并发调用 4 个必选 API(keywords_by_keyword、historical_search_volume、product_database、share_of_voice),将原始 JSON 文件保存到 output_dir,并返回汇总结果。若提供了 asin,还会自动调用 keywords_by_asin 和 sales_estimates。

2a. 调用 API(单次工具调用)

jungle_scout_collect(keyword="<user_keyword>", output_dir="/round-{N}/data")

带可选 ASIN(自动新增 2 次额外 API 调用):

jungle_scout_collect(keyword="<user_keyword>", output_dir="/round-{N}/data", asin="<ASIN>")

工具返回汇总示例:

jungle_scout_collect: 4/4 APIs succeeded for keyword='portable blender'.
  ✅ keywords_by_keyword: 50 records → `/round-{N}/data/raw_keywords.json`
  ✅ historical_search_volume: 51 records → `/round-{N}/data/raw_historical.json`
  ✅ product_database: 50 records → `/round-{N}/data/raw_products.json`
  ✅ share_of_voice: 1 records → `/round-{N}/data/raw_sov.json`

2b. JSON → CSV 转换

bash_command:

python -c "import sys, os; skill_dir = os.environ.get('SKILL_DIR', os.path.join(os.path.expanduser('~'), '.accio', 'skills', 'jungle-scout-deep-dive-analyzer')); sys.path.insert(0, os.path.join(skill_dir, 'scripts')); from collect_js_data import convert_all; convert_all(os.path.join(os.environ.get('WORKSPACE_DIR',''), 'round-{N}', 'data'), '<user_keyword>')"

API → CSV 输出对照:

API 输出 CSV
keywords_by_keyword keywords_market.csv
historical_search_volume keyword_trends.csv
product_database competitors.csv
share_of_voice market_concentration.csv
keywords_by_asin(可选) asin_keywords.csv
sales_estimates(可选) asin_sales.csv

第 3 步:计算指标数据框架 <cite>Jungle Scout</cite>

脚本:scripts/analyze_indicators.py

python -c "import sys, os; skill_dir = os.environ.get('SKILL_DIR', os.path.join(os.path.expanduser('~'), '.accio', 'skills', 'jungle-scout-deep-dive-analyzer')); sys.path.insert(0, os.path.join(skill_dir, 'scripts')); ws = os.environ.get('WORKSPACE_DIR',''); import analyze_indicators; analyze_indicators.main(keyword='<keyword>', input_dir=os.path.join(ws,'round-{N}','data'), output_file=os.path.join(ws,'round-{N}','data','indicator_framework.json'))"

计算 11 项指标:主关键词、品类、搜索量、头部营收、$5K+ 在售数、均价/均重/FBA 均值、均评论数/评分、垄断度、季节性、流量比、PPC 出价/转化率。

详细公式、阈值及边界情况处理见 references/indicator_definitions.md。 叙述性分析所用的定性阈值标准见 references/analysis_criteria.md。

输出:round-{N}/data/indicator_framework.json


第 4 步:子问题生成(8 个维度)<cite>Jungle Scout</cite>

无脚本——由 Agent 直接生成。模型定义见 scripts/models.py。

生成恰好 8 个子问题,每个维度一个:

# 维度(英文) 维度(中文) target_dimension 键
1 Market Size & Demand 需求规模分析 market_size_demand
2 Competitive Landscape 竞争格局分析 competitive_landscape
3 Demand Seasonality & Stability 稳定性分析 demand_seasonality
4 Margin Analysis & Price Positioning 利润空间 margin_analysis
5 Barrier to Entry 进入壁垒分析 entry_barrier
6 Marketing & Traffic 营销难度分析 marketing_traffic
7 Niche Opportunities 细分机会挖掘 niche_opportunities
8 User Pain-Points 痛点挖掘分析 pain_points

★ 子问题质量要求(强制)

完整模板库、异常检测规则、各类型示例及详细好/差案例对比见 references/subquestion_templates.md。

每个子问题必须满足全部 5 项标准:数据前置(以指标中的具体数字开头)、交叉引用(引用 ≥2 个 CSV 来源)、决策导向(以决策含义收尾)、可计算(需要计算,不得只是重申数值)、非显而易见(不能靠读取单个数值来回答)。

异常驱动的生成流程

第 4a 步:读取 indicator_framework.json 并检测异常(完整的异常→问题映射规则见 references/subquestion_templates.md)。

第 4b 步:从用户查询关键词中检测问题类型(见 references/subquestion_templates.md)。

第 4c 步:使用类型专属模板生成 8 个问题,将检测到的异常值注入为前提条件。8 个问题中至少 3 个必须由检测到的异常直接触发。

操作:读取指标 → 检测异常 → 检测语言 → 检测问题类型 → 生成 8 个问题 → 保存:

import sys, os
skill_dir = os.environ.get('SKILL_DIR', os.path.join(os.path.expanduser('~'), '.accio', 'skills', 'jungle-scout-deep-dive-analyzer'))
sys.path.insert(0, os.path.join(skill_dir, 'scripts'))
from models import SubQuestion, SubQuestionList, detect_language
from pipeline import save_subquestions

subquestions = SubQuestionList(
    question_type="Market Opportunity",
    user_query=user_query,
    language=detect_language(user_query),
    questions=[
        SubQuestion(
            question_id="1",
            question_text="Main keyword volume is only 442, but 50 related keywords exist. Calculate the aggregate search volume of the top 20 related keywords from keywords_market.csv. If the aggregate exceeds 5,000, the market has sufficient long-tail demand despite the low main keyword. Also identify the top 3 keywords by volume-to-competition ratio.",
            target_dimension="market_size_demand",
            expected_answer_format="table + aggregate_calculation",
            source_indicators=["search_volume", "related_keyword_count"],
        ),
        # ... 还有 7 个问题,每个含具体数据前提和交叉引用
    ],
)
save_subquestions(subquestions, base_dir="/round-{N}")

输出:round-{N}/reports/subquestions.json

⚠️ 核查:保存后用 read_file 读取 JSON,确认全部 8 个问题均包含来自指标的具体数字。若任意问题仅是将维度名称改写(如"分析竞争格局"),则重新生成。


第 5 步:真实数据答案 <cite>Jungle Scout</cite>

★ Agent 本身就是分析师。 不要尝试在 bash_command 内部调用外部 LLM。 Agent 直接读取数据、推理并生成结构化答案。

★ 本步骤生成 subquestion_answers.json——最终报告的分析骨干。 此处写下的每个答案都将成为深度分析(第 3 节)中的一个小节。 答案浅 → 报告浅。答案深 → 报告深。

5a. 提取全部 8 个维度的数据

编写并运行单个脚本,加载子问题 + CSV 数据并打印提取的上下文:

import sys, os, json
skill_dir = os.environ.get('SKILL_DIR', os.path.join(os.path.expanduser('~'), '.accio', 'skills', 'jungle-scout-deep-dive-analyzer'))
sys.path.insert(0, os.path.join(skill_dir, 'scripts'))
from answer_with_js_data import set_data_dir, extract_relevant_data
from pipeline import load_subquestions

base_dir = os.path.join(os.environ.get('WORKSPACE_DIR', ''), 'round-{N}')
set_data_dir(os.path.join(base_dir, 'data'))

with open(os.path.join(base_dir, 'data/indicator_framework.json')) as f:
    indicators = json.load(f)

subquestions = load_subquestions(base_dir)

print("=== INDICATOR FRAMEWORK ===")
print(json.dumps(indicators, indent=2, default=str))

for q in subquestions.questions:
    data = extract_relevant_data(q)
    print(f"\n=== Q{q.question_id}: {q.target_dimension} ===")
    print(f"Question: {q.question_text}")
    # ⚠️ 使用 q.question_id(不是 q.id)——SubQuestion 模型字段为 "question_id"
    print(f"Data keys: {list(data.keys())}")
    # 打印汇总统计,不打印完整 CSV 行
    for csv_name, csv_data in data.items():
        if isinstance(csv_data, dict):
            for k, v in csv_data.items():
                if k.startswith('top_') or k == 'all_brands' or k == 'trend_data':
                    print(f"  {csv_name}.{k}: [{len(v)} rows]")
                else:
                    print(f"  {csv_name}.{k}: {v}")

5b. Agent 逐维分析并写出答案

读取 5a 的数据输出后,Agent 构建全部 8 个 SubQuestionAnswer 对象。

★ 完整输出 JSON 结构、质量规则、深度要求及反模式见 references/js_data_answer_prompt.md。

关键规则:你就是分析师(不调用外部 LLM)。每个 answer_text ≥150 词且含 ≥3 个具体数字。每个 analysis_reasoning ≥100 词且包含计算过程。分析中自然识别出特定产品时,填入 recommended_asins。过滤掉配件类产品。

保存全部 8 个答案(使用 write_file + bash_command 模式):

import sys, os, json
skill_dir = os.environ.get('SKILL_DIR', os.path.join(os.path.expanduser('~'), '.accio', 'skills', 'jungle-scout-deep-dive-analyzer'))
sys.path.insert(0, os.path.join(skill_dir, 'scripts'))
from models import SubQuestionAnswer, SubQuestionAnswerList
from pipeline import save_subquestion_answers

answers = SubQuestionAnswerList(answers=[
    SubQuestionAnswer(
        question_id="1",
        answer_text="...",  # ≥150 词,含 ≥3 个来自 CSV 数据的具体数字
        data_points=[...],  # table/mixed 格式至少 ≥3 条
        confidence_level="high",
        analysis_reasoning="...",  # ≥100 词,含逐步计算过程
        conclusion="...",  # 一句话含核心关键数字
        citations=["keywords_market.csv", "indicator_framework"],
        presentation_format="mixed",
        chart_suggestion="",
        recommended_asins=[],  # 分析中识别出特定产品时填入
    ),
    # ... 对全部 8 个问题重复,保持相同深度
])
save_subquestion_answers(answers, base_dir="/round-{N}")

输出:round-{N}/reports/subquestion_answers.json

⚠️ 核查(强制):保存后对 subquestion_answers.json 运行 read_file 并验证:

  1. 恰好存在 8 个答案
  2. 每个 answer_text 包含 ≥3 个具体数字
  3. 每个 analysis_reasoning 至少包含一处计算
  4. 没有 answer_text 少于 150 词 若任意答案未通过检查,在进入第 6 步前重写该答案。

5c. 聚合分析驱动的产品推荐

保存 subquestion_answers.json 后,运行 generate_ranked_recommendations() 收集所有维度中的 recommended_asins,与 competitors.csv 交叉匹配,并按各 ASIN 被推荐的维度数量排名。

⚠️ 重要:pipeline.py 是库文件,不是 CLI 脚本。必须使用两步模式:先 write_file 创建运行脚本,再用 bash_command 执行。 不要运行 python pipeline.py --generate_ranked_recommendations——不会产生任何输出。

第 1 步 — write_file 创建运行脚本:

# 文件:{WORKSPACE_DIR}/round-{N}/data/run_tier1.py
import sys, os
skill_dir = os.environ.get('SKILL_DIR', os.path.join(os.path.expanduser('~'), '.accio', 'skills', 'jungle-scout-deep-dive-analyzer'))
sys.path.insert(0, os.path.join(skill_dir, 'scripts'))
from pipeline import generate_ranked_recommendations

base_dir = os.path.join(os.environ.get('WORKSPACE_DIR', ''), 'round-{N}')
ranked = generate_ranked_recommendations(base_dir=base_dir)
print(f"Analysis-driven recommendations: {len(ranked)} products")
for r in ranked[:10]:
    print(f"  {r['asin']} — {r['dimension_count']} dimensions — {r['title'][:60]}")

第 2 步 — bash_command 执行:

python "%WORKSPACE_DIR%\round-{N}\data\run_tier1.py"

Windows CMD 用 %WORKSPACE_DIR%;macOS/Linux 用 $WORKSPACE_DIR。

输出:round-{N}/reports/product_recommendations_ranked.json

这是第一层推荐来源。此处的产品由分析本身识别而出,并非来自泛化搜索,在最终报告中具有最高推荐权重。


第 6 步:产品推荐——三层策略 <cite>Amazon</cite> <cite>Jungle Scout</cite> <cite>Web</cite> <cite>matplotlib</cite>

脚本:scripts/pipeline.py(save_recommendations_csv()、generate_ranked_recommendations())

产品推荐来自三个来源,按优先级排序:

6a. 第一层——分析驱动(来自第 5c 步)

已在第 5c 步生成为 product_recommendations_ranked.json,此处无需额外操作。

  • 按 dimension_count 排名,用 competitors.csv 数据补充,标记 recommendation_source: "analysis-driven"
  • 典型产出:5–15 个产品。若为 0 个,没关系——继续第二层和第三层

6b. 第二层——数据筛选(来自 competitors.csv)

若第一层产出少于约 20 个,从 competitors.csv 进行数据驱动筛选补充。先计算分布统计值,再设置相对阈值(不要硬编码)。使用 write_file + bash_command 模式。

要求:write_file → /round-{N}/data/filter_tier2.py,然后 bash_command:

  1. 去除与第一层重复的 ASIN
  2. 标记 recommendation_source: "data-filtered" 和 recommendation_reason
  3. 保存至 {base_dir}/reports/_tier2_products.json

典型产出:额外 10–20 个产品。

6c. 第三层——搜索补充(info_search 商品搜索)

补足余量至约 50 个总产品,并获取用于报告展示标注的 reference_id:

  1. 使用 info_search(shopping: true, allowed_sites: ["amazon.com"]),基于子问题结论生成 4–6 条查询
  2. 结果自动保存至 /round-{N}/info_search/shopping_search/shopping_<query_slug>.csv
  3. 去除与第一层 + 第二层重复的 ASIN——为匹配产品保留 reference_id
  4. 新产品标记 recommendation_source: "search"

⚠️ reference_id 至关重要:只有 info_search 返回 reference_id(competitors.csv 不含)。 从匹配的搜索结果回填第一层/第二层产品的 reference_id,以便报告展示标注。

6d. 合并所有层并保存 CSV

操作:read_file → references/merge_tiers_example.md,将脚本复制到 /round-{N}/data/merge_tiers.py(替换 {N}),然后 bash_command 执行。

⚠️ 不要自己写合并脚本。 参考实现处理了自定义脚本(尤其是基于 pandas 的脚本)常常失败的 CSV 列名不匹配、评分/价格解析和 reference_id 回填问题。原样复制即可。

预期总输出:40–80+ 个产品。

★ 第 6 步完成检查点(强制)

进入第 7 步前,验证以下内容全部存在:

  1. round-{N}/reports/final_recommendations.csv — bash_command:python -c "with open(r'{WORKSPACE_DIR}/round-{N}/reports/final_recommendations.csv') as f: n=sum(1 for _ in f); print(n,'lines'); assert n>=10,'FAIL: <10 lines'" → 必须显示 ≥10 行
  2. round-{N}/reports/product_recommendations_ranked.json — 第一层产品
  3. round-{N}/info_search/shopping_search/ — 必须包含 ≥1 个 CSV 文件

若任意项缺失,返回执行对应的第 6 步子步骤后再继续。

输出:round-{N}/reports/final_recommendations.csv + round-{N}/charts/*.png


第 7 步:B2B 供应商搜索 + 撰写最终报告

在第 6 步完成后执行。

7a. B2B 供应商搜索(按推荐方向)

根据分析中识别的前 1–3 个可投资方向(来自第 5 步答案和第 3 节结论),按方向搜索供应商。每个方向独立调用 product_supplier_search,结果按推荐方向分组。

针对每个重点方向:

  1. product_supplier_search(intent_type="product", tasks=[{"query": "<方向专属查询>"}]) → 收集每个产品的 reference_id
  2. 若用户明确要求供应商信息,也针对该方向调用 product_supplier_search(intent_type="supplier", tasks=[...])。默认:仅执行商品搜索。

示例(2 个方向):

# 方向 1:高端玻璃瓶搅拌机
product_supplier_search(intent_type="product", tasks=[
  {"query": "premium high power portable blender glass bottle"}
])

# 方向 2:Mini USB-C 旅行搅拌机
product_supplier_search(intent_type="product", tasks=[
  {"query": "mini portable blender USB-C rechargeable travel"}
])
  1. 从所有方向合并生成 alibaba_supply.csv(使用 write_file + bash_command 模式):
    import sys, os
    skill_dir = os.environ.get('SKILL_DIR', os.path.join(os.path.expanduser('~'), '.accio', 'skills', 'jungle-scout-deep-dive-analyzer'))
    sys.path.insert(0, os.path.join(skill_dir, 'scripts'))
    from pipeline import save_alibaba_supply_csv
    base_dir = os.path.join(os.environ.get('WORKSPACE_DIR', ''), 'round-{N}')
    save_alibaba_supply_csv(all_supplier_products, base_dir=base_dir)
    

7b. 使用 write_file 工具写出 final_report.md(★ 关键)

⚠️ 不要使用 bash_command 写报告。 嵌入 bash 命令字符串中的报告内容会被截断。直接使用 write_file。 ⚠️ 不要将报告拆分为多次 write_file 或 edit_file 调用。 在单次 write_file 调用中写出完整报告,避免 edit_file 替换导致内容丢失。 (例外:C 阶段写后修复可以用 edit_file 修补单个小节。)

★ A 阶段:读取所有输入(4 次强制 read_file 调用)

写报告前必须执行以下全部 4 次 read_file 调用,一次都不能跳过。

# read_file 目标 获取内容 用于
1 assets/report_template_zh.md(zh)或 assets/report_template.md(en) 章节结构 + 维度模板(7 个子字段)+ 第 4/7 节写法指导 所有章节
2 round-{N}/reports/subquestion_answers.json 8 个 SubQuestionAnswer 对象——分析骨干 第 3 节(3.1–3.8)
3 round-{N}/reports/final_recommendations.csv 含 reference_id 的所有产品推荐 第 4 节 + 第 5 节
4 round-{N}/reports/product_recommendations_ranked.json 第一层分析驱动产品(#3 的子集) 第 4 节战略叙述

⚠️ 读取 #3 后的强制预检:若 final_recommendations.csv 不存在或少于 5 行,停止并返回执行第 6 步。不要在缺乏产品推荐数据的情况下写报告。

★ B 阶段:逐节组装报告

读取全部 4 项输入后,在单次 write_file 调用中将完整报告写入 /round-{N}/reports/final_report.md。

逐节组装规则(严格遵循模板结构):

第 1 节——执行摘要:综合总体发现。1 段。

第 2 节——指标数据框架:3 列 Markdown 表格(指标 | 数值 | 说明)。来源:第 3 步已获取的 indicator_framework.json 数值。按 <markdown_formatting_protocol> 使用内联引用语法。

第 3 节——深度分析(3.1–3.8):报告核心。8 个维度中的每一个都必须遵循模板的 7 字段结构。subquestion_answers.json 字段映射如下:

模板字段 SubQuestionAnswer 来源 最低要求
核心问题 对应子问题的 question_text 原文照录
为何分析此维度 Agent 根据维度上下文撰写 1–2 句
数据获取 citations 数组 列出来源 CSV 文件,使用内联引用语法
关键数据点(表格) data_points 数组 ≥3 行,每行含数值 + 单位 + 来源
分析 answer_text + analysis_reasoning ≥2 段,展开(不压缩)答案,展示计算过程
结论(含置信度 emoji) conclusion + confidence_level(high=🟢,medium=🟡,low=🔴) 1 句,含核心关键数字
决策影响 Agent 从结论推导 1 句,说明对进入决策的含义

⚠️ 常见失败:Agent 将某个维度压缩为 2-3 句,不含表格或子字段。 每个维度必须包含全部 7 个字段。如果你发现自己在用不到 200 词写一个维度,说明你在压缩——返回展开。 不要丢弃结构化答案,转而写浅层摘要。

第 3 节——分析汇总表(3.8 之后):8 个维度全部写完后,添加汇总表,便于读者快速把握全局:

### 分析汇总

| 维度 | 置信度 | 核心发现 | 决策影响 |
|------|--------|---------|---------|
| 3.1 需求规模分析 | 🟢 高 | 长尾聚合量是头部词的 19 倍 | 瞄准细分关键词 |
| 3.2 竞争格局分析 | 🟡 中 | 头部品牌在品质上存在弱点 | 通过评分差异化 |
| ... | ... | ... | ... |

每行:维度名称、置信度 emoji、一句话核心发现(含关键数字)、一句话决策影响。需包含全部 8 行。

第 4 节——商品搜索与定位:遵循模板的 5 部分写法:

  1. 市场定位摘要(1–2 段,综合第 3 节发现)
  2. 分析驱动商品表(来自 final_recommendations.csv):按战略主题分组构建单张统一表格(如"入门价位"、"高端空白"、"细分领导者"),不按第一/二/三层分组。至少需要 ≥10 行产品数据。在 Title 列按 <markdown_formatting_protocol> 使用内联商品引用。Image 列用 imageUrl 的 Markdown 图片语法。加标题如"### 推荐商品"标注数据来源。
    | 图片 | ASIN | 商品标题 | 价格 | 月销量 | 评分 | 战略洞察 |
    |------|------|---------|------|--------|------|---------|
    | ![](imageUrl) | B0XXXXXXXXX | 商品名称 [CITE:turnXproductY] | $XX.XX | X,XXX | 4.X | 此产品的意义 |
    
    无 reference_id 的产品 → 不使用内联商品引用,仅注明 ASIN。无 imageUrl 的产品 → Image 列留空。

    ⚠️ ASIN 列必须包含真实的 Amazon ASIN(如 B0D6NNPYTJ),不是像 turn1product2 这样的 reference ID。Reference ID 只出现在 Title 列的 [CITE:...] 中。

  3. 定位建议(1 段)
  4. 引用 final_recommendations.csv 完整列表

⚠️ 第 4 节产品必须来自 final_recommendations.csv——不得从分析文本中手工挑选。 ⚠️ 绝不捏造 reference_id——只使用工具实际返回的 ID。 ⚠️ 表格内部:用 [CITE:turnXproductY] 引用产品。表格外部(独立行):用 [PRODUCT:turnXproductY] 生成轮播。详见系统提示中的 <markdown_formatting_protocol>。

第 5 节——结论与可执行建议:决策章节——帮助用户行动,而非仅供阅读。

  1. 前 1–3 名精选决策表:将整体分析提炼为最具投资价值方向的对比表。每行 = 一个候选方向(不是单个 ASIN,而是产品策略)。从 final_recommendations.csv 中取该方向最具代表性产品的 imageUrl。

    | | 精选 1:[方向名称] | 精选 2:[方向名称] | 精选 3:[方向名称] |
    |---|---|---|---|
    | 代表产品 | ![](imageUrl) [商品名称] | ![](imageUrl) [商品名称] | ![](imageUrl) [商品名称] |
    | 核心商业价值 | [值得追求的理由] | ... | ... |
    | 目标毛利率 | [预估毛利率%] | ... | ... |
    | 主要风险 | [前 1–2 项风险] | ... | ... |
    | 置信度 | 🟢/🟡/🔴 | ... | ... |
    
  2. 可执行下一步(4 个具体步骤,不是泛泛建议):

    • 第 1 步(打样):向哪些供应商打样,测试什么
    • 第 2 步(成本测算):落地成本估算(运费 + 关税)
    • 第 3 步(小批量测试):建议 MOQ、履约渠道(如 FBA)
    • 第 4 步(品牌化):印 Logo、私标、包装

第 6 节——风险评估:数据缺口、垄断风险、低置信度领域。

第 7 节——B2B 供应推荐:按第 5 节中的推荐方向组织。针对每个方向:

  1. 方向标题(如"### 方向 1:高端玻璃瓶搅拌机")
  2. 该方向的简短采购策略(1–2 句)
  3. 该方向供应商产品 reference ID 的商品轮播标注(强制,独立行,按 <markdown_formatting_protocol>)
  4. 供应商商品 Markdown 表格——每行含搜索结果中的产品图片 URL + 内联商品引用(按 <markdown_formatting_protocol>)。列:图片 | 商品标题 | 平台 | 价格 | MOQ。每个方向 4 行(选取覆盖价格/MOQ 区间的代表性产品)。
  5. 将供应商价格与该方向 Amazon 利润率挂钩的采购洞察

所有方向完成后,引用 alibaba_supply.csv 完整列表。

⚠️ 表格内部:图片列用搜索结果中的 ![](product_image_url)(不是 [CITE:turnXimageY])。商品标题用 [CITE:turnXproductY]。表格外部(独立行):用 [PRODUCT:...] 生成轮播。

★ C 阶段:写后核查(强制)

write_file 完成后,对 final_report.md 运行 read_file,验证以下清单:

# 检查项 核查方式 若未通过
1 全部 7 节存在(1–7) 扫描 ## 1. 至 ## 7. 标题 重写
2 第 3 节有 8 个子节(3.1–3.8) 扫描 ### 3.1 至 ### 3.8 重写
3 第 3 节末尾有分析汇总表 查找含 8 行的 ### 分析汇总 补充
4 每个 3.X 含关键数据点表格 查找每个 3.X 下的 | 表格行 重写缺失项
5 每个 3.X 含带 emoji 的结论 查找每个 3.X 中的 🟢/🟡/🔴 补充缺失项
6 第 4 节"推荐商品"表格 ≥10 行 统计分析驱动表格中的 | 数据行 重写第 4 节
7 第 5 节含精选决策表 查找精选 1/2/3 对比表 补充
8 第 7 节每个方向含供应商商品表格 查找方向标题 + 表格 重写第 7 节
9 总字数 ≥ 4000 从文件长度估算 扩展单薄章节

若任意检查未通过,使用 edit_file 仅修复未通过的章节——不要重写整份报告。

质量要求摘要:

  • 报告总计 ≥ 4000 词
  • 第 3 节:8 个维度 × 每维 7 个字段,每维 ≥200 词
  • 第 4 节:来自 CSV 的 ≥10 个产品,按战略主题分组
  • 第 7 节:含图片/商品引用的供应商表格
  • 全文按 <markdown_formatting_protocol> 使用引用标注
  • 部分报告优于无报告。若写入失败,重试一次,然后进入第 8 步。

输出:★ round-{N}/reports/final_report.md + round-{N}/reports/alibaba_supply.csv


第 8 步:调用 submit_result(强制)

⛔ 提交前门禁 — 调用 submit_result 前,必须已完成 C 阶段核查:

  1. 写出后已对 final_report.md 执行 read_file
  2. 确认全部 7 节存在(## 1. 至 ## 7.)
  3. 确认第 3 节含分析汇总表
  4. 确认第 4 节商品表格 ≥10 行数据
  5. 确认第 5 节含精选决策表
  6. 确认第 7 节每个方向含供应商商品表格

若尚未完成 C 阶段,立即返回执行后再调用 submit_result。

final_report.md 必须存在。若不存在,返回第 7 步。

参数 传入内容
result_content 简短摘要(3–5 句),不是完整报告
deliverables ["<final_report_ref_id>"] 对应 final_report.md,不得为空
attachments CSV 和图表 PNG 的 ID
follow_up_engagement ≤20 词 + 2–3 条建议,以 - 开头
submit_result(
    result_content="The yoga mat market shows moderate opportunity...",
    deliverables=["<final_report_ref_id>"],
    attachments=["<csv_ref_id>", "<chart_ref_id>"],
    follow_up_engagement="Ways to go deeper:\n- Analyze top 3 products\n- Request supplier quotes"
)

调用 submit_result 后不再继续执行。使用工具返回的 reference ID(如 write_file 返回的),不要使用文件路径。


CSV 要求

见 references/csv_schema.md。以下两个文件均为强制输出:

  • final_recommendations.csv — 13 列(含来自 info_search 的 reference_id)
  • alibaba_supply.csv — 8 列