Back to skills
SKILL.md
Jungle Scout Deep Dive Analyzer
ASecurity接入 Jungle Scout 真实数据,8 维度输出选品决策报告
- 6 stars
- 0 votes
- 0 copies
- 2 views
- Added September 10, 2026
Works with
Security analysis
100/100Pro scans all 19 files and shows the line behind each finding
npx -y skills add huawolf/VaneWorker --skill jungle-scout-deep-dive-analyzer --agent claude-codeAre you the author of Jungle Scout Deep Dive Analyzer?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/huawolf-jungle-scout-deep-dive-analyzer)---
name: jungle-scout-deep-dive-analyzer
description: 接入 Jungle Scout 真实数据,8 维度输出选品决策报告
workflow: |
Deep-dive analysis pipeline:
Step 1: Detect user query language (Chinese → zh, English → en)
Step 2: Collect raw data via ONE jungle_scout_collect call (batch, concurrent) → CSV files (scripts/collect_js_data.py)
Step 3: Compute Indicator Data Framework from CSVs (scripts/analyze_indicators.py)
Step 4: Detect indicator anomalies → Generate 8 decision-oriented sub-questions with data premises (no script, agent generates directly)
Step 5: Agent reads CSV data + indicators → cross-references multiple sources → writes 8 deep SubQuestionAnswer objects with calculations (NO nested LLM call)
Step 6: 3-tier product recommendations (analysis-driven → data-filtered → search supplement) → merge script from reference → ~50 Amazon products + CSV + charts
Step 7: B2B Supply Search → Phase A: 4× read_file (template + answers + CSV + ranked) → Phase B: assemble report section-by-section per template → Phase C: post-write verification checklist → ONE write_file for complete final_report.md (★ CORE DELIVERABLE) + alibaba_supply.csv
Step 8: Call `submit_result` with final_report.md as the primary deliverable
enabled: true
title: JungleScout分析
example: |-
怎么使用?
Jungle Scout API-powered deep market analysis for Amazon product selection. Uses real keyword data, competitor metrics, trend history, and brand share data to compute an Indicator Data Framework, generate 8-dimension analytical deep-dive (Market Size, Competition, Seasonality, Margin, Entry Barri...
version: 1.0.0
---
# 选品深度调研——真实数据智能分析流水线
> **路径规范**:以下所有技能内部路径均相对于 `<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](https://www.junglescout.com)</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`:
```bash
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](https://www.junglescout.com)</cite>
**脚本**:`scripts/analyze_indicators.py`
```bash
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](https://www.junglescout.com)</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 个问题 → 保存:
```python
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](https://www.junglescout.com)</cite>
> ★ **Agent 本身就是分析师。** 不要尝试在 `bash_command` 内部调用外部 LLM。
> Agent 直接读取数据、推理并生成结构化答案。
>
> ★ **本步骤生成 `subquestion_answers.json`——最终报告的分析骨干。**
> 此处写下的每个答案都将成为深度分析(第 3 节)中的一个小节。
> 答案浅 → 报告浅。答案深 → 报告深。
### 5a. 提取全部 8 个维度的数据
编写并运行单个脚本,加载子问题 + CSV 数据并打印提取的上下文:
```python
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` 模式):
```python
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` 创建运行脚本:
```python
# 文件:{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` 执行:
```bash
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](https://www.amazon.com)</cite> <cite>[Jungle Scout](https://www.junglescout.com)</cite> <cite>[Web](https://www.google.com)</cite> <cite>[matplotlib](https://matplotlib.org)</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"}
])
```
3. 从所有方向合并生成 `alibaba_supply.csv`(使用 `write_file` + `bash_command` 模式):
```python
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 个维度全部写完后,添加汇总表,便于读者快速把握全局:
```markdown
### 分析汇总
| 维度 | 置信度 | 核心发现 | 决策影响 |
|------|--------|---------|---------|
| 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 图片语法。加标题如"### 推荐商品"标注数据来源。
```markdown
| 图片 | ASIN | 商品标题 | 价格 | 月销量 | 评分 | 战略洞察 |
|------|------|---------|------|--------|------|---------|
|  | 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`。
```markdown
| | 精选 1:[方向名称] | 精选 2:[方向名称] | 精选 3:[方向名称] |
|---|---|---|---|
| 代表产品 |  [商品名称] |  [商品名称] |  [商品名称] |
| 核心商业价值 | [值得追求的理由] | ... | ... |
| 目标毛利率 | [预估毛利率%] | ... | ... |
| 主要风险 | [前 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` 完整列表。
> ⚠️ **表格内部**:图片列用搜索结果中的 ``(不是 `[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 条建议,以 `- ` 开头 |
```python
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 列
Files in this skill
- SKILL.md
- assets/chart-design-guide.md
- assets/report_template.md
- assets/report_template_zh.md
- info.json
- references/analysis_criteria.md
- references/api_reference.md
- references/csv_schema.md
- references/data_source_badges.md
- references/indicator_definitions.md
- references/js_data_answer_prompt.md
- references/merge_tiers_example.md
- references/sdk_pitfalls.md
- references/subquestion_templates.md
- scripts/analyze_indicators.py
- scripts/answer_with_js_data.py
- scripts/collect_js_data.py
- scripts/models.py
- scripts/pipeline.py
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.