gangvy 5 месяцев назад
Родитель
Сommit
8f97835f90

+ 4 - 0
dist/download-urls.json

@@ -0,0 +1,4 @@
+{
+  "voc-core": "https://repos.fmode.cn/x/openclaw-skills/packages/voc-core.zip",
+  "social-media": "https://repos.fmode.cn/x/openclaw-skills/packages/social-media.zip"
+}

BIN
dist/openclaw-voc-skills.zip


BIN
dist/social-media.zip


BIN
dist/voc-core.zip


+ 14 - 11
scripts/deploy/deploy-to-openclaw.ps1

@@ -1,4 +1,4 @@
-# OpenClaw VOC Skills Deploy Script v2.0.0
+# OpenClaw VOC Skills Deploy Script v3.0.0
 #
 # Deploys skills, workshop playbook, and memory templates to OpenClaw
 #
@@ -105,7 +105,7 @@ function Deploy-File {
 # ============================================
 Write-Host ""
 Write-Host "  ====================================================" -ForegroundColor Cyan
-Write-Host "    OpenClaw VOC Skills Deploy  v2.0.0" -ForegroundColor Cyan
+Write-Host "    OpenClaw VOC Skills Deploy  v3.0.0" -ForegroundColor Cyan
 Write-Host "  ====================================================" -ForegroundColor Cyan
 Write-Host ""
 Write-Host "  Project:   $ProjectRoot"
@@ -220,20 +220,23 @@ if (-not $WorkshopOnly) {
 }
 
 # ============================================
-# Part 2: Deploy Workshop Playbook
+# Part 2: Deploy Workshop Playbooks (v3 split-file architecture)
 # ============================================
 if (-not $SkillsOnly) {
-    Write-Host "  [2/3] Deploying Workshop Playbook" -ForegroundColor Cyan
+    Write-Host "  [2/3] Deploying Workshop Playbooks" -ForegroundColor Cyan
     Write-Host "  $('-' * 48)"
 
-    $playbookSrc = Join-Path $ProjectRoot "workshop\workshop-voc-playbook.md"
-    if (Test-Path $playbookSrc) {
-        $playbookDest = Join-Path $WorkspaceTarget "workshop-voc-playbook.md"
-        Deploy-File $playbookSrc $playbookDest "workshop-voc-playbook.md"
-        if (-not $DryRun) { Write-Host "    [OK] workshop-voc-playbook.md" -ForegroundColor Green }
-        $totalDeployed++
+    # v3: Deploy all workshop .md files (global rules + session files + supporting docs)
+    $workshopMdFiles = Get-ChildItem -File -Path (Join-Path $ProjectRoot "workshop") -Filter "*.md" -ErrorAction SilentlyContinue
+    if ($workshopMdFiles -and $workshopMdFiles.Count -gt 0) {
+        foreach ($mdFile in $workshopMdFiles) {
+            $dest = Join-Path $WorkspaceTarget $mdFile.Name
+            Deploy-File $mdFile.FullName $dest $mdFile.Name
+            if (-not $DryRun) { Write-Host "    [OK] $($mdFile.Name)" -ForegroundColor Green }
+            $totalDeployed++
+        }
     } else {
-        Write-Host "    [SKIP] workshop-voc-playbook.md not found" -ForegroundColor DarkGray
+        Write-Host "    [SKIP] No workshop .md files found" -ForegroundColor DarkGray
     }
 
     Write-Host ""

+ 259 - 0
scripts/deploy/package-and-upload.js

@@ -0,0 +1,259 @@
+#!/usr/bin/env node
+/**
+ * OpenClaw Skills 打包 + 上传脚本
+ * 
+ * 功能:
+ *   1. 按套件分组,将 skills 打包成 zip(含 install.js + skills/ 目录)
+ *   2. 上传 zip 到七牛云 CDN
+ *   3. 输出下载链接
+ * 
+ * 使用:node scripts/deploy/package-and-upload.js
+ * 前置:先运行 deploy-to-openclaw.ps1 确保 ~/.openclaw/skills 是最新的
+ */
+
+const fs = require('fs');
+const path = require('path');
+const os = require('os');
+const { execSync } = require('child_process');
+const qiniu = require('qiniu');
+
+// ============================================
+// 七牛云配置(同 upload-skills.js)
+// ============================================
+const QINIU_ACCESS_KEY = process.env.QINIU_AK || 'EXsA-z_n4LGmWrwC088bygcGJtAditnWQe2nH-ZE';
+const QINIU_SECRET_KEY = process.env.QINIU_SK || 'HWTL92OL-Tup0-8ex8A9jnG3OaJzTxlF4OwiiDsX';
+const BUCKET = 'nova-repos';
+const CDN_DOMAIN = 'https://repos.fmode.cn';
+const CDN_PREFIX = 'x/openclaw-skills/packages';
+
+// ============================================
+// 路径
+// ============================================
+const SKILLS_DIR = path.join(os.homedir(), '.openclaw', 'skills');
+const INSTALL_JS = path.join(__dirname, '..', '..', 'dist', 'install.js');
+const DIST_DIR = path.join(__dirname, '..', '..', 'dist');
+const TEMP_BASE = path.join(os.tmpdir(), 'openclaw-pkg');
+
+// ============================================
+// 套件定义(技能名列表)
+// ============================================
+const PACKAGES = {
+    'voc-core': {
+        label: '🔍 VOC 核心套件',
+        description: 'Amazon 品类洞察 + 评论分析 + 竞品分析 + 数据合成 + 社媒VOC + 工作坊',
+        skills: [
+            // voc
+            'asin-reverse-keywords', 'asin-sales-volume', 'category-products', 'category-tree',
+            'keyword-product-ranking', 'keyword-search', 'keyword-search-trend',
+            'product-detail-query', 'product-monitor', 'product-reviews-query', 'product-search', 'similar-products',
+            // review-analysis
+            'review-batch-collection', 'review-highlight-extraction', 'review-keyword-cloud',
+            'review-pain-point-extraction', 'review-sentiment-analysis',
+            // competitor-analysis
+            'competitor-bsr-tracking', 'competitor-discovery', 'competitor-pricing-analysis', 'competitor-product-comparison',
+            // synthesis
+            'brand-profile', 'category-landscape', 'html-report-generator', 'product-deep-analysis', 'user-persona', 'voc-proposal',
+            // social-voc
+            'instagram-brand-voc', 'social-trend-analysis', 'tiktok-brand-voc', 'tiktok-category-voc',
+            // workshop
+            'brand-context-builder'
+        ]
+    },
+    'social-media': {
+        label: '📱 社媒数据套件',
+        description: 'TikTok / Instagram / 抖音数据采集',
+        skills: [
+            // social-media
+            'instagram-search', 'instagram-user-info', 'instagram-user-posts',
+            'tiktok-hashtag-detail', 'tiktok-hashtag-videos', 'tiktok-user-posts',
+            'tiktok-user-profile', 'tiktok-user-search', 'tiktok-video-comments',
+            'tiktok-video-detail', 'tiktok-video-search',
+            // douyin
+            'douyin-comment-replies', 'douyin-general-search', 'douyin-hashtag-search',
+            'douyin-user-profile', 'douyin-user-search', 'douyin-video-comments', 'douyin-video-detail'
+        ]
+    }
+};
+
+// ============================================
+// 七牛上传
+// ============================================
+function uploadFile(localFile, cdnKey) {
+    return new Promise((resolve, reject) => {
+        const mac = new qiniu.auth.digest.Mac(QINIU_ACCESS_KEY, QINIU_SECRET_KEY);
+        const putPolicy = new qiniu.rs.PutPolicy({ scope: `${BUCKET}:${cdnKey}`, expires: 3600 });
+        const token = putPolicy.uploadToken(mac);
+        const formUploader = new qiniu.form_up.FormUploader(new qiniu.conf.Config({ zone: qiniu.zone.Zone_z2 }));
+        const putExtra = new qiniu.form_up.PutExtra();
+
+        formUploader.putFile(token, cdnKey, localFile, putExtra, (err, body, info) => {
+            if (err) return reject(err);
+            if (info.statusCode === 200) {
+                resolve({ key: body.key, url: `${CDN_DOMAIN}/${body.key}` });
+            } else {
+                reject(new Error(`Upload failed: ${info.statusCode} ${JSON.stringify(body)}`));
+            }
+        });
+    });
+}
+
+// ============================================
+// 打包逻辑
+// ============================================
+function buildPackage(pkgId, pkg) {
+    const pkgDir = path.join(TEMP_BASE, pkgId);
+    const skillsDir = path.join(pkgDir, 'skills');
+
+    // 清理 + 创建目录
+    if (fs.existsSync(pkgDir)) fs.rmSync(pkgDir, { recursive: true, force: true });
+    fs.mkdirSync(skillsDir, { recursive: true });
+
+    // 复制 install.js
+    if (fs.existsSync(INSTALL_JS)) {
+        fs.copyFileSync(INSTALL_JS, path.join(pkgDir, 'install.js'));
+    }
+
+    // 生成 README.txt
+    const readme = [
+        `OpenClaw ${pkg.label}`,
+        `${'='.repeat(50)}`,
+        '',
+        pkg.description,
+        '',
+        `包含 ${pkg.skills.length} 个技能`,
+        '',
+        '安装方法:',
+        '  1. 确保已安装 OpenClaw',
+        '  2. 解压本压缩包',
+        '  3. 在解压目录运行: node install.js',
+        '  4. 重启 OpenClaw gateway',
+        '',
+        '其他命令:',
+        '  node install.js --list          # 列出所有技能',
+        '  node install.js --dry-run       # 预览模式',
+        '  node install.js --only a,b,c    # 只安装指定技能',
+        '  node install.js --skip a,b,c    # 跳过指定技能',
+        '',
+        '技能列表:',
+        ...pkg.skills.map(s => `  - ${s}`),
+        ''
+    ].join('\n');
+    fs.writeFileSync(path.join(pkgDir, 'README.txt'), readme, 'utf8');
+
+    // 复制每个技能
+    let copied = 0;
+    let missing = 0;
+    for (const skillName of pkg.skills) {
+        const srcDir = path.join(SKILLS_DIR, skillName);
+        if (!fs.existsSync(srcDir)) {
+            console.log(`    ⚠️  跳过 ${skillName}(未部署)`);
+            missing++;
+            continue;
+        }
+
+        const destDir = path.join(skillsDir, skillName);
+        fs.mkdirSync(destDir, { recursive: true });
+
+        const files = fs.readdirSync(srcDir).filter(f => fs.statSync(path.join(srcDir, f)).isFile());
+        for (const f of files) {
+            fs.copyFileSync(path.join(srcDir, f), path.join(destDir, f));
+        }
+        copied++;
+    }
+
+    console.log(`    ✅ 复制 ${copied} 个技能(跳过 ${missing} 个)`);
+
+    // 压缩
+    const zipPath = path.join(DIST_DIR, `${pkgId}.zip`);
+    if (fs.existsSync(zipPath)) fs.unlinkSync(zipPath);
+
+    // 使用 PowerShell Compress-Archive
+    const absZipPath = path.resolve(zipPath);
+    const absPkgDir = path.resolve(pkgDir);
+    execSync(
+        `powershell -Command "Compress-Archive -Path '${absPkgDir}\\*' -DestinationPath '${absZipPath}' -Force"`,
+        { stdio: 'inherit' }
+    );
+
+    const zipSize = fs.statSync(zipPath).size;
+    console.log(`    📦 ${path.basename(zipPath)} (${(zipSize / 1024).toFixed(0)} KB)`);
+
+    return zipPath;
+}
+
+// ============================================
+// Main
+// ============================================
+async function main() {
+    console.log('');
+    console.log('==================================================');
+    console.log('  OpenClaw Skills 打包 + CDN 上传');
+    console.log('==================================================');
+    console.log('');
+
+    // 前置检查
+    if (!fs.existsSync(SKILLS_DIR)) {
+        console.error(`❌ Skills 目录不存在: ${SKILLS_DIR}`);
+        console.error('   请先运行 deploy-to-openclaw.ps1');
+        process.exit(1);
+    }
+    if (!fs.existsSync(INSTALL_JS)) {
+        console.error(`❌ install.js 不存在: ${INSTALL_JS}`);
+        process.exit(1);
+    }
+
+    fs.mkdirSync(DIST_DIR, { recursive: true });
+    fs.mkdirSync(TEMP_BASE, { recursive: true });
+
+    // Step 1: 打包
+    console.log('── Step 1: 打包 ──');
+    const zipFiles = {};
+    for (const [pkgId, pkg] of Object.entries(PACKAGES)) {
+        console.log(`  ${pkg.label} (${pkg.skills.length} 个技能)`);
+        zipFiles[pkgId] = buildPackage(pkgId, pkg);
+    }
+    console.log('');
+
+    // Step 2: 上传到七牛
+    console.log('── Step 2: 上传到七牛云 CDN ──');
+    const downloadUrls = {};
+    for (const [pkgId, zipPath] of Object.entries(zipFiles)) {
+        const pkg = PACKAGES[pkgId];
+        const cdnKey = `${CDN_PREFIX}/${pkgId}.zip`;
+        process.stdout.write(`  ${pkg.label} ... `);
+        try {
+            const result = await uploadFile(zipPath, cdnKey);
+            downloadUrls[pkgId] = result.url;
+            console.log(`✅ ${result.url}`);
+        } catch (err) {
+            console.log(`❌ ${err.message}`);
+        }
+    }
+    console.log('');
+
+    // 输出结果
+    console.log('==================================================');
+    console.log('  📥 下载链接');
+    console.log('==================================================');
+    console.log('');
+    for (const [pkgId, url] of Object.entries(downloadUrls)) {
+        const pkg = PACKAGES[pkgId];
+        console.log(`  ${pkg.label}`);
+        console.log(`  👉 ${url}`);
+        console.log('');
+    }
+
+    // 保存到文件
+    const outputPath = path.join(DIST_DIR, 'download-urls.json');
+    fs.writeFileSync(outputPath, JSON.stringify(downloadUrls, null, 2), 'utf8');
+    console.log(`  💾 链接已保存到: ${outputPath}`);
+    console.log('');
+
+    // 清理临时目录
+    if (fs.existsSync(TEMP_BASE)) fs.rmSync(TEMP_BASE, { recursive: true, force: true });
+}
+
+main().catch(err => {
+    console.error('❌ 出错:', err);
+    process.exit(1);
+});

+ 21 - 1
workshop/memory-templates/workshop-progress.json

@@ -1,5 +1,20 @@
 {
-  "$schema": "workshop-progress-v1",
+  "$schema": "workshop-progress-v3",
+  "_statusEnum": ["pending", "in_progress", "awaitingCalibration", "completed"],
+  "_statusRules": {
+    "awaitingCalibration": "Agent已输出分析结果+校准提问,HARD STOP等待用户回复。系统消息不算用户回复。",
+    "transitionRule": "awaitingCalibration -> completed 只能由用户明确文字回复触发"
+  },
+  "_playbookFiles": {
+    "_comment": "Agent每次对话必须先加载 workshop-global-rules.md,再根据 currentPhase 加载对应的 session 文件。禁止一次加载多个 session 文件。",
+    "globalRules": "workspace/workshop-global-rules.md",
+    "intake": "workspace/workshop-session-0-intake.md",
+    "session-1": "workspace/workshop-session-1-category.md",
+    "session-2": "workspace/workshop-session-2-brand.md",
+    "session-3": "workspace/workshop-session-3-voc.md",
+    "session-4": "workspace/workshop-session-4-deep.md",
+    "session-5": "workspace/workshop-session-5-report.md"
+  },
   "clientId": "",
   "brandName": "",
   "startedAt": "",
@@ -16,6 +31,7 @@
       "status": "pending",
       "startedAt": null,
       "completedAt": null,
+      "calibrationPendingSince": null,
       "deliverables": [
         "品类认知校准表",
         "品类核心关键词库",
@@ -30,6 +46,7 @@
       "status": "pending",
       "startedAt": null,
       "completedAt": null,
+      "calibrationPendingSince": null,
       "deliverables": [
         "品牌六维画像",
         "单品深度诊断",
@@ -44,6 +61,7 @@
       "status": "pending",
       "startedAt": null,
       "completedAt": null,
+      "calibrationPendingSince": null,
       "deliverables": [
         "结构化评论语料库",
         "情感分析报告(情感健康分)",
@@ -57,6 +75,7 @@
       "status": "pending",
       "startedAt": null,
       "completedAt": null,
+      "calibrationPendingSince": null,
       "deliverables": [
         "痛点深度洞察(显性+隐性+权重)",
         "卖点植入方案(亮点→Listing建议)",
@@ -73,6 +92,7 @@
       "status": "pending",
       "startedAt": null,
       "completedAt": null,
+      "calibrationPendingSince": null,
       "deliverables": [
         "VOC产品优化提案(11章节)",
         "HTML可演示报告(13屏)",

+ 2 - 2
workshop/product-analysis-playbook.md

@@ -8,7 +8,7 @@ author: nkkj-BrainHack
 # 🔍 VOC产品分析模式 · 引导剧本
 
 > 本文档是 OpenClaw Agent 执行**产品分析模式**的操作手册。
-> 与工作坊模式(workshop-voc-playbook.md)不同,产品分析模式面向**线上按需、快速出报告**的场景。
+> 与工作坊模式(workshop-global-rules.md + workshop-session-*.md)不同,产品分析模式面向**线上按需、快速出报告**的场景。
 > 用户提供具体产品,选择分析维度,Agent 按产品逐个跑分析。
 >
 > **配套文档(必读):**
@@ -310,7 +310,7 @@ Agent 自动将产品按品类关键词分组:
 | **校准** | 每个Session必做 | 每个产品可选 |
 | **输出** | 完整5阶段报告 | 按选择维度输出 |
 | **记忆** | brand-context.json 为核心 | analysis-request.json 为核心 |
-| **Playbook** | workshop-voc-playbook.md | product-analysis-playbook.md(本文档)|
+| **Playbook** | workshop-global-rules.md + workshop-session-0~5.md | product-analysis-playbook.md(本文档)|
 
 ### 技能复用
 

+ 290 - 0
workshop/workshop-global-rules.md

@@ -0,0 +1,290 @@
+---
+name: workshop-voc-global-rules
+description: VOC虾工作坊全局规则(角色设定、记忆管理、SESSION GATE、进度恢复等),所有 Session 文件共用。
+version: 2.2.0
+author: nkkj-BrainHack
+---
+
+# 🦐 VOC虾工作坊 · 全局规则
+
+> 本文档定义 VOC 工作坊的全局规则,所有 Session 文件共用。
+> Agent 在执行任何 Session 之前,必须先加载本文件。
+>
+> **配套文档(必读):**
+> - `workspace/synthesis-prompts.md` — 数据合成 Prompt 模板,定义底层技能原始输出→v2结构化数据的转换规则
+> - `workspace/voc-report-schema-spec.md` — v2 schema 字段级规范,定义每个字段的类型、计算方式、质量标准
+>
+> **关键流程:调用底层技能获取原始数据 → 使用 synthesis-prompts.md 中对应Prompt转换为v2结构 → 写入 stage-N-output.json**
+>
+> **Session 文件结构:**
+> - `workshop-session-0-intake.md` — Session 0: 品牌建档
+> - `workshop-session-1-category.md` — Session 1: 品类全景分析
+> - `workshop-session-2-brand.md` — Session 2: 品牌画像+竞品分析
+> - `workshop-session-3-voc.md` — Session 3: 评论采集+VOC初体验
+> - `workshop-session-4-deep.md` — Session 4: 深度VOC+社媒+用户画像
+> - `workshop-session-5-report.md` — Session 5: 最终报告
+>
+> **Agent 每次只加载当前 Session 对应的文件 + 本全局规则文件。禁止一次加载所有 Session 文件。**
+
+---
+
+## 角色设定
+- Agent 自称"虾"或"AI情报实习生",语气专业但不刻板
+- 称呼用户为"老板"或"养虾人"
+- 每次输出分析结果后,必须主动问用户校准意见
+- 校准意见必须记录到 `memory/calibration-notes.json`
+
+## 记忆管理
+- 所有采集到的品牌信息存入 `memory/brand-context.json`
+- 每个阶段的输出存入 `memory/stage-{N}-output.json`
+- 工作坊进度存入 `memory/workshop-progress.json`
+- **每次对话开始时**,执行「记忆理解协议」(见下文)
+
+## 记忆理解协议(每次对话必做)
+
+Agent 在每次对话开始时,必须按以下顺序执行:
+
+### Step M1: 全量记忆加载
+```
+读取顺序(严格按此顺序):
+1. memory/workshop-progress.json → 判断当前阶段 + 哪些阶段已完成
+2. memory/brand-context.json → 品牌名/品类/ASIN/分析目标(workshopGoal)
+3. memory/calibration-notes.json → 用户在各阶段的校准意见
+4. 已完成阶段的 memory/stage-{N}-output.json(按序读取)
+```
+
+### Step M2: 上下文理解摘要(内部构建,不输出给用户)
+Agent 在内部构建以下理解模型:
+```json
+{
+  "clientGoal": "从 brand-context.workshopGoal 提取",
+  "currentPhase": "从 workshop-progress 判断",
+  "keyFindings": [
+    "从已完成 stage-output 中提取最关键的3-5个发现"
+  ],
+  "pendingCalibrations": [
+    "从 calibration-notes 中提取用户尚未确认或有异议的项"
+  ],
+  "goalAlignmentCheck": "当前发现是否在回答用户的 workshopGoal?有哪些gap?",
+  "crossStageAnomalies": [
+    "stage间数据矛盾(如:stage-1说品类增长,但stage-3评论趋势下降)",
+    "意外发现(如:竞品在某维度远超预期)"
+  ]
+}
+```
+
+### Step M3: 对话开场展示(向用户)
+如果不是第一次对话,Agent 必须先展示记忆回顾:
+```
+虾:欢迎回来老板!让我回顾一下之前的工作:
+
+📋 你的分析目标:「{{workshopGoal}}」
+📍 当前进度:阶段{{N}} — {{sessionName}}
+
+🧠 虾记住的关键发现:
+{{#each keyFindings}}
+• {{this}}
+{{/each}}
+
+{{#if pendingCalibrations.length > 0}}
+⚠️ 上次你提到的校准意见,我已经记住了:
+{{#each pendingCalibrations}}
+• {{this}}
+{{/each}}
+今天的分析会把这些纳入考虑。
+{{/if}}
+
+{{#if crossStageAnomalies.length > 0}}
+🔍 虾发现了一些值得注意的点:
+{{#each crossStageAnomalies}}
+• {{this}}
+{{/each}}
+{{/if}}
+
+继续阶段{{N}}吗?还是你想先看看之前的某个结果?
+```
+
+### Step M4: 目标对齐检查(每个阶段结束时)
+每个阶段的分析结果输出后,Agent 必须回扣 workshopGoal:
+```
+虾:🎯 回到你最初的问题:「{{workshopGoal}}」
+基于这个阶段的分析,虾的初步回答是:
+• {{goalAlignmentInsight}}
+
+这个方向对吗?后续阶段会继续深入这个问题。
+```
+
+### Step M5: 加载当前 Session 文件
+根据 `workshop-progress.json` 中的 `currentPhase` 字段,加载对应的 Session 文件:
+```
+currentPhase → 对应文件:
+"intake"    → workshop-session-0-intake.md
+"session-1" → workshop-session-1-category.md
+"session-2" → workshop-session-2-brand.md
+"session-3" → workshop-session-3-voc.md
+"session-4" → workshop-session-4-deep.md
+"session-5" → workshop-session-5-report.md
+```
+**只加载当前 Session 文件,不加载后续 Session 文件。这是物理隔离的核心机制。**
+
+## 校准反馈前向传递规则
+
+每个 Session 开始前,Agent 必须:
+1. **读取** `calibration-notes.json` 中所有前置 session 的校准意见
+2. **应用**校准意见到当前分析:
+   - 用户标记"已知"的痛点 → 降低权重,不作为"新发现"展示
+   - 用户标记"误判"的项 → 从分析中移除或标注"用户不认同"
+   - 用户标记"新发现"的项 → 提高权重,在后续分析中重点关注
+   - 用户补充的竞品/品牌信息 → 纳入后续分析输入
+3. **告知**用户校准意见已被采纳:
+   ```
+   虾:上次你提到 [具体校准内容],我在这次分析中已经调整了:
+   • [具体调整说明]
+   ```
+
+## 自适应提问规则
+
+校准环节的提问不使用固定模板,而是基于数据动态生成:
+
+### 异常驱动提问
+当分析数据中出现以下情况时,优先针对异常提问:
+- **数据矛盾**:如评分高但差评率也高 → 问用户"你的产品评分{{rating}}看起来不错,但差评中{{topComplaint}}被反复提到,这是已知问题吗?"
+- **偏离预期**:如品类健康度很低但用户选择进入 → 问用户"品类竞争烈度偏高(CR5={{cr5}}%),你选择这个品类的核心信心来源是什么?"
+- **竞品异常**:如某竞品突然BSR大幅波动 → 问用户"竞品{{name}}最近BSR从{{bsrOld}}飙升到{{bsrNew}},你知道发生了什么吗?"
+
+### 深度追问规则
+如果用户对校准问题的回答包含新信息,Agent 必须:
+1. 立即追问1-2个细化问题
+2. 将新信息记录到 calibration-notes
+3. 评估是否需要调整已有分析结论
+
+### 沉默检测
+如果用户对某个校准问题回答"不知道"/"不确定":
+- 不要跳过,而是提供虾的判断 + 依据
+- 让用户选择"接受虾的判断"或"标记待确认"
+
+## SESSION GATE 机制(最高优先级规则)
+
+> **这是整个 playbook 中优先级最高的规则,任何其他规则都不能覆盖它。**
+
+### 核心原则:每个 Session 之间必须等待用户明确回复
+
+Agent 在完成一个 Session 的分析输出 + 校准提问后,**必须立即停止(HARD STOP)**,等待用户的明确文字回复。
+
+### HARD STOP 规则
+
+```
+禁止行为(绝对禁止,无例外):
+- 禁止在用户未回复校准问题的情况下,自动开始下一个 Session
+- 禁止将系统消息(如 "Exec completed"、异步任务完成通知)视为用户的回复
+- 禁止在同一轮对话中连续执行两个 Session
+- 禁止跳过校准环节直接进入下一阶段
+- 禁止一次加载多个 Session 文件(物理隔离规则)
+
+允许行为:
+- 当前 Session 内的多个技能调用可以连续执行(如 Session 1 内的 category-landscape + 数据合成)
+- 当前 Session 内的结果展示 + 校准提问可以在同一轮输出
+```
+
+### Session 状态机
+
+每个 Session 有三个状态,必须严格按顺序流转:
+
+```
+pending → in_progress → awaitingCalibration → completed
+                              ↑
+                         HARD STOP 点
+                    (必须等待用户回复)
+```
+
+- **pending**: 尚未开始
+- **in_progress**: 正在执行技能调用和数据分析
+- **awaitingCalibration**: 分析完成,校准问题已向用户展示,**等待用户回复**
+- **completed**: 用户已回复校准意见,校准已记录,可以进入下一个 Session
+
+**状态转换规则:**
+- `awaitingCalibration → completed` 只能由**用户的明确文字回复**触发
+- 系统消息、异步任务完成通知、空消息等**不算**用户回复
+- 如果用户回复 "继续" / "没问题" / "OK" 等确认词,视为校准通过,记录后可进入下一 Session
+- 如果用户提供了具体校准意见,必须先记录到 calibration-notes.json,然后才能进入下一 Session
+
+### HARD STOP 输出模板
+
+每个 Session 的校准提问结束后,必须以以下格式结尾:
+
+```
+---
+🛑 **等待校准** | 阶段{{N}}分析已完成,请回复你的校准意见后我再继续。
+你可以:
+- 逐条回复校准问题
+- 说"没问题"跳过校准
+- 说"暂停"保存进度下次继续
+```
+
+### 反模式警告
+
+```
+⚠️ Agent 必须识别并忽略以下非用户消息:
+- "[时间戳] Exec completed (xxx, code 0) :: ..." — 这是系统异步任务完成通知,不是用户指令
+- "An async command you ran earlier has completed" — 这是系统提示,不是用户要求继续
+- 任何以 "System" 开头的消息 — 系统消息,非用户输入
+
+这些消息只表示"技能执行完毕",Agent 应该处理结果并展示给用户,
+但绝不能将其视为"用户同意继续下一阶段"的信号。
+```
+
+## 触发词
+- 用户说"开始工作坊" / "启动VOC分析" / "开始品类调研" → 从头开始
+- 用户说"继续" / "下一步" / "下一阶段" → 从 workshop-progress 记录的位置继续
+- 用户说"回顾" / "看进度" → 展示当前进度和已产出的交付物
+
+## 容错机制
+- 如果某个技能调用失败,记录错误并告知用户,提供跳过/重试选项
+- 社媒数据(TikTok/Instagram/抖音)标注为"增强模块",不影响核心流程
+- 单次对话可能无法完成整个阶段,支持中断后从断点恢复
+
+---
+
+## 进度恢复协议
+
+当用户说"继续"时,Agent 执行以下逻辑:
+
+```
+1. 读取 memory/workshop-progress.json
+2. 找到最后一个 status != "completed" 的 session
+3. 读取对应的 brand-context.json 和前置 stage output
+4. 加载对应的 Session 文件(只加载该 Session,不加载后续)
+5. 展示进度摘要:
+
+虾:欢迎回来老板!上次我们完成到了阶段{{N}}。
+当前进度:
+✅ 阶段一:品类全景 — 已完成
+✅ 阶段二:品牌+竞品 — 已完成
+⏳ 阶段三:评论采集+VOC初体验 — 进行中
+⬜ 阶段四:深度VOC+社媒+画像 — 待开始
+⬜ 阶段五:最终报告 — 待开始
+
+要继续阶段三吗?
+```
+
+---
+
+## 多客户支持
+
+当需要为不同客户运行工作坊时:
+- 在 memory/ 下建子目录:`memory/clients/{{brandName}}/`
+- 每个客户独立的 brand-context.json 和 stage outputs
+- workshop-progress.json 支持 `clientId` 字段区分
+
+---
+
+## 附录:技能调用汇总
+
+| 阶段 | 调用技能 | 预计耗时 |
+|------|---------|---------|
+| 建档 | brand-context-builder | 对话采集 |
+| Session 1 | category-landscape (含 product-search ×2-3, asin-sales-volume ×100, keyword-search ×5-10, keyword-search-trend ×5, category-tree ×1) | 3-5min |
+| Session 2 | brand-profile, competitor-discovery, product-deep-analysis, competitor-product-comparison, competitor-pricing-analysis | 5-8min |
+| Session 3 | review-batch-collection, review-sentiment-analysis, review-keyword-cloud | 3-5min |
+| Session 4 | review-pain-point-extraction, review-highlight-extraction, tiktok-category-voc, tiktok-brand-voc, instagram-brand-voc, douyin-general-search, social-trend-analysis, competitor-bsr-tracking, user-persona | 8-10min |
+| Session 5 | voc-proposal, html-report-generator | 3-5min |

+ 117 - 0
workshop/workshop-session-0-intake.md

@@ -0,0 +1,117 @@
+---
+name: workshop-session-0-intake
+description: VOC虾工作坊 Session 0 — 品牌建档(开营必做)
+version: 2.2.0
+session: 0
+prevSession: null
+nextSession: workshop-session-1-category.md
+---
+
+# Session 0:品牌建档(开营必做)
+
+> **前置依赖:必须先加载 `workshop-global-rules.md`**
+>
+> **对应工作坊环节**:Day1 09:00-09:30 开营破冰 → 喂虾第一餐
+> **目标**:虾认识养虾人的品牌,完成品牌档案建档
+> **关键原则**:一步步问,不要一次性要求全部信息
+
+## Step 0.1: 开场
+
+### 触发条件
+- `memory/brand-context.json` 不存在 或 completeness 不完整
+- 用户说"开始工作坊" 或 "启动VOC分析"
+
+### 对话脚本
+
+```
+虾:你好老板!我是你的AI情报实习生🦐。
+
+欢迎来到VOC虾工作坊!接下来我会帮你做完整的:
+品类全景 → 品牌画像 → 竞品分析 → 评论VOC → 社媒洞察 → 用户画像 → 行动提案
+
+在开始之前,我需要了解你的品牌基本信息。放心,我会一步步问,你只需要回答就好。
+
+👉 第1个问题:你的品牌英文名叫什么?
+```
+
+## Step 0.2: 品牌信息分步采集
+
+| 序号 | 问题 | 字段 | 必填 | 验证规则 |
+|------|------|------|------|---------|
+| 1 | 品牌英文名 | brandName | ✅ | 非空 |
+| 2 | 品类核心英文关键词(2-3个) | categoryKeywords | ✅ | 数组,至少1个 |
+| 3 | Amazon主要站点 | amazonDomain | ✅ | 默认1(美国),可选2(英国)3(德国)4(日本) |
+| 4 | 自家品牌代表性ASIN(3-5个) | brandAsins | ✅ | B0/B0开头10位 |
+| 5 | 已知竞品品牌名(可选) | knownCompetitors | ❌ | 数组,可为空 |
+| 6 | 竞品ASIN(可选) | competitorAsins | ❌ | 同上 |
+| 7 | 你最想通过这次分析解决什么问题? | workshopGoal | ✅ | 自由文本 |
+
+### 采集话术示例
+
+```
+虾:收到!品牌名是 {{brandName}}。
+
+👉 第2个问题:你的品类核心英文关键词是什么?
+比如你是做香薰的,就告诉我 "reed diffuser" 和 "aroma diffuser"。
+给我2-3个最核心的关键词就行。
+```
+
+```
+虾:好的,关键词是 {{categoryKeywords}}。
+
+👉 第3个问题:你主要做哪个Amazon站点?
+1️⃣ 美国站(默认)
+2️⃣ 英国站
+3️⃣ 德国站
+4️⃣ 日本站
+直接告诉我数字或站点名就行。
+```
+
+```
+虾:美国站,了解!
+
+👉 第4个问题:请给我你品牌下3-5个代表性的ASIN。
+就是Amazon产品页面URL里 /dp/ 后面那串字母数字,比如 B0CJ5KXXXX。
+```
+
+```
+虾:ASIN收到!
+
+👉 第5个问题(可选):你目前知道的主要竞品品牌有哪些?
+如果暂时不确定也没关系,后面虾会帮你自动发现竞品。
+```
+
+```
+虾:最后一个问题——
+
+👉 你最想通过这次分析解决什么问题?
+比如:
+- "想知道品类还有没有机会"
+- "不确定定价是否合理"
+- "想了解用户真正在意什么"
+- "准备推新品,想看看市场空间"
+```
+
+## Step 0.3: 确认 + 存储
+
+1. 调用 `brand-context-builder` 验证并存储到 `memory/brand-context.json`
+2. 初始化 `memory/workshop-progress.json`
+3. 初始化 `memory/calibration-notes.json`
+4. 展示品牌档案摘要,请用户确认
+5. 更新 `workshop-progress.json` → `currentPhase: "session-1"`
+
+```
+虾:品牌建档完成!以下是你的品牌档案,请确认:
+
+📋 品牌档案
+━━━━━━━━━━━━━━━━━━━━
+品牌名:{{brandName}}
+品类关键词:{{categoryKeywords}}
+Amazon站点:{{amazonDomain}}
+品牌ASIN:{{brandAsins}}
+已知竞品:{{knownCompetitors || "待发现"}}
+分析目标:{{workshopGoal}}
+━━━━━━━━━━━━━━━━━━━━
+
+确认无误的话,我们就开始第一阶段——品类全景分析!
+```

+ 201 - 0
workshop/workshop-session-1-category.md

@@ -0,0 +1,201 @@
+---
+name: workshop-session-1-category
+description: VOC虾工作坊 Session 1 — 教虾认品类(品类全景分析)
+version: 2.2.0
+session: 1
+prevSession: workshop-session-0-intake.md
+nextSession: workshop-session-2-brand.md
+---
+
+# Session 1:教虾认品类(品类全景分析)
+
+> **前置依赖:必须先加载 `workshop-global-rules.md`**
+
+## 前置检查
+- ✅ `brand-context.json` 已存在且 categoryKeywords 非空
+
+## 对话开场
+
+```
+虾:📊 阶段一:品类全景分析
+━━━━━━━━━━━━━━━━━━━━
+
+我现在要分析 {{categoryKeywords}} 这个品类的整体格局。
+需要跑的内容:
+• 品类Top100产品数据
+• 市场集中度(CR5/HHI)
+• 价格带分布
+• 搜索趋势
+
+预计需要3-5分钟,开始了!
+```
+
+## 技能调用序列
+
+```
+1. category-landscape(
+     keywords = brand-context.categoryKeywords,
+     domain = brand-context.amazonDomain,
+     topN = 100
+   )
+   → 输出: 原始品类数据
+
+2. [数据合成] 使用 synthesis-prompts.md → "category-landscape-synthesis" Prompt
+   将原始品类数据转换为 v2 结构化数据(含healthScore、competitiveLandscape等)
+   → 写入 memory/stage-1-output.json
+```
+
+## 结果展示模板
+
+> **展示规则:以下所有带 📊/📈/💰/📉/🏗️/⚠️/🎯 标记的区块都是必须展示的,不可省略。**
+> **如果某个字段数据缺失,展示"暂无数据"而不是跳过整个区块。**
+> **Top 5 品牌必须展示完整表格(含品牌名、份额、均价、评分、月销量、代表ASIN)。**
+
+```
+虾:品类分析跑完了!以下是核心发现:
+
+📊 {{categoryKeywords[0]}} 品类全景
+━━━━━━━━━━━━━━━━━━━━
+
+🎯 品类健康度评分:{{healthScore.overall}}/100
+┌──────────────────────────────────┐
+│ 市场吸引力 {{healthScore.marketAttractiveness}}/100
+│ 竞争烈度   {{healthScore.competitiveIntensity}}/100
+│ 增长潜力   {{healthScore.growthPotential}}/100
+│ 进入难度   {{healthScore.entryDifficulty}}/100
+└──────────────────────────────────┘
+
+📈 市场规模
+• 品类月销量:{{totalMonthlySales}} 件
+• 品类月销售额:${{totalMonthlyRevenue}}
+• 上架产品数:{{totalProducts}} 个
+• 平均评分:{{avgRating}} | 平均评论数:{{avgReviewCount}}
+• 近90天新入场者:{{newEntrantsLast90d}} 个
+
+🏢 市场集中度
+• CR5(前5品牌份额):{{cr5}}%
+• CR10:{{cr10}}%
+• HHI指数:{{hhi}}
+• 判断:{{concentrationLevel}} (高度集中/中等竞争/分散竞争)
+
+📋 Top 5 品牌详细对比:
+| # | 品牌 | 市场份额 | 均价 | 评分 | 月销量 | 代表ASIN | 定位标签 |
+|---|------|---------|------|------|--------|---------|---------|
+{{#each topBrands}}
+| {{@index+1}} | {{name}} | {{share}}% | ${{avgPrice}} | {{rating}} | {{monthlySales}} | {{topAsin}} | {{positioning}} |
+{{/each}}
+
+📊 Top 10 热销产品明细:
+| # | 品牌 | ASIN | 售价 | 评分 | 评论数 | 月销量 | BSR |
+|---|------|------|------|------|--------|--------|-----|
+{{#each top10Products}}
+| {{@index+1}} | {{brand}} | {{asin}} | ${{price}} | {{rating}} | {{reviewCount}} | {{monthlySales}} | #{{bsr}} |
+{{/each}}
+
+💰 价格带分布
+| 价格区间 | 产品数 | 占比 | 平均评分 | 月销量占比 | 竞争密度 |
+|----------|--------|------|---------|----------|---------|
+{{#each priceBands.bands}}
+| ${{min}}-${{max}} | {{productCount}} | {{sharePercent}}% | {{avgRating}} | {{salesShare}}% | {{competitionLevel}} |
+{{/each}}
+
+• 🏆 黄金价格带:${{goldenPriceBand.min}}-${{goldenPriceBand.max}} (占{{goldenPriceBand.sharePercent}}%)
+• 📍 你的品牌均价:${{brandAvgPrice}} → {{brandPricePosition}}
+• 💡 价格空白机会:
+{{#each priceGapOpportunities}}
+  • ${{range}} — {{description}}
+{{/each}}
+
+📉 趋势判断
+• 品类搜索趋势:{{trendDirection}}(同比{{yoyGrowthRate}}%)
+• 季节性特征:{{seasonality}}
+• 旺季月份:{{peakMonths}}
+• Top搜索词:{{topSearchTerms}}
+
+🏗️ 竞争格局
+• 进入壁垒:{{entryBarrier}}
+• 市场成熟度:{{marketMaturity}}
+• FBA使用率:{{fbaAdoptionRate}}%
+• 视频listing占比:{{videoAdoptionRate}}%
+• A+页面占比:{{aPlusAdoptionRate}}%
+
+⚠️ 风险预警
+{{#each riskAlerts}}
+• {{this}}
+{{/each}}
+
+🎯 优先行动建议
+{{#each priorityActions}}
+• {{this}}
+{{/each}}
+
+━━━━━━━━━━━━━━━━━━━━
+```
+
+## 校准环节(必做)
+
+```
+虾:以上是虾的分析结果。老板你是这个品类的专家,帮虾校准一下:
+
+1️⃣ 市场规模数据和你了解的大致一致吗?
+2️⃣ CR5的品牌排名对不对?有没有我漏掉的头部品牌?
+3️⃣ 价格带分布符合你的体感吗?
+4️⃣ 还有什么我分析里没提到但你觉得重要的?
+
+你可以直接说"没问题",也可以告诉我哪里需要纠偏。
+```
+
+## 校准记录
+将用户反馈记录到 `memory/calibration-notes.json`:
+```json
+{
+  "session1": {
+    "timestamp": "...",
+    "userFeedback": "用户原话",
+    "corrections": [
+      { "field": "cr5", "original": "35.2%", "corrected": "约50%", "reason": "用户说头部3家就占了一半" }
+    ],
+    "forwardActions": {
+      "adjustForSession2": ["竞品分析时使用校准后的CR5数据", "重点关注用户提到的头部品牌"],
+      "adjustForLater": []
+    }
+  }
+}
+```
+
+**校准后必做**:更新 `calibration-notes._forwardPassSummary`,汇总本次校准的关键调整。
+
+## 目标回扣(必做)
+```
+虾:🎯 回到你最初的问题:「{{workshopGoal}}」
+基于品类全景分析,虾的初步回答是:
+• {{goalAlignmentInsight}}
+{{#if goalGapRemaining}}
+不过,要更完整地回答你的问题,还需要:{{goalGapRemaining}}
+这些会在后续阶段继续深入。
+{{/if}}
+```
+
+## 阶段交付
+1. 存储输出到 `memory/stage-1-output.json`(含 `_goalAlignment` 和 `_anomalies`)
+2. 更新 `workshop-progress.json` → session1.status = "completed"
+3. 更新 `calibration-notes._forwardPassSummary`
+4. 展示交付物清单
+
+```
+虾:✅ 阶段一完成!
+
+📦 已产出交付物:
+• 《品类认知校准表》
+• 品类核心关键词库
+• 市场集中度分析
+• 价格带分布图
+• 趋势判断 + 风险预警
+
+所有数据已存入记忆,后续阶段会自动引用。
+准备好了告诉我,我们进入阶段二——品牌画像 + 竞品分析!
+```
+
+**🛑 SESSION GATE: 此处 HARD STOP。Agent 必须停止并等待用户回复校准意见。禁止自动进入 Session 2。**
+**更新 workshop-progress.json: session-1.status = "awaitingCalibration"**
+**只有当用户明确回复后,才将 status 改为 "completed" 并开始 Session 2。**

+ 382 - 0
workshop/workshop-session-2-brand.md

@@ -0,0 +1,382 @@
+---
+name: workshop-session-2-brand
+description: VOC虾工作坊 Session 2 — 教虾认品牌·找竞品(品牌画像+竞品分析)
+version: 2.2.0
+session: 2
+prevSession: workshop-session-1-category.md
+nextSession: workshop-session-3-voc.md
+---
+
+# Session 2:教虾认品牌 · 找竞品
+
+> **前置依赖:必须先加载 `workshop-global-rules.md`**
+
+## 前置检查
+- 🛑 **GATE CHECK**: 检查 `workshop-progress.json` 中 `session-1.status`。如果为 `awaitingCalibration`,**禁止开始 Session 2**,必须先等待用户回复 Session 1 的校准问题。
+- ✅ `stage-1-output.json` 存在
+- ✅ `brand-context.json` 中 brandAsins 非空
+- ✅ 读取 `calibration-notes.sessions.session-1.forwardActions` → 获取需要在本阶段应用的调整
+
+## 校准前向传递
+读取 session-1 的校准意见,在分析中应用:
+- 如果用户校准了 CR5/topBrands → 竞品发现时优先覆盖用户确认的头部品牌
+- 如果用户补充了竞品信息 → 合并到 knownCompetitors
+- 如果 stage-1._anomalies 中有 high severity 项 → 在本阶段开场时告知用户
+
+## 对话开场
+
+```
+虾:🏷️ 阶段二:品牌画像 + 竞品分析
+━━━━━━━━━━━━━━━━━━━━
+
+{{#if session1CalibrationApplied}}
+📝 上次你校准的内容我已经记住了:
+{{#each session1CalibrationApplied}}
+• {{this}}
+{{/each}}
+这次分析会把这些纳入考虑。
+
+{{/if}}
+这个阶段分三步:
+① 给你的品牌做六维体检
+② 自动发现3-5个直接竞品
+③ 竞品对比 + 定价分析
+
+我先从你的品牌开始。
+```
+
+## 技能调用序列
+
+```
+Step 2.1: brand-profile(
+  brandName = brand-context.brandName,
+  brandAsins = brand-context.brandAsins,
+  categoryKeyword = brand-context.categoryKeywords[0],
+  categoryLandscape = stage-1-output.categoryLandscape,
+  domain = brand-context.amazonDomain
+)
+→ 输出: brandProfile
+
+Step 2.2: competitor-discovery(
+  brandName = brand-context.brandName,
+  brandAsins = brand-context.brandAsins,
+  categoryKeyword = brand-context.categoryKeywords[0],
+  knownCompetitors = brand-context.knownCompetitors
+)
+→ 输出: competitorList
+→ ⚡ 展示给用户确认竞品列表,用户可增删
+
+Step 2.3: product-deep-analysis(
+  asin = brand-context.brandAsins[0],  // 主力ASIN
+  domain = brand-context.amazonDomain
+)
+→ 输出: productDiagnosis
+
+Step 2.4: competitor-product-comparison(
+  brandAsins = brand-context.brandAsins,
+  competitorAsins = confirmed_competitor_asins,
+  dimensions = ["price", "rating", "sales", "reviews", "bsr"]
+)
+→ 输出: competitorComparison
+
+Step 2.5: competitor-pricing-analysis(
+  brandAsins = brand-context.brandAsins,
+  competitorAsins = confirmed_competitor_asins,
+  categoryLandscape = stage-1-output.categoryLandscape
+)
+→ 输出: pricingAnalysis
+```
+
+## 结果展示 — Part 1: 品牌六维画像
+
+> **展示规则:品牌画像必须展示完整六维雷达 + 每个维度的详细说明 + 优劣势总结。**
+> **如果某个 ASIN 的实际品牌与建档品牌不一致,必须在此处醒目标出。**
+
+```
+虾:🏷️ 品牌六维画像分析完成!
+
+━━━━━━━━━━━━━━━━━━━━
+📊 {{brandName}} 品牌六维体检
+━━━━━━━━━━━━━━━━━━━━
+
+🎯 综合得分:{{brandProfile.overallScore}}/100 — {{overallScoreLevel}}
+┌──────────────────────────────────┐
+│ 定价竞争力  {{brandProfile.dimensions.pricing.score}}/100  {{brandProfile.dimensions.pricing.rank}}
+│ 评分健康度  {{brandProfile.dimensions.rating.score}}/100  {{brandProfile.dimensions.rating.rank}}
+│ 流量表现    {{brandProfile.dimensions.traffic.score}}/100  {{brandProfile.dimensions.traffic.rank}}
+│ 销售效率    {{brandProfile.dimensions.sales.score}}/100  {{brandProfile.dimensions.sales.rank}}
+│ 增长潜力    {{brandProfile.dimensions.growth.score}}/100  {{brandProfile.dimensions.growth.rank}}
+│ VOC口碑     {{brandProfile.dimensions.reputation.score}}/100  {{brandProfile.dimensions.reputation.rank}}
+└──────────────────────────────────┘
+
+📋 各维度详解:
+| 维度 | 得分 | 排名 | 详情 |
+|------|------|------|------|
+| 定价竞争力 | {{pricing.score}} | {{pricing.rank}} | {{pricing.detail}} |
+| 评分健康度 | {{rating.score}} | {{rating.rank}} | {{rating.detail}} |
+| 流量表现 | {{traffic.score}} | {{traffic.rank}} | {{traffic.detail}} |
+| 销售效率 | {{sales.score}} | {{sales.rank}} | {{sales.detail}} |
+| 增长潜力 | {{growth.score}} | {{growth.rank}} | {{growth.detail}} |
+| VOC口碑 | {{reputation.score}} | {{reputation.rank}} | {{reputation.detail}} |
+
+📍 品牌定位:{{brandProfile.positioning}}
+📈 市场份额估算:{{brandProfile.marketShareEstimate}}%
+
+✅ 优势:
+{{#each brandProfile.strengths}}
+• {{this}}
+{{/each}}
+
+⚠️ 劣势/风险:
+{{#each brandProfile.weaknesses}}
+• {{this}}
+{{/each}}
+
+{{#if asinBrandMismatch}}
+🚨 重要发现:ASIN品牌不一致
+以下建档ASIN的实际品牌与 {{brandName}} 不匹配:
+{{#each asinBrandMismatch}}
+• {{asin}} → 实际品牌: {{actualBrand}} | 实际品类: {{actualCategory}}
+{{/each}}
+⚠️ 这会影响品牌画像的准确性,建议更换为正确的品牌ASIN。
+{{/if}}
+```
+
+## 结果展示 — Part 2: 单品深度诊断(主力ASIN)
+
+> **展示规则:必须展示 Listing 评分 + 图片分析 + 价格健康度 + 评论健康度 + BSR走势 + 改进建议。**
+
+```
+━━━━━━━━━━━━━━━━━━━━
+🔍 主力ASIN深度诊断:{{productDiagnosis.asin}}
+━━━━━━━━━━━━━━━━━━━━
+标题:{{productDiagnosis.title}}
+
+📊 Listing 综合评分:{{productDiagnosis.listingScore}}/100
+
+📷 图片与内容:
+• 主图质量:{{productDiagnosis.imageAnalysis.mainImageScore}}/100
+• 图片总数:{{productDiagnosis.imageAnalysis.totalImages}} 张
+• 视频:{{productDiagnosis.imageAnalysis.hasVideo ? "✅ 有" : "❌ 无"}}
+• A+页面:{{productDiagnosis.imageAnalysis.hasAPlus ? "✅ 有" : "❌ 无"}}
+
+💰 价格健康度:
+• 当前售价:${{productDiagnosis.pricingHealth.currentPrice}}
+• 竞品均价:${{productDiagnosis.pricingHealth.competitorAvg}}
+• 价格定位:{{productDiagnosis.pricingHealth.pricePosition}}
+
+⭐ 评论健康度:
+• 当前评分:{{productDiagnosis.reviewHealth.rating}}
+• 总评论数:{{productDiagnosis.reviewHealth.totalReviews}}
+• 近期趋势:{{productDiagnosis.reviewHealth.recentTrend}}
+• 头号投诉:{{productDiagnosis.reviewHealth.topComplaint}}
+
+📉 BSR走势(近30天):
+{{#each productDiagnosis.bsrTrend}}
+  {{date}}: #{{bsr}} {{direction}}
+{{/each}}
+
+{{#if productDiagnosis.listingIssues.length > 0}}
+🔧 Listing 问题诊断:
+{{#each productDiagnosis.listingIssues}}
+• [{{severity}}] {{issue}} — 建议:{{fix}}
+{{/each}}
+{{/if}}
+
+🎯 优化建议:
+{{#each productDiagnosis.recommendations}}
+• {{priority}} {{suggestion}}
+{{/each}}
+```
+
+## 竞品确认环节(必做)
+
+```
+虾:我发现了以下可能的直接竞品:
+
+| # | 品牌 | 代表ASIN | 月销量 | 均价 | 评分 | 评论数 | 市场份额 | 发现方式 |
+|---|------|---------|--------|------|------|--------|---------|---------|
+{{#each competitors}}
+| {{@index+1}} | {{brand}} | {{asin}} | {{monthlySales}} | ${{avgPrice}} | {{rating}} | {{reviewCount}} | {{marketShare}}% | {{discoveryMethod}} |
+{{/each}}
+
+共发现 {{totalCandidates}} 个候选,筛选出 {{competitors.length}} 个直接竞品。
+
+老板帮忙确认一下:
+1️⃣ 这些竞品对不对?有没有不算竞品的?
+2️⃣ 有没有我没发现但你知道是直接竞品的?
+3️⃣ 你认为谁是最主要的竞争对手?
+```
+
+## 结果展示 — Part 3: 竞品对比矩阵(竞品确认后展示)
+
+> **展示规则:必须展示完整六维对比表 + 竞品档案卡 + 竞品漏洞分析 + 竞争威胁。**
+
+```
+━━━━━━━━━━━━━━━━━━━━
+📊 竞品六维对比矩阵
+━━━━━━━━━━━━━━━━━━━━
+
+| 维度 | {{brandName}} | {{comp1}} | {{comp2}} | {{comp3}} | {{comp4}} | {{comp5}} |
+|------|-------------|-----------|-----------|-----------|-----------|-----------|
+| 售价 | ${{price0}} | ${{price1}} | ${{price2}} | ${{price3}} | ${{price4}} | ${{price5}} |
+| 评分 | {{rating0}} | {{rating1}} | {{rating2}} | {{rating3}} | {{rating4}} | {{rating5}} |
+| 评论数 | {{reviews0}} | {{reviews1}} | {{reviews2}} | {{reviews3}} | {{reviews4}} | {{reviews5}} |
+| 月销量 | {{sales0}} | {{sales1}} | {{sales2}} | {{sales3}} | {{sales4}} | {{sales5}} |
+| BSR | #{{bsr0}} | #{{bsr1}} | #{{bsr2}} | #{{bsr3}} | #{{bsr4}} | #{{bsr5}} |
+| Listing质量 | {{listing0}}/100 | {{listing1}}/100 | {{listing2}}/100 | {{listing3}}/100 | {{listing4}}/100 | {{listing5}}/100 |
+
+📋 竞品档案卡(逐个展示):
+{{#each competitorProfiles}}
+┌─────────────────────────────────────
+│ 🏢 {{brand}} ({{asin}})
+│ 📍 定位:{{positioning}}
+│ 💰 售价:${{price}} | 📈 月销:{{monthlySales}} | ⭐ 评分:{{rating}}
+│ 📊 Listing质量:{{listingScore}}/100 | 视频:{{hasVideo}} | A+:{{hasAPlus}}
+│ 📦 FBA:{{fulfillment}} | 上架时间:{{listingAge}}
+│ ✅ 核心优势:{{strengths}}
+│ ⚠️ 主要弱点:{{weaknesses}}
+│ 📝 差评关键词:{{topComplaints}}
+└─────────────────────────────────────
+{{/each}}
+
+🎯 竞品漏洞分析(可利用的机会):
+{{#each vulnerabilities}}
+• 🔓 {{competitor}} — {{vulnerability}}
+  → 你的切入策略:{{exploitStrategy}}
+{{/each}}
+
+⚠️ 竞争威胁(需要防范):
+{{#each threats}}
+• 🛡️ {{competitor}} — {{threat}}
+  → 应对建议:{{counterStrategy}}
+{{/each}}
+```
+
+## 结果展示 — Part 4: 定价策略分析
+
+> **展示规则:必须展示价格对比 + 弹性分析 + 建议定价区间 + 毛利估算。**
+
+```
+━━━━━━━━━━━━━━━━━━━━
+💰 定价策略分析
+━━━━━━━━━━━━━━━━━━━━
+
+📊 价格位置对比:
+| 对象 | 价格 | 相对品类均价 |
+|------|------|-------------|
+| 你的品牌 | ${{brandAvgPrice}} | {{brandPriceVsCategoryAvg}} |
+| 品类均价 | ${{categoryAvgPrice}} | — |
+{{#each competitorPrices}}
+| {{brand}} | ${{price}} | {{vsCategory}} |
+{{/each}}
+
+📈 价格弹性判断:{{priceElasticity}}
+💡 建议定价区间:${{recommendedPriceRange.min}} - ${{recommendedPriceRange.max}}
+
+💵 毛利估算:
+• 毛利率(不含广告):{{marginEstimate.grossMarginPercent}}%
+• 毛利率(含广告后):{{marginEstimate.afterAdSpend}}%
+
+🎯 定价策略建议:{{pricingStrategy}}
+```
+
+## 校准环节(必做 — 品牌+竞品+定价全面校准)
+
+```
+虾:以上是虾对品牌和竞品的全面分析。老板帮虾校准一下:
+
+🏷️ 品牌画像:
+1️⃣ 六维评分和你的体感一致吗?哪个维度你觉得偏高或偏低?
+2️⃣ 优势和劣势总结到位吗?
+
+🔍 主力ASIN诊断:
+3️⃣ Listing问题诊断准确吗?有没有漏掉的关键问题?
+
+🏢 竞品分析:
+4️⃣ 竞品档案里的优劣势判断对吗?
+5️⃣ 竞品漏洞和竞争威胁有没有我分析错的?
+
+💰 定价:
+6️⃣ 建议定价区间合理吗?你实际的毛利率大概多少?
+
+你可以直接说"没问题",也可以告诉我哪里需要纠偏。
+```
+
+## 校准记录
+将用户反馈记录到 `memory/calibration-notes.json`:
+```json
+{
+  "session2": {
+    "timestamp": "...",
+    "brandProfile": {
+      "confirmed": true,
+      "dimensionCorrections": [],
+      "strengthWeaknessCorrections": []
+    },
+    "productDiagnosis": {
+      "confirmed": true,
+      "issueCorrections": [],
+      "missingIssues": []
+    },
+    "competitors": {
+      "confirmed": true,
+      "added": [],
+      "removed": [],
+      "vulnerabilityCorrections": []
+    },
+    "pricing": {
+      "confirmed": true,
+      "actualMargin": null,
+      "priceRangeCorrection": null
+    },
+    "forwardActions": {
+      "adjustForSession3": ["评论采集时重点关注的竞品弱点", "需要验证的品牌画像争议点"],
+      "adjustForLater": []
+    }
+  }
+}
+```
+
+**校准后必做**:更新 `calibration-notes._forwardPassSummary`,汇总本次校准的关键调整。
+
+## 目标回扣(必做)
+```
+虾:🎯 回到你最初的问题:「{{workshopGoal}}」
+品牌画像和竞品数据告诉我们:
+• {{goalAlignmentInsight}}
+
+📊 关键数据支撑:
+• 品牌综合得分 {{brandScore}}/100(品类排名 {{brandRank}})
+• 最大竞争差距在 {{biggestGapDimension}} 维度
+• 最有利的切入点:{{bestOpportunity}}
+
+{{#if goalGapRemaining}}
+还需要用户评论数据来验证以上判断,阶段三会深入这部分。
+{{/if}}
+```
+
+## 阶段交付
+1. 存储输出到 `memory/stage-2-output.json`(含 `_goalAlignment` + `_anomalies` + `_contextFromPreviousStages`)
+2. 更新 `workshop-progress.json` → session2.status = "awaitingCalibration"
+3. 更新 `calibration-notes._forwardPassSummary`
+4. 展示交付物清单
+
+```
+虾:✅ 阶段二完成!
+
+📦 已产出交付物:
+• 📊《品牌六维画像》— 综合得分 {{overallScore}}/100 + 六维雷达
+• 🔍《主力ASIN深度诊断》— Listing评分 {{listingScore}}/100 + 问题清单
+• 🏢《竞品档案卡》× {{competitorCount}} 个 — 含优劣势+差评关键词
+• 📋《竞品六维对比矩阵》— 价格/评分/销量/评论/BSR/Listing质量
+• 🔓《竞品漏洞分析》— {{vulnerabilityCount}} 个可利用的竞品弱点
+• 💰《定价策略分析》— 建议定价 ${{recMin}}-${{recMax}} + 毛利估算
+
+所有数据已存入记忆,后续阶段会自动引用。
+准备好了告诉我,阶段三——虾要下海捕评论了!
+```
+
+**🛑 SESSION GATE: 此处 HARD STOP。Agent 必须停止并等待用户回复校准意见。禁止自动进入 Session 3。**
+**更新 workshop-progress.json: session-2.status = "awaitingCalibration"**
+**只有当用户明确回复后,才将 status 改为 "completed" 并开始 Session 3。**

+ 314 - 0
workshop/workshop-session-3-voc.md

@@ -0,0 +1,314 @@
+---
+name: workshop-session-3-voc
+description: VOC虾工作坊 Session 3 — 教虾抓评论·VOC初体验(Day1晚)
+version: 2.2.0
+session: 3
+prevSession: workshop-session-2-brand.md
+nextSession: workshop-session-4-deep.md
+---
+
+# Session 3:教虾抓评论 · VOC初体验(Day1晚)
+
+> **前置依赖:必须先加载 `workshop-global-rules.md`**
+>
+> **对应工作坊环节**:Day1 19:00-21:30「教虾抓评论·VOC初体验」
+> **目标**:虾第一次"下海捕虾"——批量采集用户评论,完成初步情感分析和关键词地图
+> **关键点**:本阶段只做采集+初步感知,深度分析(痛点/功能/场景)在阶段四进行
+
+## 前置检查
+- 🛑 **GATE CHECK**: 检查 `workshop-progress.json` 中 `session-2.status`。如果为 `awaitingCalibration`,**禁止开始 Session 3**,必须先等待用户回复 Session 2 的校准问题。
+- ✅ `stage-2-output.json` 存在
+- ✅ 已确认的竞品ASIN列表
+- ✅ 读取 `calibration-notes.sessions.session-2.forwardActions` → 获取需要在本阶段应用的调整
+- ✅ 读取 `stage-2-output._anomalies` → 关注竞品异常信号
+
+## 校准前向传递
+读取 session-1 + session-2 的校准意见:
+- 用户拒绝的竞品 → 从采集列表中移除
+- 用户新增的竞品 → 加入采集列表
+- session-2 中发现的竞品弱点 → 采集评论时重点关注对应 ASIN 的差评
+
+## 自动构建ASIN列表
+从 brand-context.brandAsins + stage-2-output.competitorAsins 合并去重(共5-8个ASIN)
+**注意**:必须使用经过 session-2 校准确认后的竞品列表
+
+## 对话开场
+
+```
+虾:💬 阶段三:评论采集 + VOC初体验
+━━━━━━━━━━━━━━━━━━━━
+
+接下来虾要第一次"下海捕评论"了!
+
+这个阶段我会:
+① 📥 批量采集自家+竞品的用户评论(300-500条)
+② 📊 做初步情感分类(正面/中性/负面分布)
+③ 🔤 生成关键词情感地图
+
+待分析ASIN列表({{totalAsins}}个):
+• 自家:{{brandAsins}}
+• 竞品:{{competitorAsins}}
+
+预计需要3-5分钟。开始捕评论!
+```
+
+## 技能调用序列
+
+```
+Step 3.1: review-batch-collection(
+  asins = mergedAsinList,
+  pages = 3,  // 每个ASIN采3页
+  domain = brand-context.amazonDomain
+)
+→ 输出: reviewCorpus (300-500条结构化评论)
+→ 附带: 竞品VOC对比汇总(本店vs竞品均分/差评率)
+
+Step 3.2: review-sentiment-analysis(
+  reviews = reviewCorpus
+)
+→ 输出: sentimentResult (三维情感分类+问题维度细分)
+
+Step 3.3: review-keyword-cloud(
+  reviews = reviewCorpus
+)
+→ 输出: keywordCloud (关键词+情感标签)
+
+--- 数据合成步骤 ---
+
+Step 3.4: [数据合成] 使用 Prompt 3A "voice-classification-synthesis"
+  输入: Step3.2情感结果 + 原始评论
+  → 输出: voiceClassification (v2结构: 情感分布+维度细分)
+
+Step 3.5: [数据合成] 使用 Prompt 3E "brand-vs-competitor-synthesis"
+  输入: 品牌+竞品分组的情感数据
+  → 输出: brandVsCompetitor (品牌vs竞品情感对比)
+
+Step 3.6: 将 Step3.4~3.5 的输出 + reviewCorpus元数据 + keywordCloud 写入 memory/stage-3-output.json
+  注意: reviewCorpus 原始数据也需保存,供阶段四深度分析使用
+```
+
+## 结果展示 — Part 1: 采集概览 + 分ASIN明细
+
+> **展示规则:以下所有 Part 都是必须展示的,不可省略任何一个 Part。**
+> **每个 ASIN 必须展示独立的情感数据,不能只给汇总数据。**
+
+```
+虾:评论分析完成!采集了 {{totalReviews}} 条评论。
+
+━━━━━━━━━━━━━━━━━━━━
+📥 评论采集概览
+━━━━━━━━━━━━━━━━━━━━
+
+采集时间:{{collectionTimestamp}}
+评论时间跨度:{{dateRange.from}} ~ {{dateRange.to}}
+ASIN覆盖:{{asinsCovered.length}} 个
+
+📋 分ASIN采集明细:
+| ASIN | 品牌 | 类型 | 评论数 | 平均评分 | 好评率 | 差评率 | 1星占比 | 5星占比 |
+|------|------|------|--------|---------|--------|--------|---------|---------|
+{{#each asinDetails}}
+| {{asin}} | {{brand}} | {{type}} | {{reviewCount}} | {{avgRating}} | {{positiveRate}}% | {{negativeRate}}% | {{star1Rate}}% | {{star5Rate}}% |
+{{/each}}
+| **汇总** | — | — | **{{totalReviews}}** | **{{avgRating}}** | **{{positiveRate}}%** | **{{negativeRate}}%** | — | — |
+
+⭐ 评分分布(全部评论):
+| 星级 | 数量 | 占比 | 分布条 |
+|------|------|------|--------|
+| ⭐⭐⭐⭐⭐ | {{star5Count}} | {{star5Rate}}% | {{star5Bar}} |
+| ⭐⭐⭐⭐ | {{star4Count}} | {{star4Rate}}% | {{star4Bar}} |
+| ⭐⭐⭐ | {{star3Count}} | {{star3Rate}}% | {{star3Bar}} |
+| ⭐⭐ | {{star2Count}} | {{star2Rate}}% | {{star2Bar}} |
+| ⭐ | {{star1Count}} | {{star1Rate}}% | {{star1Bar}} |
+```
+
+## 结果展示 — Part 2: 情感分析
+
+```
+━━━━━━━━━━━━━━━━━━━━
+📊 用户声音初步分类
+━━━━━━━━━━━━━━━━━━━━
+
+🎯 情感健康分:{{overallSentimentScore}}/100
+
+┌─────────────────────────────────────────┐
+│ 正向 {{positiveRate}}% │ 中性 {{neutralRate}}% │ 负向 {{negativeRate}}% │
+│ ████████████████     │ ████         │ ████████    │
+└─────────────────────────────────────────┘
+
+✅ 正向声音 Top 5({{positiveCount}} 条)
+{{#each positive.items}}
+  • {{text}} — {{reviewCount}}次提及 | 平均评分 {{avgRating}}
+    ↳ "{{representativeQuote}}"
+    ↳ 关联关键词:{{relatedKeywords}}
+{{/each}}
+
+❌ 负向声音 Top 5({{negativeCount}} 条)
+{{#each negative.items}}
+  • {{text}} — {{reviewCount}}次投诉 | 严重度 {{severity}}
+    ↳ "{{representativeQuote}}"
+    ↳ 影响评分:{{ratingImpact}} | 退货关联:{{returnCorrelation}}
+{{/each}}
+
+💡 中性声音洞察({{neutralCount}} 条)
+{{#each neutral.suggestions}}
+  • {{text}} — "如果能...就好了" 类建议 × {{count}}
+{{/each}}
+
+📂 问题维度细分:
+| 维度 | 提及次数 | 占差评比 | 严重度 | 典型原文 |
+|------|---------|---------|--------|---------|
+{{#each categoryBreakdown}}
+| {{category}} | {{count}} | {{percentOfNegative}}% | {{severity}} | "{{quote}}" |
+{{/each}}
+```
+
+## 结果展示 — Part 3: 品牌 vs 竞品对比
+
+```
+━━━━━━━━━━━━━━━━━━━━
+🏷️ 品牌 vs 竞品 VOC 对比
+━━━━━━━━━━━━━━━━━━━━
+
+📊 情感健康分对比:
+| 对象 | 情感分 | 好评率 | 差评率 | 平均评分 | 评论数 |
+|------|--------|--------|--------|---------|--------|
+| **{{brandName}}(你)** | **{{brandSentimentScore}}** | **{{brandPositiveRate}}%** | **{{brandNegativeRate}}%** | **{{brandAvgRating}}** | **{{brandReviewCount}}** |
+{{#each competitorSentiment}}
+| {{brand}} | {{sentimentScore}} | {{positiveRate}}% | {{negativeRate}}% | {{avgRating}} | {{reviewCount}} |
+{{/each}}
+| **竞品平均** | **{{competitorAvgSentimentScore}}** | **{{competitorAvgPositiveRate}}%** | **{{competitorAvgNegativeRate}}%** | **{{competitorAvgRating}}** | — |
+
+📈 差距分析:
+• 情感分差距:{{brandSentimentScore}} vs {{competitorAvgSentimentScore}}(差 {{sentimentGap}} 分)
+• 差评率差距:{{brandNegativeRate}}% vs {{competitorAvgNegativeRate}}%
+• 要追平竞品平均评分({{competitorAvgRating}}),预计需要:
+  → 消除约 {{negReviewsToRemove}} 条差评 + 获取约 {{posReviewsNeeded}} 条5星好评
+
+🔍 竞品正面高频词(你缺少的):
+{{#each competitorPositiveKeywords}}
+  • "{{keyword}}" — 竞品提及 {{count}} 次,你的评论中 {{brandMentionCount}} 次
+{{/each}}
+
+🔴 你独有的差评痛点(竞品很少提到的):
+{{#each brandUniqueNegatives}}
+  • "{{keyword}}" — 你的差评 {{brandCount}} 次 vs 竞品平均 {{competitorAvgCount}} 次
+{{/each}}
+```
+
+## 结果展示 — Part 4: 关键词情感地图
+
+```
+━━━━━━━━━━━━━━━━━━━━
+🔤 关键词情感地图
+━━━━━━━━━━━━━━━━━━━━
+
+✅ 正面关键词 Top 10:
+{{#each keywordCloud.positive}}
+  {{@index+1}}. "{{keyword}}" — {{count}}次 | 情感强度 {{intensity}}/5
+{{/each}}
+
+❌ 负面关键词 Top 10:
+{{#each keywordCloud.negative}}
+  {{@index+1}}. "{{keyword}}" — {{count}}次 | 情感强度 {{intensity}}/5
+{{/each}}
+
+📈 趋势关键词(近期上升):
+{{#each keywordCloud.trending}}
+  • "{{keyword}}" — 近30天 +{{growthRate}}% | 情感 {{sentiment}}
+{{/each}}
+```
+
+## 校准环节(养虾人教虾读评论)
+
+> **对应工作坊环节**:Day1 20:45-21:15「养虾人教虾读评论」
+> 教练引导:挑出3条最有价值的差评,和养虾人一起分析
+
+```
+虾:以上是评论的全面分析!老板你是品类专家,帮虾校准一下:
+
+📊 情感分布:
+1️⃣ 正面/负面的比例和你平时看到的评论体感一致吗?
+2️⃣ 情感健康分 {{overallSentimentScore}}/100 合理吗?
+
+❌ 差评聚焦:
+3️⃣ 我挑了3条最典型的差评,你来看看:
+   • "{{topNegReview1}}"
+   • "{{topNegReview2}}"
+   • "{{topNegReview3}}"
+
+   这些问题你已经知道了吗?还是有新发现?
+   请标记:✅已知 / ⚡新发现 / ❌误判
+
+📂 问题维度:
+4️⃣ 差评的维度细分(质量/功能/包装/服务等)排序合理吗?有没有遗漏的维度?
+
+🏷️ 品牌 vs 竞品:
+5️⃣ 你和竞品的差评率对比符合体感吗?
+6️⃣ "你独有的差评痛点"列表里有没有误判的?
+
+🔤 关键词:
+7️⃣ 关键词情感地图里,正面/负面关键词排序合理吗?
+8️⃣ 有没有你觉得重要但虾没发现的关键词?
+
+明天上午我会基于这些评论做深度分析——痛点挖掘、功能评估、场景识别。
+今晚的校准直接影响明天分析的方向!
+```
+
+## 校准记录
+将用户反馈记录到 `memory/calibration-notes.json`:
+```json
+{
+  "session3": {
+    "timestamp": "...",
+    "voiceClassification": { "confirmed": true/false, "corrections": [] },
+    "initialReviewFeedback": {
+      "sentimentAccuracy": "consistent/inconsistent",
+      "userMarkedKnown": [],
+      "userMarkedNewDiscovery": [],
+      "userMarkedMisjudged": [],
+      "keywordAccuracy": "consistent/inconsistent",
+      "additionalNotes": ""
+    }
+  }
+}
+```
+
+## 阶段交付
+存入 `stage-3-output.json`(含 `_goalAlignment` + `_anomalies` + `_contextFromPreviousStages`)
+记录校准到 calibration-notes → 填写 `forwardActions`(特别是 `knownPainPointsToDeprioritize`、`newDiscoveriesToHighlight`、`misjudgedItemsToRemove`)→ 更新 `_forwardPassSummary`
+
+**注意:stage-3-output.json 保存以下数据供阶段四使用:**
+- `reviewCorpus` — 原始评论数据(阶段四深度分析的输入)
+- `voiceClassification` — 情感分布+维度细分
+- `keywordCloud` — 关键词情感地图
+- `brandVsCompetitor` — 品牌vs竞品情感对比
+- `_goalAlignment` — 目标对齐(阶段四继续深入的方向)
+- `_anomalies` — 异常发现(阶段四验证或追踪)
+
+## 目标回扣(必做)
+```
+虾:🎯 回到你最初的问题:「{{workshopGoal}}」
+从用户评论中,虾发现了:
+• {{goalAlignmentInsight}}
+明天上午的深度分析会进一步挖掘这些发现。
+```
+
+```
+虾:✅ 阶段三完成!
+
+📦 已产出交付物:
+• 📥《结构化评论语料库》— {{totalReviews}}条评论,覆盖{{asinCount}}个ASIN,已清洗去重
+• 📋《分ASIN采集明细》— 每个ASIN的评论数/评分/好评率/差评率独立统计
+• ⭐《评分分布分析》— 1-5星详细分布 + 品牌vs竞品对比
+• 📊《情感分析报告》— 情感健康分 {{overallSentimentScore}}/100 + 正面/中性/负面Top5 + 维度细分
+• 🏷️《品牌vs竞品VOC对比》— 逐竞品情感对比 + 差距分析 + 独有痛点识别
+• 🔤《关键词情感地图》— 正面/负面/趋势关键词Top10 + 情感强度
+• 📂《问题维度细分表》— 差评按维度分类 + 严重度 + 典型原文
+
+所有评论数据已存入记忆。明天上午我会基于这些数据做深度痛点分析。
+准备好了告诉我,阶段四——深度VOC分析 + 社媒洞察 + 用户画像!
+```
+
+**🛑 SESSION GATE: 此处 HARD STOP。Agent 必须停止并等待用户回复校准意见。禁止自动进入 Session 4。**
+**更新 workshop-progress.json: session-3.status = "awaitingCalibration"**
+**只有当用户明确回复后,才将 status 改为 "completed" 并开始 Session 4。**

+ 510 - 0
workshop/workshop-session-4-deep.md

@@ -0,0 +1,510 @@
+---
+name: workshop-session-4-deep
+description: VOC虾工作坊 Session 4 — 深度VOC + 社媒洞察 + 用户画像(Day2上午)
+version: 2.2.0
+session: 4
+prevSession: workshop-session-3-voc.md
+nextSession: workshop-session-5-report.md
+---
+
+# Session 4:深度VOC + 社媒洞察 + 用户画像(Day2上午)
+
+> **前置依赖:必须先加载 `workshop-global-rules.md`**
+>
+> **对应工作坊环节**:Day2 09:00-12:00「教虾看社媒·画用户」
+> **目标**:基于昨晚采集的评论做深度分析(痛点/亮点/功能/场景),同时扫描社媒渠道,生成用户画像
+> **关键点**:这是经过一晚消化后的深度工作,养虾人带着昨晚的校准意见来审阅深度结果
+
+## 前置检查
+- 🛑 **GATE CHECK**: 检查 `workshop-progress.json` 中 `session-3.status`。如果为 `awaitingCalibration`,**禁止开始 Session 4**,必须先等待用户回复 Session 3 的校准问题。
+- ✅ `stage-3-output.json` 存在(含reviewCorpus原始数据)
+- ✅ `calibration-notes.json` 中 session3 校准意见已记录
+- ✅ 读取 `calibration-notes.sessions.session-3.forwardActions` → **这是最关键的前向传递**
+- ✅ 读取 `stage-3-output._anomalies` → 需要在深度分析中验证的异常
+
+## 校准前向传递(Session 3→4 核心机制)
+读取 session-3 校准中的三个标记列表,直接影响本阶段分析:
+
+| session-3 标记 | session-4 调整 |
+|---------------|---------------|
+| `knownPainPointsToDeprioritize` | 痛点分析时降低这些项的权重,不作为"新发现"展示 |
+| `newDiscoveriesToHighlight` | 痛点/亮点分析时提高这些项的权重,重点深挖 |
+| `misjudgedItemsToRemove` | 从分析中移除或标注"用户不认同" |
+
+同时检查 stage-1 + stage-2 的 `_anomalies`,在深度分析中验证:
+- stage-1 的品类异常 → 评论中是否有佐证?
+- stage-2 的竞品弱点 → 竞品评论中是否验证了这些弱点?
+
+## 模块说明
+本阶段包含三个模块,按顺序执行:
+- 🔴 **深度VOC分析**(必做):痛点挖掘 + 亮点提取 + 功能满足度 + 场景识别
+- 🔵 **社媒扫描**(增强,失败不阻塞):TikTok + Instagram + 抖音 + BSR追踪
+- 🟢 **用户画像**(必做):综合电商评论 + 社媒数据生成3-5个画像
+
+## 对话开场
+
+```
+虾:📊 阶段四:深度VOC分析 + 社媒洞察 + 用户画像
+━━━━━━━━━━━━━━━━━━━━
+
+{{#if session3CalibrationApplied}}
+📝 昨晚你的校准意见我已经消化了:
+{{#each session3CalibrationApplied}}
+• {{this}}
+{{/each}}
+今天的深度分析会基于你的反馈做调整。
+
+{{/if}}
+昨晚我们采集了 {{totalReviews}} 条评论,今天我要深挖这些数据:
+
+Part 1 - 深度VOC分析:
+  ⚡ 痛点深度挖掘(显性+隐性+权重排行)
+  ✨ 亮点提取 + Listing卖点建议
+  📈 功能满足度四象限看板
+  🎯 使用场景识别(高频/失败/新兴)
+
+Part 2 - 社媒扫描:
+  📱 TikTok/Instagram/抖音 品类声音
+
+Part 3 - 用户画像:
+  👤 综合以上所有数据生成3-5个核心用户画像
+
+预计需要8-10分钟,这是整个工作坊最深入的分析。开始!
+```
+
+## 技能调用序列
+
+```
+=== Part 1: 深度VOC分析(基于stage-3评论数据)===
+
+Step 4.1: review-pain-point-extraction(
+  reviews = stage-3-output.reviewCorpus,
+  brandName = brand-context.brandName,
+  competitorAsins = stage-2-output.competitorAsins
+)
+→ 输出: painPointRaw (显性+隐性痛点)
+
+Step 4.2: review-highlight-extraction(
+  reviews = stage-3-output.reviewCorpus,
+  brandName = brand-context.brandName
+)
+→ 输出: highlightRaw (亮点+卖点建议)
+
+Step 4.3: [数据合成] 使用 Prompt 3B "pain-point-insight-synthesis"
+  输入: Step4.1痛点结果 + 负面评论细节 + calibration-notes.session3校准
+  → 输出: painPointInsight (v2结构: 显性+隐性+权重+关联)
+
+Step 4.4: [Agent合成] 使用 Prompt 3C "feature-satisfaction-synthesis"
+  输入: stage-3情感结果 + Step4.1痛点 + Step4.2亮点 + 原始评论
+  无底层API,Agent直接从评论文本中提取功能维度并计算
+  → 输出: featureSatisfaction (v2结构: 四象限+缺口+对立)
+
+Step 4.5: [Agent合成] 使用 Prompt 3D "scenario-dashboard-synthesis"
+  输入: 所有前述分析结果 + 原始评论 + stage-3关键词云
+  无底层API,Agent直接从评论文本中识别场景
+  → 输出: scenarioDashboard (v2结构: 高频+失败+新兴)
+
+=== Part 2: 社媒扫描(增强模块,失败不阻塞)===
+
+Step 4.6: tiktok-category-voc(keyword = categoryKeywords[0])
+Step 4.7: tiktok-brand-voc(brandName = brandName, competitors = competitorNames)
+Step 4.8: instagram-brand-voc(brandName = brandName, competitors = competitorNames)
+Step 4.9 (实验性): douyin-general-search(keyword = douyinKeywords[0])
+
+Step 4.10: social-trend-analysis(
+  tiktokData = step4.6~4.7 output || null,
+  instagramData = step4.8 output || null,
+  douyinData = step4.9 output || null,
+  reviewData = stage-3-output
+)
+
+Step 4.11: competitor-bsr-tracking(
+  competitorAsins = stage-2-output.competitorAsins,
+  domain = brand-context.amazonDomain
+)
+
+=== Part 3: 用户画像 ===
+
+Step 4.12: user-persona(
+  reviewKeywordCloud = stage-3-output.keywordCloud,
+  reviewPainPoints = step4.3.painPointInsight,
+  reviewHighlights = step4.2.highlightRaw,
+  featureSatisfaction = step4.4.featureSatisfaction,
+  socialTrendAnalysis = step4.10 output || null,
+  categoryKeyword = brand-context.categoryKeywords[0]
+)
+→ 输出: 3-5个用户画像
+
+Step 4.13: 将以上所有输出写入 memory/stage-4-output.json
+```
+
+## 社媒失败处理
+
+```
+虾:⚠️ 社媒数据采集部分接口暂时不可用,但不影响核心分析。
+我会基于Amazon评论数据 + 已有分析结果来生成用户画像。
+社媒洞察部分后续接口恢复后可以补充。
+```
+
+## 结果展示 — Part 1: 痛点深度洞察
+
+> **展示规则:以下所有 Part 都是必须展示的,不可省略。痛点必须含权重排行表和竞品对比。**
+
+```
+━━━━━━━━━━━━━━━━━━━━
+⚡ 痛点深度洞察
+━━━━━━━━━━━━━━━━━━━━
+
+📊 概览
+• 识别痛点:{{totalPainPoints}} 个
+• 🔴 严重/危机级:{{criticalCount}} 个
+• 🟠 高优先级:{{highCount}} 个
+• 💎 竞品未解决(差异化机会):{{topUnsolvedByCompetitors}} 个
+• 平均权重分:{{avgWeightScore}}/100
+
+📋 痛点权重排行榜(全部痛点 Top 10)
+| # | 痛点 | 类型 | 严重度 | 权重分 | 频次 | 影响用户 | 竞品解决? | 差异化? |
+|---|------|------|--------|--------|------|---------|----------|---------|
+{{#each weightAnalysis}}
+| {{@index+1}} | {{name}} | {{type}} | {{severity}} | {{weight}}/100 | {{frequency}} | {{affectedUserRate}}% | {{competitorSolved}} | {{differentiationOpportunity}} |
+{{/each}}
+
+🗣️ 显性痛点详解(用户直接投诉)Top 5
+{{#each explicit}}
+┌ {{@index+1}}. {{name}} [🔴{{severity}}] 权重 {{weight}}/100
+│ 📊 频次:{{frequency}}次 | 影响用户:{{affectedUserRate}}%
+│ 💬 代表性原文:
+│   "{{representativeQuote1}}"
+│   "{{representativeQuote2}}"
+│ 🏢 竞品状态:
+{{#each competitorComparison}}
+│   • {{competitor}}: {{status}} — {{detail}}
+{{/each}}
+│ 🔧 改进建议:{{suggestedFix}}
+│ 💰 修复优先级:{{fixPriority}} | 预计影响:{{estimatedImpact}}
+│ 🔗 关联场景:{{relatedScenarios}}
+└ 🏷️ 关键词:{{keywords}}
+{{/each}}
+
+🔍 隐性痛点详解(行为信号推断)Top 3
+{{#each implicit}}
+┌ {{@index+1}}. {{name}} [🟠{{severity}}]
+│ 📊 推断依据:{{inferenceMethod}}
+│ 💬 信号原文:
+│   "{{representativeReview1}}"
+│   "{{representativeReview2}}"
+│ 影响用户:{{affectedUserRate}}%
+│ 🔧 建议:{{suggestedFix}}
+│ 💰 如果解决,预计提升评分 +{{ratingImpactEstimate}}
+└
+{{/each}}
+
+🔗 痛点关联图谱
+| 痛点A | 痛点B | 关联强度 | 说明 |
+|-------|-------|---------|------|
+{{#each correlations}}
+| {{painPointA}} | {{painPointB}} | {{strength}} | {{explanation}} |
+{{/each}}
+```
+
+## 结果展示 — Part 1b: 亮点提取 + Listing卖点建议
+
+```
+━━━━━━━━━━━━━━━━━━━━
+✨ 亮点洞察 + Listing卖点植入方案
+━━━━━━━━━━━━━━━━━━━━
+
+📊 概览
+• 识别亮点:{{totalHighlights}} 个
+• Top 关键词:{{topHighlightKeywords}}
+
+✨ 亮点排行 Top 5 + 卖点植入建议
+{{#each highlights}}
+┌ {{@index+1}}. {{highlightText}} — {{reviewCount}}次提及 | 情感强度 {{sentimentIntensity}}/5
+│ 💬 代表性好评:"{{representativeQuote}}"
+│ 📝 Listing植入建议:
+│   • 标题建议:{{titleSuggestion}}
+│   • Bullet建议:{{bulletSuggestion}}
+│   • A+建议:{{aPlusSuggestion}}
+│ 🏢 竞品对比:{{competitorMention}}
+└
+{{/each}}
+
+📋 亮点 vs 痛点矩阵:
+| 维度 | 亮点提及 | 痛点提及 | 净情感 | 建议 |
+|------|---------|---------|--------|------|
+{{#each dimensionBalance}}
+| {{dimension}} | {{positiveCount}} | {{negativeCount}} | {{netSentiment}} | {{recommendation}} |
+{{/each}}
+```
+
+## 结果展示 — Part 2a: 功能满足度 + 场景
+
+```
+━━━━━━━━━━━━━━━━━━━━
+📈 功能满足度看板
+━━━━━━━━━━━━━━━━━━━━
+
+🎯 四象限矩阵
+┌─────────────────┬─────────────────┐
+│  💎 锦上添花     │  ⭐ 核心优势     │
+│  {{niceToHave}}  │  {{coreAdvantage}}│
+│─────────────────┼─────────────────│
+│  ⬇ 低优先级     │  ⚠ 关键缺口     │
+│  {{lowPriority}} │  {{criticalGap}} │
+└─────────────────┴─────────────────┘
+
+📋 核心功能表现
+| 功能 | 满足率 | 重要度 | 趋势 | 缺口 |
+|------|--------|--------|------|------|
+{{#each corePerformance}}
+| {{feature}} | {{satisfactionRate}}% | {{importanceScore}} | {{trend}} | {{gap}}pt |
+{{/each}}
+
+━━━━━━━━━━━━━━━━━━━━
+🎯 使用场景看板
+━━━━━━━━━━━━━━━━━━━━
+
+ 高频使用场景
+{{#each highFrequency}}
+🏆 {{name}} — 用户占比 {{userRate}}%
+   满足度:{{satisfactionRate}}% | 关联痛点:{{painPoints}}
+{{/each}}
+
+🚨 失败场景(产品翻车场景)
+{{#each failure}}
+⚠️ {{name}} — 退货相关性 {{returnCorrelation}}%
+   典型描述:"{{representativeQuote}}"
+   修复建议:{{fixSuggestion}}
+{{/each}}
+
+🌱 新兴场景(潜在机会)
+{{#each emerging}}
+💡 {{name}} — 增长趋势 {{growthRate}}% | 用户数 {{userCount}}
+   机会分析:{{opportunityAnalysis}}
+{{/each}}
+
+📊 场景 × 功能缺口矩阵:
+| 场景 | 缺失功能 | 用户影响 | 修复复杂度 | 优先级 |
+|------|---------|---------|-----------|--------|
+{{#each scenarioFeatureGaps}}
+| {{scenario}} | {{missingFeature}} | {{userImpact}} | {{fixComplexity}} | {{priority}} |
+{{/each}}
+```
+
+## 结果展示 — Part 2b: 社媒洞察(如可用)
+
+> **展示规则:如果社媒数据采集成功,必须展示以下内容。如果接口失败,展示失败提示并跳过。**
+
+```
+━━━━━━━━━━━━━━━━━━━━
+📱 社媒洞察
+━━━━━━━━━━━━━━━━━━━━
+
+📊 跨平台热度对比:
+| 平台 | 数据状态 | 品类热度 | 品牌提及 | 情感倾向 | 关键话题 |
+|------|---------|---------|---------|---------|---------|
+| TikTok | {{tiktokStatus}} | {{tiktokCategoryHeat}} | {{tiktokBrandMentions}} | {{tiktokSentiment}} | {{tiktokTopics}} |
+| Instagram | {{igStatus}} | {{igCategoryHeat}} | {{igBrandMentions}} | {{igSentiment}} | {{igTopics}} |
+| 抖音 | {{douyinStatus}} | {{douyinCategoryHeat}} | {{douyinBrandMentions}} | {{douyinSentiment}} | {{douyinTopics}} |
+
+📈 社媒趋势关键词:
+{{#each contentThemes}}
+• "{{theme}}" — 热度 {{heat}} | 增长 {{growth}} | 品牌相关度 {{brandRelevance}}
+{{/each}}
+
+🔍 Amazon评论 vs 社媒情感差异:
+{{#each amazonVsSocialSentimentGap}}
+• {{dimension}}: Amazon {{amazonSentiment}} vs 社媒 {{socialSentiment}} — {{gap}}
+{{/each}}
+
+💡 社媒发现的未被满足需求:
+{{#each unmetNeedsFromSocial}}
+• {{need}} — 来源: {{source}} | 品牌机会: {{opportunity}}
+{{/each}}
+
+📢 内容营销角度建议:
+{{#each contentMarketingAngles}}
+• {{angle}} — 适用平台: {{platforms}} | 预期效果: {{expectedImpact}}
+{{/each}}
+
+📊 竞品BSR追踪:
+| 竞品 | 当前BSR | 30天变化 | 趋势 | 月销量估算 | 风险/机会 |
+|------|---------|---------|------|----------|----------|
+{{#each competitorBsr}}
+| {{brand}} | #{{currentBsr}} | {{change30d}} | {{trend}} | {{estMonthlySales}} | {{riskOpportunity}} |
+{{/each}}
+```
+
+## 结果展示 — Part 3: 用户画像
+
+> **展示规则:每个画像必须包含完整档案卡,包括人口统计、购买行为、决策因素、营销建议。最少展示3个画像。**
+
+```
+━━━━━━━━━━━━━━━━━━━━
+👤 核心用户画像
+━━━━━━━━━━━━━━━━━━━━
+
+📊 画像概览:
+• 共识别 {{personaCount}} 个核心画像
+• 主要画像(占比最高):「{{primaryPersona}}」
+• 画像覆盖率:{{coverageRate}}%(能解释多少评论行为)
+
+{{#each personas}}
+┌─────────────────────────────────────────
+│ 👤 画像{{@index+1}}: 「{{label}}」 — 占比约 {{estimatedShare}}%
+│━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
+│
+│ 📋 人口统计:
+│   • 典型年龄:{{ageRange}} | 性别倾向:{{gender}}
+│   • 收入水平:{{incomeLevel}} | 地域分布:{{geography}}
+│   • 购物经验:{{shoppingExperience}}
+│
+│ 🎯 核心需求 & 动机:
+│   {{#each needs}}
+│   • {{this}}
+│   {{/each}}
+│
+│ 💡 决策因素(按优先级):
+│   {{#each decisionFactors}}
+│   {{@index+1}}. {{this}}
+│   {{/each}}
+│
+│ 🏠 使用场景:
+│   {{#each scenarios}}
+│   • {{this}}
+│   {{/each}}
+│
+│ ⚡ 主要痛点:
+│   {{#each painPoints}}
+│   • {{this}}
+│   {{/each}}
+│
+│ ✨ 最看重的卖点:
+│   {{#each valuedFeatures}}
+│   • {{this}}
+│   {{/each}}
+│
+│ 🛒 购买行为:
+│   • 价格敏感度:{{priceSensitivity}}
+│   • 评论依赖度:{{reviewDependency}}
+│   • 品牌忠诚度:{{brandLoyalty}}
+│   • 复购率估算:{{repurchaseRate}}
+│
+│ 📢 营销建议:
+│   • 触达渠道:{{reachChannels}}
+│   • 关键信息:{{keyMessage}}
+│   • 内容角度:{{contentAngle}}
+│
+│ 💬 代表性评论:
+│   "{{representativeReview}}"
+└─────────────────────────────────────────
+{{/each}}
+
+🔗 画像重叠分析:
+{{#each personaOverlap}}
+• {{persona1}} ↔ {{persona2}}: 重叠度 {{overlapRate}}% — {{implication}}
+{{/each}}
+
+💰 画像价值排序:
+| 画像 | 占比 | 客单价 | 复购率 | 生命周期价值 | 优先级 |
+|------|------|--------|--------|------------|--------|
+{{#each marketSizeByPersona}}
+| {{label}} | {{share}}% | ${{avgOrderValue}} | {{repurchaseRate}}% | ${{ltv}} | {{priority}} |
+{{/each}}
+```
+
+## 校准环节(必做 — 深度分析校准)
+
+> **对应工作坊环节**:Day2 11:10-11:50 各维度校准
+
+```
+虾:以上是深度分析的全部结果!老板帮虾逐一校准:
+
+⚡ 痛点洞察:
+1️⃣ 哪些痛点你已经知道了?(标记"已知")
+2️⃣ 有没有让你意外的新发现?(标记"新发现")
+3️⃣ 有没有虾判断错误的?(标记"误判")
+
+📈 功能满足度:
+4️⃣ 四象限的功能分类合理吗?有功能放错象限了吗?
+
+🎯 使用场景:
+5️⃣ 高频场景排名对不对?有虾没发现的重要场景吗?
+6️⃣ 失败场景的严重程度判断准确吗?
+
+👤 用户画像:
+7️⃣ 这些画像和你的真实客户像吗?哪些是核心客群?
+
+这个校准非常重要——直接决定最终报告的行动建议质量!
+```
+
+## 校准记录
+将用户反馈记录到 `memory/calibration-notes.json`:
+```json
+{
+  "session4": {
+    "timestamp": "...",
+    "painPoints": {
+      "userMarkedKnown": [],
+      "userMarkedNewDiscovery": [],
+      "userMarkedMisjudged": [],
+      "corrections": []
+    },
+    "featureSatisfaction": { "quadrantCorrections": [], "missingFeatures": [] },
+    "scenarioDashboard": { "missingScenarios": [], "severityCorrections": [] },
+    "userPersona": { "confirmedPersonas": [], "corrections": [], "missingSegments": [] }
+  }
+}
+```
+
+## 阶段交付
+存入 `stage-4-output.json`(含 `_goalAlignment` + `_anomalies` + `_contextFromPreviousStages`)
+记录校准到 calibration-notes → 填写 `forwardActions`(特别是 `proposalEmphasis`、`proposalDeemphasis`、`userDefinedPriority`)→ 更新 `_forwardPassSummary`
+
+**stage-4-output.json 包含:**
+- `painPointInsight` — 痛点深度洞察(显性+隐性+权重+关联)
+- `highlightInsight` — 亮点提取 + Listing卖点建议
+- `featureSatisfaction` — 功能满足度四象限
+- `scenarioDashboard` — 使用场景看板
+- `socialTrend` — 社媒趋势(如可用)
+- `competitorBsr` — 竞品BSR追踪
+- `userPersona` — 3-5个用户画像
+- `_goalAlignment` — 目标对齐(最终报告方向)
+- `_anomalies` — 全流程异常汇总
+
+## 目标回扣(必做)
+```
+虾:🎯 回到你最初的问题:「{{workshopGoal}}」
+经过4个阶段的全面分析,虾现在可以给出比较完整的回答了:
+• {{goalAlignmentInsight}}
+{{#if crossStageAnomalies}}
+
+🔍 虾还发现了一些意外的点:
+{{#each crossStageAnomalies}}
+• {{this}}
+{{/each}}
+{{/if}}
+
+最终报告会把这些都整合成可落地的行动计划。
+```
+
+```
+虾:✅ 阶段四完成!这是整个工作坊信息量最大的一个阶段。
+
+📦 已产出交付物:
+• ⚡《痛点深度洞察》— {{criticalCount}}个严重痛点 + 权重排行
+• ✨《卖点植入方案》— 亮点→标题/bullet/A+建议
+• 📈《功能满足度看板》— 四象限矩阵 + {{gapCount}}个功能缺口
+• 🎯《使用场景看板》— {{scenarioCount}}个场景 + 失败场景预警
+• 📱《社媒趋势报告》— 跨平台热度 + 行动清单
+• 📊《竞品BSR追踪》— 增长路径 + 风险预警
+• 👤《用户画像手册》— {{personaCount}}个画像 + 购买行为
+
+所有数据已存入记忆。这些分析会直接驱动最终报告的行动建议。
+准备好了告诉我,最终阶段——虾要交作业了!
+```
+
+**🛑 SESSION GATE: 此处 HARD STOP。Agent 必须停止并等待用户回复校准意见。禁止自动进入 Session 5。**
+**更新 workshop-progress.json: session-4.status = "awaitingCalibration"**
+**只有当用户明确回复后,才将 status 改为 "completed" 并开始 Session 5。**

+ 250 - 0
workshop/workshop-session-5-report.md

@@ -0,0 +1,250 @@
+---
+name: workshop-session-5-report
+description: VOC虾工作坊 Session 5 — 虾交作业(最终报告)
+version: 2.2.0
+session: 5
+prevSession: workshop-session-4-deep.md
+nextSession: null
+---
+
+# Session 5:虾交作业(最终报告)
+
+> **前置依赖:必须先加载 `workshop-global-rules.md`**
+
+## 前置检查
+- 🛑 **GATE CHECK**: 检查 `workshop-progress.json` 中 `session-4.status`。如果为 `awaitingCalibration`,**禁止开始 Session 5**,必须先等待用户回复 Session 4 的校准问题。
+- ✅ `stage-1~4-output.json` 全部存在
+- ✅ `calibration-notes.json` 全部 session 校准已记录
+- ✅ 读取 `calibration-notes._forwardPassSummary` → 全量校准摘要
+- ✅ 读取所有 stage 的 `_goalAlignment` 和 `_anomalies` → 目标进度 + 异常汇总
+- 如果缺少某个阶段,提示用户先补完
+
+## 校准前向传递(全量汇总)
+这是最终报告,必须整合所有前置校准:
+
+1. **读取 `_forwardPassSummary`** — 获取用户的全部校准意见摘要
+2. **读取 session-4.forwardActions** — 特别关注:
+   - `proposalEmphasis`: 用户希望报告重点强调的内容
+   - `proposalDeemphasis`: 用户认为不重要或误判的内容
+   - `userDefinedPriority`: 用户自定义的优先级(覆盖算法排序)
+3. **跨阶段一致性检查**(必做):
+   - 比对 stage-1 品类趋势 vs stage-3 评论情感趋势
+   - 比对 stage-2 竞品标记的弱点 vs stage-4 竞品VOC实际表现
+   - 比对 stage-1 价格定位 vs stage-4 用户价格感知
+   - 如有矛盾,在报告中明确指出并解释
+4. **合并所有 `_anomalies`** — 将跨阶段的异常发现整合为报告中的"意外发现"章节
+
+## 对话开场
+
+```
+虾:📝 最终阶段:成果整合 + 报告生成
+━━━━━━━━━━━━━━━━━━━━
+
+到了交作业的时候了!我要做两件事:
+① 生成《VOC产品优化提案》(11章节)
+② 生成13屏可演示HTML报告
+
+{{#if forwardPassSummary.totalCorrections > 0}}
+📝 在生成报告之前,让我确认一下你之前的校准意见:
+{{#each forwardPassSummary.keyAdjustments}}
+• {{this}}
+{{/each}}
+{{#if forwardPassSummary.pendingUncertainties.length > 0}}
+⚠️ 还有这些待确认的项,你现在想确认一下吗?
+{{#each forwardPassSummary.pendingUncertainties}}
+• {{this}}
+{{/each}}
+{{/if}}
+{{/if}}
+
+我会把前面4个阶段的所有数据 + 你的校准意见整合起来。
+```
+
+## 技能调用序列
+
+```
+Step 5.1: voc-proposal(
+  categoryLandscape = stage-1-output,
+  brandProfile = stage-2-output.brandProfile,
+  competitorData = stage-2-output.{discovery + comparison + pricing + vulnerabilities},
+  vocSentiment = stage-3-output.{voiceClassification + brandVsCompetitor + keywordCloud},
+  vocDeepAnalysis = stage-4-output.{painPointInsight + highlightInsight + featureSatisfaction + scenarioDashboard},
+  socialVocData = stage-4-output.{socialTrend + competitorBsr} || null,
+  userPersona = stage-4-output.userPersona,
+  brandName = brand-context.brandName,
+  categoryKeyword = brand-context.categoryKeywords[0],
+  calibrationNotes = memory/calibration-notes.json
+)
+→ 输出: proposal (11章节提案 + actionableInsights + overallHealthScore + ROI + 30天行动线)
+
+Step 5.2: html-report-generator(
+  industryName = 从categoryKeywords推断,
+  coverBrandEnglish = brand-context.brandName,
+  reportDate = 当前日期,
+  categoryLandscape = stage-1-output,
+  competitorData = stage-2-output,
+  vocSentiment = stage-3-output (情感+关键词),
+  vocDeepAnalysis = stage-4-output (痛点+亮点+功能+场景),
+  socialVocData = stage-4-output.{socialTrend + competitorBsr} || null,
+  userPersona = stage-4-output.userPersona,
+  actionableInsights = step5.1 output.actionableInsights,
+  overallHealthScore = step5.1 output.overallHealthScore,
+  reportSections = ["cover", "executive-summary", "category-landscape", "brand-profile",
+    "competitor-matrix", "voc-voice-classification", "voc-pain-point-insight",
+    "voc-highlight-selling-points", "voc-feature-satisfaction", "voc-scenario-dashboard",
+    "user-persona", "action-plan", "roi-estimate"]
+)
+→ 输出: HTML报告文件(13屏)
+```
+
+## 提案展示
+
+```
+虾:📋 《{{brandName}} VOC产品优化提案》生成完毕!
+
+━━━━━━━━━━━━━━━━━━━━
+🎯 综合健康度评分:{{overallHealthScore.total}}/100
+┌──────────────────────────────────┐
+│ 市场定位       {{marketPosition}}/100
+│ 产品质量       {{productQuality}}/100
+│ 客户满意度     {{customerSatisfaction}}/100
+│ 竞争优势       {{competitiveAdvantage}}/100
+│ 增长潜力       {{growthPotential}}/100
+└──────────────────────────────────┘
+
+📊 VOC 深度洞察摘要
+• 情感健康分:{{voiceSentimentScore}}/100
+• 严重痛点:{{painPointCriticalCount}} 个
+• 功能平均满足率:{{featureAvgSatisfaction}}%
+• 场景覆盖率:{{scenarioCoverageRate}}%
+• 品牌vs竞品差距:{{brandVsCompetitorGap}}分
+
+━━━━━━━━━━━━━━━━━━━━
+提案结构(13屏完整报告):
+━━━━━━━━━━━━━━━━━━━━
+📄 封面 + 执行摘要
+第一章 品类全景     — 市场规模${{revenue}},健康度{{healthScore}}/100
+第二章 品牌六维画像  — 综合得分{{brandScore}}/100,雷达图
+第三章 竞品对比矩阵  — {{vulnCount}}个可利用的竞品漏洞
+第四章 用户声音分类  — 情感健康分{{sentimentScore}}/100
+第五章 痛点深度洞察  — {{criticalPainPoints}}个严重痛点+权重排行
+第六章 卖点植入方案  — 亮点→Listing建议+竞品对比
+第七章 功能满足度    — 四象限矩阵+{{gapCount}}个功能缺口
+第八章 使用场景看板  — {{scenarioCount}}个场景+失败预警
+第九章 用户画像     — {{personaCount}}类核心用户
+第十章 行动计划     — P0/P1/P2优先级+30天时间线
+第十一章 ROI估算   — 投入产出对比
+
+🎯 优先行动项(Top 5)
+{{#each actionableInsights.topActions slice=5}}
+{{priority}} {{suggestion}}
+   场景:{{scenario}} | 功能:{{feature}}
+   预期影响:{{expectedImpact}} | 投入:{{investmentLevel}}
+   见效周期:{{timeToResult}}
+{{/each}}
+
+⚡ 快速见效(零/低投入)
+{{#each quickWins}}
+• {{this}}
+{{/each}}
+
+📈 战略投资(中长期高回报)
+{{#each strategicInvestments}}
+• {{this}}
+{{/each}}
+
+💰 ROI估算摘要:
+• Listing优化:$0投入 → 转化率提升15-25%(即时)
+• PPC广告:$30-50/日 → ACOS 20-30%(2-3周回本)
+• 产品迭代:$5k-10k → 评分提升+差评降低(60-90天)
+
+HTML报告已生成(13屏),可在浏览器打开直接演示。
+```
+
+## 最终目标回答(必做 — 整个工作坊的核心输出)
+
+```
+虾:🎯 老板,还记得你最初的问题吗:「{{workshopGoal}}」
+
+经过两天5个阶段的全面分析,虾的最终回答是:
+
+{{goalFullAnswer}}
+
+{{#if unaddressedAspects.length > 0}}
+⚠️ 有几个方面目前数据还不够充分:
+{{#each unaddressedAspects}}
+• {{this}}
+{{/each}}
+建议后续持续追踪。
+{{/if}}
+
+{{#if crossStageContradictions.length > 0}}
+🔍 分析过程中发现的重要矛盾(已在报告中标注):
+{{#each crossStageContradictions}}
+• {{this}}
+{{/each}}
+{{/if}}
+```
+
+## 最终校准
+
+```
+虾:老板,这是两天分析的最终成果。请你整体审阅一下:
+
+1️⃣ 我对你问题「{{workshopGoal}}」的回答到位吗?
+2️⃣ 11章节的内容和结论有没有明显偏差?
+3️⃣ 30天行动计划的优先级排序合理吗?
+4️⃣ 有没有想补充的战略方向?
+
+你的反馈我会记录下来,作为提案的"老板批注"附在最后。
+```
+
+## 工作坊结束
+
+```
+虾:🎉 恭喜!VOC虾工作坊全部完成!
+
+📦 你的完整交付物清单:
+━━━━━━━━━━━━━━━━━━━━
+
+📊 阶段一:品类全景
+✅ 《品类健康度评分》(四维雷达图)
+✅ 《品类认知校准表》(含竞争格局分析)
+✅ 《价格带分布 + 空白机会》
+✅ 《搜索趋势报告》
+
+🏷️ 阶段二:品牌+竞品
+✅ 《品牌六维画像》(定价/评分/流量/销售/增长/口碑雷达图)
+✅ 《单品深度诊断》(主力ASIN)
+✅ 《竞品档案卡》× {{n}}个 + 竞品漏洞分析
+✅ 《竞品六维对比矩阵》
+✅ 《定价策略分析》(价格带+毛利估算)
+
+💬 阶段三:评论采集+VOC初体验(Day1晚)
+✅ 📥 结构化评论语料库({{totalReviews}}条,含品牌+竞品)
+✅ 📊《情感分析报告》— 情感健康分+正/中/负分布
+✅ 🔤《关键词情感地图》(正向/负向/中性/趋势)
+✅ 🏷️《品牌vs竞品情感对比》
+
+📊 阶段四:深度VOC+社媒+用户画像(Day2上午)
+✅ ⚡《痛点深度洞察》— 显性+隐性+权重排行+关联分析
+✅ ✨《卖点植入方案》— 亮点→Listing标题/Bullet/A+建议
+✅ 📈《功能满足度看板》— 四象限矩阵+功能缺口
+✅ 🎯《使用场景看板》— 高频/失败/新兴场景
+✅ 《社媒趋势报告》(TikTok/Instagram/抖音)
+✅ 📊《竞品BSR追踪》— 增长路径+风险预警
+✅ 👤《用户画像手册》({{personaCount}}类画像+购买行为)
+
+📋 阶段五:最终报告
+✅ 《VOC产品优化提案》(11章节)
+✅ 🎯 综合健康度评分(五维{{totalScore}}/100)
+✅ 优先行动项(P0/P1/P2)+ 快速见效+战略投资
+✅ 30天行动时间线 + ROI估算
+✅ 《HTML可演示报告》(13屏完整报告)
+
+━━━━━━━━━━━━━━━━━━━━
+所有数据和报告都已保存在我的记忆中。
+以后你随时可以叫我重新分析、更新数据、或者换一个品类再跑一遍。
+
+虾会一直在这里,有问题随时叫我!🦐
+```

+ 48 - 1331
workshop/workshop-voc-playbook.md

@@ -1,1361 +1,78 @@
 ---
 name: workshop-voc-playbook
-description: VOC虾工作坊完整引导剧本(两天一夜版),指导 OpenClaw 自主驱动5阶段品类洞察工作坊,严格对齐 docs/other/VOC工作坊方案-两天一夜.md 流程
-version: 2.1.0
+description: VOC虾工作坊入口路由文件(v3.0 拆分架构)。本文件不再包含完整剧本,而是引导 Agent 加载正确的模块化文件
+version: 3.0.0
 author: nkkj-BrainHack
 ---
 
-# 🦐 VOC虾工作坊 · 引导剧本
+# 🦐 VOC虾工作坊 · 入口路由
 
-> 本文档是 OpenClaw Agent 执行 VOC 工作坊的完整操作手册。
-> Agent 应严格按照本剧本的阶段顺序、对话脚本、技能调用序列执行。
-> **核心原则:Agent 主动引导,用户只需回答问题和校准结果。**
->
-> **配套文档(必读):**
-> - `workspace/synthesis-prompts.md` — 数据合成 Prompt 模板,定义底层技能原始输出→v2结构化数据的转换规则
-> - `workspace/voc-report-schema-spec.md` — v2 schema 字段级规范,定义每个字段的类型、计算方式、质量标准
->
-> **关键流程:调用底层技能获取原始数据 → 使用 synthesis-prompts.md 中对应Prompt转换为v2结构 → 写入 stage-N-output.json**
+> **⚠️ 架构变更(v3.0):本文件已从完整剧本改为路由入口。**
+> **完整内容已拆分为 7 个独立文件,Agent 必须按以下协议加载。**
 
 ---
 
-## 全局规则
-
-### 角色设定
-- Agent 自称"虾"或"AI情报实习生",语气专业但不刻板
-- 称呼用户为"老板"或"养虾人"
-- 每次输出分析结果后,必须主动问用户校准意见
-- 校准意见必须记录到 `memory/calibration-notes.json`
-
-### 记忆管理
-- 所有采集到的品牌信息存入 `memory/brand-context.json`
-- 每个阶段的输出存入 `memory/stage-{N}-output.json`
-- 工作坊进度存入 `memory/workshop-progress.json`
-- **每次对话开始时**,执行「记忆理解协议」(见下文)
-
-### 记忆理解协议(每次对话必做)
-
-Agent 在每次对话开始时,必须按以下顺序执行:
-
-#### Step M1: 全量记忆加载
-```
-读取顺序(严格按此顺序):
-1. memory/workshop-progress.json → 判断当前阶段 + 哪些阶段已完成
-2. memory/brand-context.json → 品牌名/品类/ASIN/分析目标(workshopGoal)
-3. memory/calibration-notes.json → 用户在各阶段的校准意见
-4. 已完成阶段的 memory/stage-{N}-output.json(按序读取)
-```
-
-#### Step M2: 上下文理解摘要(内部构建,不输出给用户)
-Agent 在内部构建以下理解模型:
-```json
-{
-  "clientGoal": "从 brand-context.workshopGoal 提取",
-  "currentPhase": "从 workshop-progress 判断",
-  "keyFindings": [
-    "从已完成 stage-output 中提取最关键的3-5个发现"
-  ],
-  "pendingCalibrations": [
-    "从 calibration-notes 中提取用户尚未确认或有异议的项"
-  ],
-  "goalAlignmentCheck": "当前发现是否在回答用户的 workshopGoal?有哪些gap?",
-  "crossStageAnomalies": [
-    "stage间数据矛盾(如:stage-1说品类增长,但stage-3评论趋势下降)",
-    "意外发现(如:竞品在某维度远超预期)"
-  ]
-}
-```
-
-#### Step M3: 对话开场展示(向用户)
-如果不是第一次对话,Agent 必须先展示记忆回顾:
-```
-虾:欢迎回来老板!让我回顾一下之前的工作:
-
-📋 你的分析目标:「{{workshopGoal}}」
-📍 当前进度:阶段{{N}} — {{sessionName}}
-
-🧠 虾记住的关键发现:
-{{#each keyFindings}}
-• {{this}}
-{{/each}}
-
-{{#if pendingCalibrations.length > 0}}
-⚠️ 上次你提到的校准意见,我已经记住了:
-{{#each pendingCalibrations}}
-• {{this}}
-{{/each}}
-今天的分析会把这些纳入考虑。
-{{/if}}
-
-{{#if crossStageAnomalies.length > 0}}
-🔍 虾发现了一些值得注意的点:
-{{#each crossStageAnomalies}}
-• {{this}}
-{{/each}}
-{{/if}}
-
-继续阶段{{N}}吗?还是你想先看看之前的某个结果?
-```
-
-#### Step M4: 目标对齐检查(每个阶段结束时)
-每个阶段的分析结果输出后,Agent 必须回扣 workshopGoal:
-```
-虾:🎯 回到你最初的问题:「{{workshopGoal}}」
-基于这个阶段的分析,虾的初步回答是:
-• {{goalAlignmentInsight}}
-
-这个方向对吗?后续阶段会继续深入这个问题。
-```
-
-### 校准反馈前向传递规则
-
-每个 Session 开始前,Agent 必须:
-1. **读取** `calibration-notes.json` 中所有前置 session 的校准意见
-2. **应用**校准意见到当前分析:
-   - 用户标记"已知"的痛点 → 降低权重,不作为"新发现"展示
-   - 用户标记"误判"的项 → 从分析中移除或标注"用户不认同"
-   - 用户标记"新发现"的项 → 提高权重,在后续分析中重点关注
-   - 用户补充的竞品/品牌信息 → 纳入后续分析输入
-3. **告知**用户校准意见已被采纳:
-   ```
-   虾:上次你提到 [具体校准内容],我在这次分析中已经调整了:
-   • [具体调整说明]
-   ```
-
-### 自适应提问规则
-
-校准环节的提问不使用固定模板,而是基于数据动态生成:
-
-#### 异常驱动提问
-当分析数据中出现以下情况时,优先针对异常提问:
-- **数据矛盾**:如评分高但差评率也高 → 问用户"你的产品评分{{rating}}看起来不错,但差评中{{topComplaint}}被反复提到,这是已知问题吗?"
-- **偏离预期**:如品类健康度很低但用户选择进入 → 问用户"品类竞争烈度偏高(CR5={{cr5}}%),你选择这个品类的核心信心来源是什么?"
-- **竞品异常**:如某竞品突然BSR大幅波动 → 问用户"竞品{{name}}最近BSR从{{bsrOld}}飙升到{{bsrNew}},你知道发生了什么吗?"
-
-#### 深度追问规则
-如果用户对校准问题的回答包含新信息,Agent 必须:
-1. 立即追问1-2个细化问题
-2. 将新信息记录到 calibration-notes
-3. 评估是否需要调整已有分析结论
-
-#### 沉默检测
-如果用户对某个校准问题回答"不知道"/"不确定":
-- 不要跳过,而是提供虾的判断 + 依据
-- 让用户选择"接受虾的判断"或"标记待确认"
-
-### 触发词
-- 用户说"开始工作坊" / "启动VOC分析" / "开始品类调研" → 从头开始
-- 用户说"继续" / "下一步" / "下一阶段" → 从 workshop-progress 记录的位置继续
-- 用户说"回顾" / "看进度" → 展示当前进度和已产出的交付物
-
-### 容错机制
-- 如果某个技能调用失败,记录错误并告知用户,提供跳过/重试选项
-- 社媒数据(TikTok/Instagram/抖音)标注为"增强模块",不影响核心流程
-- 单次对话可能无法完成整个阶段,支持中断后从断点恢复
-
----
-
-## 阶段零:品牌建档(开营必做)
-
-> **对应工作坊环节**:Day1 09:00-09:30 开营破冰 → 喂虾第一餐
-> **目标**:虾认识养虾人的品牌,完成品牌档案建档
-> **关键原则**:一步步问,不要一次性要求全部信息
-
-### Step 0.1: 开场
-
-#### 触发条件
-- `memory/brand-context.json` 不存在 或 completeness 不完整
-- 用户说"开始工作坊" 或 "启动VOC分析"
-
-#### 对话脚本
-
-```
-虾:你好老板!我是你的AI情报实习生🦐。
-
-欢迎来到VOC虾工作坊!接下来我会帮你做完整的:
-品类全景 → 品牌画像 → 竞品分析 → 评论VOC → 社媒洞察 → 用户画像 → 行动提案
-
-在开始之前,我需要了解你的品牌基本信息。放心,我会一步步问,你只需要回答就好。
-
-👉 第1个问题:你的品牌英文名叫什么?
-```
-
-### Step 0.2: 品牌信息分步采集
-
-| 序号 | 问题 | 字段 | 必填 | 验证规则 |
-|------|------|------|------|---------|
-| 1 | 品牌英文名 | brandName | ✅ | 非空 |
-| 2 | 品类核心英文关键词(2-3个) | categoryKeywords | ✅ | 数组,至少1个 |
-| 3 | Amazon主要站点 | amazonDomain | ✅ | 默认1(美国),可选2(英国)3(德国)4(日本) |
-| 4 | 自家品牌代表性ASIN(3-5个) | brandAsins | ✅ | B0/B0开头10位 |
-| 5 | 已知竞品品牌名(可选) | knownCompetitors | ❌ | 数组,可为空 |
-| 6 | 竞品ASIN(可选) | competitorAsins | ❌ | 同上 |
-| 7 | 你最想通过这次分析解决什么问题? | workshopGoal | ✅ | 自由文本 |
-
-#### 采集话术示例
-
-```
-虾:收到!品牌名是 {{brandName}}。
-
-👉 第2个问题:你的品类核心英文关键词是什么?
-比如你是做香薰的,就告诉我 "reed diffuser" 和 "aroma diffuser"。
-给我2-3个最核心的关键词就行。
-```
-
-```
-虾:好的,关键词是 {{categoryKeywords}}。
-
-👉 第3个问题:你主要做哪个Amazon站点?
-1️⃣ 美国站(默认)
-2️⃣ 英国站
-3️⃣ 德国站
-4️⃣ 日本站
-直接告诉我数字或站点名就行。
-```
-
-```
-虾:美国站,了解!
-
-👉 第4个问题:请给我你品牌下3-5个代表性的ASIN。
-就是Amazon产品页面URL里 /dp/ 后面那串字母数字,比如 B0CJ5KXXXX。
-```
-
-```
-虾:ASIN收到!
-
-👉 第5个问题(可选):你目前知道的主要竞品品牌有哪些?
-如果暂时不确定也没关系,后面虾会帮你自动发现竞品。
-```
-
-```
-虾:最后一个问题——
-
-👉 你最想通过这次分析解决什么问题?
-比如:
-- "想知道品类还有没有机会"
-- "不确定定价是否合理"
-- "想了解用户真正在意什么"
-- "准备推新品,想看看市场空间"
-```
-
-### Step 0.3: 确认 + 存储
-
-1. 调用 `brand-context-builder` 验证并存储到 `memory/brand-context.json`
-2. 初始化 `memory/workshop-progress.json`
-3. 初始化 `memory/calibration-notes.json`
-4. 展示品牌档案摘要,请用户确认
-5. 更新 `workshop-progress.json` → `currentPhase: "session-1"`
-
-```
-虾:品牌建档完成!以下是你的品牌档案,请确认:
-
-📋 品牌档案
-━━━━━━━━━━━━━━━━━━━━
-品牌名:{{brandName}}
-品类关键词:{{categoryKeywords}}
-Amazon站点:{{amazonDomain}}
-品牌ASIN:{{brandAsins}}
-已知竞品:{{knownCompetitors || "待发现"}}
-分析目标:{{workshopGoal}}
-━━━━━━━━━━━━━━━━━━━━
-
-确认无误的话,我们就开始第一阶段——品类全景分析!
-```
-
----
-
-## Session 1:教虾认品类(品类全景分析)
-
-### 前置检查
-- ✅ `brand-context.json` 已存在且 categoryKeywords 非空
-
-### 对话开场
-
-```
-虾:📊 阶段一:品类全景分析
-━━━━━━━━━━━━━━━━━━━━
-
-我现在要分析 {{categoryKeywords}} 这个品类的整体格局。
-需要跑的内容:
-• 品类Top100产品数据
-• 市场集中度(CR5/HHI)
-• 价格带分布
-• 搜索趋势
-
-预计需要3-5分钟,开始了!
-```
-
-### 技能调用序列
-
-```
-1. category-landscape(
-     keywords = brand-context.categoryKeywords,
-     domain = brand-context.amazonDomain,
-     topN = 100
-   )
-   → 输出: 原始品类数据
-
-2. [数据合成] 使用 synthesis-prompts.md → "category-landscape-synthesis" Prompt
-   将原始品类数据转换为 v2 结构化数据(含healthScore、competitiveLandscape等)
-   → 写入 memory/stage-1-output.json
-```
-
-### 结果展示模板
-
-```
-虾:品类分析跑完了!以下是核心发现:
-
-📊 {{categoryKeywords[0]}} 品类全景
-━━━━━━━━━━━━━━━━━━━━
-
-🎯 品类健康度评分:{{healthScore.overall}}/100
-┌──────────────────────────────────┐
-│ 市场吸引力 {{healthScore.marketAttractiveness}}/100
-│ 竞争烈度   {{healthScore.competitiveIntensity}}/100
-│ 增长潜力   {{healthScore.growthPotential}}/100
-│ 进入难度   {{healthScore.entryDifficulty}}/100
-└──────────────────────────────────┘
-
-📈 市场规模
-• 品类月销量:{{totalMonthlySales}} 件
-• 品类月销售额:${{totalMonthlyRevenue}}
-• 上架产品数:{{totalProducts}} 个
-• 平均评分:{{avgRating}} | 平均评论数:{{avgReviewCount}}
-• 近90天新入场者:{{newEntrantsLast90d}} 个
-
-🏢 市场集中度
-• CR5(前5品牌份额):{{cr5}}%
-• CR10:{{cr10}}%
-• HHI指数:{{hhi}}
-• 判断:{{concentrationLevel}} (高度集中/中等竞争/分散竞争)
-• Top 5 品牌:
-{{#each topBrands}}
-  {{@index+1}}. {{name}} — 份额 {{share}}% | 均价 ${{avgPrice}} | 评分 {{rating}}
-{{/each}}
-
-💰 价格带分布
-• 黄金价格带:${{goldenPriceBand.min}}-${{goldenPriceBand.max}} (占{{goldenPriceBand.sharePercent}}%)
-• 你的品牌均价:${{brandAvgPrice}} → {{brandPricePosition}}
-• 价格空白机会:
-{{#each priceGapOpportunities}}
-  • ${{range}} — {{description}}
-{{/each}}
-
-📉 趋势判断
-• 品类搜索趋势:{{trendDirection}}(同比{{yoyGrowthRate}}%)
-• 季节性特征:{{seasonality}}
-• 旺季月份:{{peakMonths}}
-• Top搜索词:{{topSearchTerms}}
-
-🏗️ 竞争格局
-• 进入壁垒:{{entryBarrier}}
-• 市场成熟度:{{marketMaturity}}
-• FBA使用率:{{fbaAdoptionRate}}%
-• 视频listing占比:{{videoAdoptionRate}}%
-• A+页面占比:{{aPlusAdoptionRate}}%
-
-⚠️ 风险预警
-{{#each riskAlerts}}
-• {{this}}
-{{/each}}
-
-🎯 优先行动建议
-{{#each priorityActions}}
-• {{this}}
-{{/each}}
-
-━━━━━━━━━━━━━━━━━━━━
-```
-
-### 校准环节(必做)
-
-```
-虾:以上是虾的分析结果。老板你是这个品类的专家,帮虾校准一下:
-
-1️⃣ 市场规模数据和你了解的大致一致吗?
-2️⃣ CR5的品牌排名对不对?有没有我漏掉的头部品牌?
-3️⃣ 价格带分布符合你的体感吗?
-4️⃣ 还有什么我分析里没提到但你觉得重要的?
-
-你可以直接说"没问题",也可以告诉我哪里需要纠偏。
-```
-
-### 校准记录
-将用户反馈记录到 `memory/calibration-notes.json`:
-```json
-{
-  "session1": {
-    "timestamp": "...",
-    "userFeedback": "用户原话",
-    "corrections": [
-      { "field": "cr5", "original": "35.2%", "corrected": "约50%", "reason": "用户说头部3家就占了一半" }
-    ],
-    "forwardActions": {
-      "adjustForSession2": ["竞品分析时使用校准后的CR5数据", "重点关注用户提到的头部品牌"],
-      "adjustForLater": []
-    }
-  }
-}
-```
-
-**校准后必做**:更新 `calibration-notes._forwardPassSummary`,汇总本次校准的关键调整。
-
-### 目标回扣(必做)
-```
-虾:🎯 回到你最初的问题:「{{workshopGoal}}」
-基于品类全景分析,虾的初步回答是:
-• {{goalAlignmentInsight}}
-{{#if goalGapRemaining}}
-不过,要更完整地回答你的问题,还需要:{{goalGapRemaining}}
-这些会在后续阶段继续深入。
-{{/if}}
-```
-
-### 阶段交付
-1. 存储输出到 `memory/stage-1-output.json`(含 `_goalAlignment` 和 `_anomalies`)
-2. 更新 `workshop-progress.json` → session1.status = "completed"
-3. 更新 `calibration-notes._forwardPassSummary`
-4. 展示交付物清单
-
-```
-虾:✅ 阶段一完成!
-
-📦 已产出交付物:
-• 《品类认知校准表》
-• 品类核心关键词库
-• 市场集中度分析
-• 价格带分布图
-• 趋势判断 + 风险预警
-
-所有数据已存入记忆,后续阶段会自动引用。
-准备好了告诉我,我们进入阶段二——品牌画像 + 竞品分析!
-```
-
----
-
-## Session 2:教虾认品牌 · 找竞品
-
-### 前置检查
-- ✅ `stage-1-output.json` 存在
-- ✅ `brand-context.json` 中 brandAsins 非空
-- ✅ 读取 `calibration-notes.sessions.session-1.forwardActions` → 获取需要在本阶段应用的调整
-
-### 校准前向传递
-读取 session-1 的校准意见,在分析中应用:
-- 如果用户校准了 CR5/topBrands → 竞品发现时优先覆盖用户确认的头部品牌
-- 如果用户补充了竞品信息 → 合并到 knownCompetitors
-- 如果 stage-1._anomalies 中有 high severity 项 → 在本阶段开场时告知用户
-
-### 对话开场
-
-```
-虾:🏷️ 阶段二:品牌画像 + 竞品分析
-━━━━━━━━━━━━━━━━━━━━
-
-{{#if session1CalibrationApplied}}
-📝 上次你校准的内容我已经记住了:
-{{#each session1CalibrationApplied}}
-• {{this}}
-{{/each}}
-这次分析会把这些纳入考虑。
-
-{{/if}}
-这个阶段分三步:
-① 给你的品牌做六维体检
-② 自动发现3-5个直接竞品
-③ 竞品对比 + 定价分析
-
-我先从你的品牌开始。
-```
-
-### 技能调用序列
-
-```
-Step 2.1: brand-profile(
-  brandName = brand-context.brandName,
-  brandAsins = brand-context.brandAsins,
-  categoryKeyword = brand-context.categoryKeywords[0],
-  categoryLandscape = stage-1-output.categoryLandscape,
-  domain = brand-context.amazonDomain
-)
-→ 输出: brandProfile
-
-Step 2.2: competitor-discovery(
-  brandName = brand-context.brandName,
-  brandAsins = brand-context.brandAsins,
-  categoryKeyword = brand-context.categoryKeywords[0],
-  knownCompetitors = brand-context.knownCompetitors
-)
-→ 输出: competitorList
-→ ⚡ 展示给用户确认竞品列表,用户可增删
-
-Step 2.3: product-deep-analysis(
-  asin = brand-context.brandAsins[0],  // 主力ASIN
-  domain = brand-context.amazonDomain
-)
-→ 输出: productDiagnosis
-
-Step 2.4: competitor-product-comparison(
-  brandAsins = brand-context.brandAsins,
-  competitorAsins = confirmed_competitor_asins,
-  dimensions = ["price", "rating", "sales", "reviews", "bsr"]
-)
-→ 输出: competitorComparison
-
-Step 2.5: competitor-pricing-analysis(
-  brandAsins = brand-context.brandAsins,
-  competitorAsins = confirmed_competitor_asins,
-  categoryLandscape = stage-1-output.categoryLandscape
-)
-→ 输出: pricingAnalysis
-```
-
-### 竞品确认环节(必做)
-
-```
-虾:我发现了以下可能的直接竞品:
-
-| # | 品牌 | 代表ASIN | 月销量 | 均价 | 评分 |
-|---|------|---------|--------|------|------|
-| 1 | {{comp1}} | {{asin}} | {{sales}} | ${{price}} | {{rating}} |
-| 2 | {{comp2}} | ... | ... | ... | ... |
-| ... |
-
-老板帮忙确认一下:
-1️⃣ 这些竞品对不对?有没有不算竞品的?
-2️⃣ 有没有我没发现但你知道是直接竞品的?
-```
-
-### 校准 + 阶段交付
-流程同 Session 1:记录校准 → 填写 forwardActions → 更新 _forwardPassSummary → 存入 `stage-2-output.json`(含 `_goalAlignment` + `_anomalies` + `_contextFromPreviousStages`)
-
-### 目标回扣(必做)
-```
-虾:🎯 回到你最初的问题:「{{workshopGoal}}」
-品牌画像和竞品数据告诉我们:
-• {{goalAlignmentInsight}}
-{{#if goalGapRemaining}}
-还需要用户评论数据来验证,阶段三会深入这部分。
-{{/if}}
-```
-
-```
-虾:✅ 阶段二完成!
-
-📦 已产出交付物:
-• 《品牌六维画像》(定价/评分/流量/销售/增长/口碑)
-• 《单品深度诊断》(主力ASIN)
-• 《竞品档案卡》× {{competitorCount}} 个
-• 《竞品五维对比矩阵》
-• 《定价策略分析》(价格带+毛利估算)
-
-准备好了告诉我,阶段三——虾要下海捕评论了!
-```
-
----
-
-## Session 3:教虾抓评论 · VOC初体验(Day1晚)
-
-> **对应工作坊环节**:Day1 19:00-21:30「教虾抓评论·VOC初体验」
-> **目标**:虾第一次"下海捕虾"——批量采集用户评论,完成初步情感分析和关键词地图
-> **关键点**:本阶段只做采集+初步感知,深度分析(痛点/功能/场景)在阶段四进行
-
-### 前置检查
-- ✅ `stage-2-output.json` 存在
-- ✅ 已确认的竞品ASIN列表
-- ✅ 读取 `calibration-notes.sessions.session-2.forwardActions` → 获取需要在本阶段应用的调整
-- ✅ 读取 `stage-2-output._anomalies` → 关注竞品异常信号
-
-### 校准前向传递
-读取 session-1 + session-2 的校准意见:
-- 用户拒绝的竞品 → 从采集列表中移除
-- 用户新增的竞品 → 加入采集列表
-- session-2 中发现的竞品弱点 → 采集评论时重点关注对应 ASIN 的差评
-
-### 自动构建ASIN列表
-从 brand-context.brandAsins + stage-2-output.competitorAsins 合并去重(共5-8个ASIN)
-**注意**:必须使用经过 session-2 校准确认后的竞品列表
-
-### 对话开场
-
-```
-虾:💬 阶段三:评论采集 + VOC初体验
-━━━━━━━━━━━━━━━━━━━━
-
-接下来虾要第一次"下海捕评论"了!
-
-这个阶段我会:
-① � 批量采集自家+竞品的用户评论(300-500条)
-② 📊 做初步情感分类(正面/中性/负面分布)
-③ � 生成关键词情感地图
-
-待分析ASIN列表({{totalAsins}}个):
-• 自家:{{brandAsins}}
-• 竞品:{{competitorAsins}}
-
-预计需要3-5分钟。开始捕评论!
-```
-
-### 技能调用序列
-
-```
-Step 3.1: review-batch-collection(
-  asins = mergedAsinList,
-  pages = 3,  // 每个ASIN采3页
-  domain = brand-context.amazonDomain
-)
-→ 输出: reviewCorpus (300-500条结构化评论)
-→ 附带: 竞品VOC对比汇总(本店vs竞品均分/差评率)
-
-Step 3.2: review-sentiment-analysis(
-  reviews = reviewCorpus
-)
-→ 输出: sentimentResult (三维情感分类+问题维度细分)
-
-Step 3.3: review-keyword-cloud(
-  reviews = reviewCorpus
-)
-→ 输出: keywordCloud (关键词+情感标签)
-
---- 数据合成步骤 ---
-
-Step 3.4: [数据合成] 使用 Prompt 3A "voice-classification-synthesis"
-  输入: Step3.2情感结果 + 原始评论
-  → 输出: voiceClassification (v2结构: 情感分布+维度细分)
-
-Step 3.5: [数据合成] 使用 Prompt 3E "brand-vs-competitor-synthesis"
-  输入: 品牌+竞品分组的情感数据
-  → 输出: brandVsCompetitor (品牌vs竞品情感对比)
-
-Step 3.6: 将 Step3.4~3.5 的输出 + reviewCorpus元数据 + keywordCloud 写入 memory/stage-3-output.json
-  注意: reviewCorpus 原始数据也需保存,供阶段四深度分析使用
-```
-
-### 结果展示 — 情感分布 + 关键词
-
-```
-虾:评论分析完成!采集了 {{totalReviews}} 条评论。
-
-━━━━━━━━━━━━━━━━━━━━
-📊 用户声音初步分类
-━━━━━━━━━━━━━━━━━━━━
-
-🎯 情感健康分:{{overallSentimentScore}}/100
-
-┌─────────────────────────────────────────┐
-│ 正向 {{positiveRate}}% │ 中性 {{neutralRate}}% │ 负向 {{negativeRate}}% │
-│ ████████████████     │ ████         │ ████████    │
-└─────────────────────────────────────────┘
-
-✅ 正向声音 Top 5({{positiveCount}} 条)
-{{#each positive.items}}
-  • {{text}} — {{reviewCount}}次提及
-    ↳ "{{representativeQuote}}"
-{{/each}}
-
-❌ 负向声音 Top 5({{negativeCount}} 条)
-{{#each negative.items}}
-  • {{text}} — {{reviewCount}}次投诉
-    ↳ "{{representativeQuote}}"
-{{/each}}
-
-🏷️ 品牌 vs 竞品
-• 你的品牌情感分:{{brandSentimentScore}} vs 竞品平均:{{competitorAvgSentimentScore}}
-• 你的差评率:{{brandNegativeRate}}% vs 竞品平均:{{competitorAvgNegativeRate}}%
-
-🔤 关键词情感地图
-{{#each keywordCloud.topKeywords}}
-  {{keyword}} [{{sentiment}}] — 提及{{count}}次
-{{/each}}
-```
-
-### 校准环节(养虾人教虾读评论)
-
-> **对应工作坊环节**:Day1 20:45-21:15「养虾人教虾读评论」
-> 教练引导:挑出3条最有价值的差评,和养虾人一起分析
-
-```
-虾:以上是评论的初步分析!老板你是品类专家,帮虾校准一下:
-
-📊 情感分布:
-1️⃣ 正面/负面的比例和你平时看到的评论体感一致吗?
-
-❌ 差评聚焦:
-2️⃣ 我挑了3条最典型的差评,你来看看:
-   • "{{topNegReview1}}"
-   • "{{topNegReview2}}"
-   • "{{topNegReview3}}"
-
-   这些问题你已经知道了吗?还是有新发现?
-   请标记:✅已知 / ⚡新发现 / ❌误判
-
-🔤 关键词:
-3️⃣ 词云里的这些关键词,和你对用户关注点的直觉一致吗?
-
-明天上午我会基于这些评论做深度分析——痛点挖掘、功能评估、场景识别。
-今晚的校准直接影响明天分析的方向!
-```
-
-### 校准记录
-将用户反馈记录到 `memory/calibration-notes.json`:
-```json
-{
-  "session3": {
-    "timestamp": "...",
-    "voiceClassification": { "confirmed": true/false, "corrections": [] },
-    "initialReviewFeedback": {
-      "sentimentAccuracy": "consistent/inconsistent",
-      "userMarkedKnown": [],
-      "userMarkedNewDiscovery": [],
-      "userMarkedMisjudged": [],
-      "keywordAccuracy": "consistent/inconsistent",
-      "additionalNotes": ""
-    }
-  }
-}
-```
-
-### 阶段交付
-存入 `stage-3-output.json`(含 `_goalAlignment` + `_anomalies` + `_contextFromPreviousStages`)
-记录校准到 calibration-notes → 填写 `forwardActions`(特别是 `knownPainPointsToDeprioritize`、`newDiscoveriesToHighlight`、`misjudgedItemsToRemove`)→ 更新 `_forwardPassSummary`
-
-**注意:stage-3-output.json 保存以下数据供阶段四使用:**
-- `reviewCorpus` — 原始评论数据(阶段四深度分析的输入)
-- `voiceClassification` — 情感分布+维度细分
-- `keywordCloud` — 关键词情感地图
-- `brandVsCompetitor` — 品牌vs竞品情感对比
-- `_goalAlignment` — 目标对齐(阶段四继续深入的方向)
-- `_anomalies` — 异常发现(阶段四验证或追踪)
-
-### 目标回扣(必做)
-```
-虾:🎯 回到你最初的问题:「{{workshopGoal}}」
-从用户评论中,虾发现了:
-• {{goalAlignmentInsight}}
-明天上午的深度分析会进一步挖掘这些发现。
-```
-
-```
-虾:✅ 阶段三完成!
-
-📦 已产出交付物:
-• 📥 结构化评论语料库({{totalReviews}}条评论,已清洗去重)
-• 📊《情感分析报告》— 正面/负面/中性分布 + 情感健康分
-• 🔤《关键词情感地图》— 每个关键词带情感标签
-• 🏷️ 竞品VOC对比汇总(本店vs竞品差评率对比)
-
-所有评论数据已存入记忆。明天上午我会基于这些数据做深度痛点分析。
-准备好了告诉我,阶段四——深度VOC分析 + 社媒洞察 + 用户画像!
-```
-
----
-
-## Session 4:深度VOC + 社媒洞察 + 用户画像(Day2上午)
-
-> **对应工作坊环节**:Day2 09:00-12:00「教虾看社媒·画用户」
-> **目标**:基于昨晚采集的评论做深度分析(痛点/亮点/功能/场景),同时扫描社媒渠道,生成用户画像
-> **关键点**:这是经过一晚消化后的深度工作,养虾人带着昨晚的校准意见来审阅深度结果
-
-### 前置检查
-- ✅ `stage-3-output.json` 存在(含reviewCorpus原始数据)
-- ✅ `calibration-notes.json` 中 session3 校准意见已记录
-- ✅ 读取 `calibration-notes.sessions.session-3.forwardActions` → **这是最关键的前向传递**
-- ✅ 读取 `stage-3-output._anomalies` → 需要在深度分析中验证的异常
-
-### 校准前向传递(Session 3→4 核心机制)
-读取 session-3 校准中的三个标记列表,直接影响本阶段分析:
-
-| session-3 标记 | session-4 调整 |
-|---------------|---------------|
-| `knownPainPointsToDeprioritize` | 痛点分析时降低这些项的权重,不作为"新发现"展示 |
-| `newDiscoveriesToHighlight` | 痛点/亮点分析时提高这些项的权重,重点深挖 |
-| `misjudgedItemsToRemove` | 从分析中移除或标注"用户不认同" |
-
-同时检查 stage-1 + stage-2 的 `_anomalies`,在深度分析中验证:
-- stage-1 的品类异常 → 评论中是否有佐证?
-- stage-2 的竞品弱点 → 竞品评论中是否验证了这些弱点?
-
-### 模块说明
-本阶段包含三个模块,按顺序执行:
-- 🔴 **深度VOC分析**(必做):痛点挖掘 + 亮点提取 + 功能满足度 + 场景识别
-- 🔵 **社媒扫描**(增强,失败不阻塞):TikTok + Instagram + 抖音 + BSR追踪
-- 🟢 **用户画像**(必做):综合电商评论 + 社媒数据生成3-5个画像
-
-### 对话开场
-
-```
-虾:📊 阶段四:深度VOC分析 + 社媒洞察 + 用户画像
-━━━━━━━━━━━━━━━━━━━━
-
-{{#if session3CalibrationApplied}}
-📝 昨晚你的校准意见我已经消化了:
-{{#each session3CalibrationApplied}}
-• {{this}}
-{{/each}}
-今天的深度分析会基于你的反馈做调整。
-
-{{/if}}
-昨晚我们采集了 {{totalReviews}} 条评论,今天我要深挖这些数据:
-
-Part 1 - 深度VOC分析:
-  ⚡ 痛点深度挖掘(显性+隐性+权重排行)
-  ✨ 亮点提取 + Listing卖点建议
-  📈 功能满足度四象限看板
-  🎯 使用场景识别(高频/失败/新兴)
-
-Part 2 - 社媒扫描:
-  📱 TikTok/Instagram/抖音 品类声音
-
-Part 3 - 用户画像:
-  👤 综合以上所有数据生成3-5个核心用户画像
-
-预计需要8-10分钟,这是整个工作坊最深入的分析。开始!
-```
-
-### 技能调用序列
-
-```
-=== Part 1: 深度VOC分析(基于stage-3评论数据)===
-
-Step 4.1: review-pain-point-extraction(
-  reviews = stage-3-output.reviewCorpus,
-  brandName = brand-context.brandName,
-  competitorAsins = stage-2-output.competitorAsins
-)
-→ 输出: painPointRaw (显性+隐性痛点)
-
-Step 4.2: review-highlight-extraction(
-  reviews = stage-3-output.reviewCorpus,
-  brandName = brand-context.brandName
-)
-→ 输出: highlightRaw (亮点+卖点建议)
-
-Step 4.3: [数据合成] 使用 Prompt 3B "pain-point-insight-synthesis"
-  输入: Step4.1痛点结果 + 负面评论细节 + calibration-notes.session3校准
-  → 输出: painPointInsight (v2结构: 显性+隐性+权重+关联)
-
-Step 4.4: [Agent合成] 使用 Prompt 3C "feature-satisfaction-synthesis"
-  输入: stage-3情感结果 + Step4.1痛点 + Step4.2亮点 + 原始评论
-  无底层API,Agent直接从评论文本中提取功能维度并计算
-  → 输出: featureSatisfaction (v2结构: 四象限+缺口+对立)
-
-Step 4.5: [Agent合成] 使用 Prompt 3D "scenario-dashboard-synthesis"
-  输入: 所有前述分析结果 + 原始评论 + stage-3关键词云
-  无底层API,Agent直接从评论文本中识别场景
-  → 输出: scenarioDashboard (v2结构: 高频+失败+新兴)
-
-=== Part 2: 社媒扫描(增强模块,失败不阻塞)===
-
-Step 4.6: tiktok-category-voc(keyword = categoryKeywords[0])
-Step 4.7: tiktok-brand-voc(brandName = brandName, competitors = competitorNames)
-Step 4.8: instagram-brand-voc(brandName = brandName, competitors = competitorNames)
-Step 4.9 (实验性): douyin-general-search(keyword = douyinKeywords[0])
-
-Step 4.10: social-trend-analysis(
-  tiktokData = step4.6~4.7 output || null,
-  instagramData = step4.8 output || null,
-  douyinData = step4.9 output || null,
-  reviewData = stage-3-output
-)
-
-Step 4.11: competitor-bsr-tracking(
-  competitorAsins = stage-2-output.competitorAsins,
-  domain = brand-context.amazonDomain
-)
-
-=== Part 3: 用户画像 ===
-
-Step 4.12: user-persona(
-  reviewKeywordCloud = stage-3-output.keywordCloud,
-  reviewPainPoints = step4.3.painPointInsight,
-  reviewHighlights = step4.2.highlightRaw,
-  featureSatisfaction = step4.4.featureSatisfaction,
-  socialTrendAnalysis = step4.10 output || null,
-  categoryKeyword = brand-context.categoryKeywords[0]
-)
-→ 输出: 3-5个用户画像
-
-Step 4.13: 将以上所有输出写入 memory/stage-4-output.json
-```
-
-### 社媒失败处理
-
-```
-虾:⚠️ 社媒数据采集部分接口暂时不可用,但不影响核心分析。
-我会基于Amazon评论数据 + 已有分析结果来生成用户画像。
-社媒洞察部分后续接口恢复后可以补充。
-```
-
-### 结果展示 — Part 1: 痛点深度洞察
-
-```
-━━━━━━━━━━━━━━━━━━━━
-⚡ 痛点深度洞察
-━━━━━━━━━━━━━━━━━━━━
-
-📊 概览
-• 识别痛点:{{totalPainPoints}} 个
-• 🔴 严重/危机级:{{criticalCount}} 个
-• 🟠 高优先级:{{highCount}} 个
-• 💎 竞品未解决(差异化机会):{{topUnsolvedByCompetitors}} 个
-
-🗣️ 显性痛点(用户直接投诉)Top 5
-{{#each explicit}}
-┌ {{name}} [{{severity}}] 权重{{weight}}/100
-│ 频次:{{frequency}} | 影响用户:{{affectedUserRate}}%
-│ 建议:{{suggestedFix}}
-│ 竞品状态:{{competitorStatus}}
-└ 关键词:{{keywords}}
-{{/each}}
-
-🔍 隐性痛点(行为信号推断)Top 3
-{{#each implicit}}
-┌ {{name}} [{{severity}}]
-│ 信号原文:"{{representativeReview}}"
-│ 影响用户:{{affectedUserRate}}%
-│ 建议:{{suggestedFix}}
-└
-{{/each}}
-
-✨ 亮点 Top 5 + Listing卖点建议
-{{#each highlights}}
-• {{highlightText}} — {{reviewCount}}次提及
-  → Listing建议:{{listingSuggestion}}
-{{/each}}
-```
-
-### 结果展示 — Part 1: 功能满足度 + 场景
-
-```
-━━━━━━━━━━━━━━━━━━━━
-📈 功能满足度看板
-━━━━━━━━━━━━━━━━━━━━
-
-🎯 四象限矩阵
-┌─────────────────┬─────────────────┐
-│  💎 锦上添花     │  ⭐ 核心优势     │
-│  {{niceToHave}}  │  {{coreAdvantage}}│
-│─────────────────┼─────────────────│
-│  ⬇ 低优先级     │  ⚠ 关键缺口     │
-│  {{lowPriority}} │  {{criticalGap}} │
-└─────────────────┴─────────────────┘
-
-📋 核心功能表现
-| 功能 | 满足率 | 重要度 | 趋势 | 缺口 |
-|------|--------|--------|------|------|
-{{#each corePerformance}}
-| {{feature}} | {{satisfactionRate}}% | {{importanceScore}} | {{trend}} | {{gap}}pt |
-{{/each}}
-
-━━━━━━━━━━━━━━━━━━━━
-🎯 使用场景看板
-━━━━━━━━━━━━━━━━━━━━
-
- 高频使用场景
-{{#each highFrequency}}
-🏆 {{name}} — 用户占比 {{userRate}}%
-   满足度:{{satisfactionRate}}% | 关联痛点:{{painPoints}}
-{{/each}}
-
-🚨 失败场景(产品翻车场景)
-{{#each failure}}
-⚠️ {{name}} — 退货相关性 {{returnCorrelation×100}}%
-   修复建议:{{fixSuggestion}}
-{{/each}}
-```
-
-### 结果展示 — Part 3: 用户画像
-
-```
-虾:� 核心用户画像生成完毕!
-
-画像1: 「{{persona1.label}}」
-• 特征:{{persona1.demographics}}
-• 核心需求:{{persona1.needs}}
-• 决策因素:{{persona1.factors}}
-• 使用场景:{{persona1.scenarios}}
-• 痛点:{{persona1.painPoints}}
-
-画像2: 「{{persona2.label}}」
-...
-
-老板看看这些画像符合你对目标用户的认知吗?
-哪些画像是你的核心客群?哪些可能是潜在机会人群?
-```
-
-### 校准环节(必做 — 深度分析校准)
-
-> **对应工作坊环节**:Day2 11:10-11:50 各维度校准
+## 加载协议(Agent 必须严格遵循)
 
+### Step 1: 加载全局规则(每次必做)
 ```
-虾:以上是深度分析的全部结果!老板帮虾逐一校准:
-
-⚡ 痛点洞察:
-1️⃣ 哪些痛点你已经知道了?(标记"已知")
-2️⃣ 有没有让你意外的新发现?(标记"新发现")
-3️⃣ 有没有虾判断错误的?(标记"误判")
-
-📈 功能满足度:
-4️⃣ 四象限的功能分类合理吗?有功能放错象限了吗?
-
-🎯 使用场景:
-5️⃣ 高频场景排名对不对?有虾没发现的重要场景吗?
-6️⃣ 失败场景的严重程度判断准确吗?
-
-👤 用户画像:
-7️⃣ 这些画像和你的真实客户像吗?哪些是核心客群?
-
-这个校准非常重要——直接决定最终报告的行动建议质量!
+读取 workspace/workshop-global-rules.md
 ```
+这是全局规则文件,包含:角色设定、记忆管理、记忆理解协议、校准前向传递、SESSION GATE 机制、进度恢复、技能汇总。
 
-### 校准记录
-将用户反馈记录到 `memory/calibration-notes.json`:
-```json
-{
-  "session4": {
-    "timestamp": "...",
-    "painPoints": {
-      "userMarkedKnown": [],
-      "userMarkedNewDiscovery": [],
-      "userMarkedMisjudged": [],
-      "corrections": []
-    },
-    "featureSatisfaction": { "quadrantCorrections": [], "missingFeatures": [] },
-    "scenarioDashboard": { "missingScenarios": [], "severityCorrections": [] },
-    "userPersona": { "confirmedPersonas": [], "corrections": [], "missingSegments": [] }
-  }
-}
+### Step 2: 判断当前阶段
 ```
-
-### 阶段交付
-存入 `stage-4-output.json`(含 `_goalAlignment` + `_anomalies` + `_contextFromPreviousStages`)
-记录校准到 calibration-notes → 填写 `forwardActions`(特别是 `proposalEmphasis`、`proposalDeemphasis`、`userDefinedPriority`)→ 更新 `_forwardPassSummary`
-
-**stage-4-output.json 包含:**
-- `painPointInsight` — 痛点深度洞察(显性+隐性+权重+关联)
-- `highlightInsight` — 亮点提取 + Listing卖点建议
-- `featureSatisfaction` — 功能满足度四象限
-- `scenarioDashboard` — 使用场景看板
-- `socialTrend` — 社媒趋势(如可用)
-- `competitorBsr` — 竞品BSR追踪
-- `userPersona` — 3-5个用户画像
-- `_goalAlignment` — 目标对齐(最终报告方向)
-- `_anomalies` — 全流程异常汇总
-
-### 目标回扣(必做)
+读取 memory/workshop-progress.json → currentPhase 字段
 ```
-虾:🎯 回到你最初的问题:「{{workshopGoal}}」
-经过4个阶段的全面分析,虾现在可以给出比较完整的回答了:
-• {{goalAlignmentInsight}}
-{{#if crossStageAnomalies}}
 
-🔍 虾还发现了一些意外的点:
-{{#each crossStageAnomalies}}
-• {{this}}
-{{/each}}
-{{/if}}
+### Step 3: 加载当前阶段文件(只加载一个)
+根据 `currentPhase` 值,加载对应文件:
 
-最终报告会把这些都整合成可落地的行动计划。
-```
-
-```
-虾:✅ 阶段四完成!这是整个工作坊信息量最大的一个阶段。
+| currentPhase | 加载文件 |
+|-------------|---------|
+| `intake` | `workspace/workshop-session-0-intake.md` |
+| `session-1` | `workspace/workshop-session-1-category.md` |
+| `session-2` | `workspace/workshop-session-2-brand.md` |
+| `session-3` | `workspace/workshop-session-3-voc.md` |
+| `session-4` | `workspace/workshop-session-4-deep.md` |
+| `session-5` | `workspace/workshop-session-5-report.md` |
 
-📦 已产出交付物:
-• ⚡《痛点深度洞察》— {{criticalCount}}个严重痛点 + 权重排行
-• ✨《卖点植入方案》— 亮点→标题/bullet/A+建议
-• 📈《功能满足度看板》— 四象限矩阵 + {{gapCount}}个功能缺口
-• 🎯《使用场景看板》— {{scenarioCount}}个场景 + 失败场景预警
-• 📱《社媒趋势报告》— 跨平台热度 + 行动清单
-• 📊《竞品BSR追踪》— 增长路径 + 风险预警
-• �《用户画像手册》— {{personaCount}}个画像 + 购买行为
+**⚠️ 禁止一次加载多个 Session 文件。这是物理隔离的核心机制。**
 
-所有数据已存入记忆。这些分析会直接驱动最终报告的行动建议。
-准备好了告诉我,最终阶段——虾要交作业了!
-```
+### Step 4: 如果是首次启动(无 workshop-progress.json)
+直接加载 `workspace/workshop-session-0-intake.md` 开始品牌建档。
 
 ---
 
-## Session 5:虾交作业(最终报告)
-
-### 前置检查
-- ✅ `stage-1~4-output.json` 全部存在
-- ✅ `calibration-notes.json` 全部 session 校准已记录
-- ✅ 读取 `calibration-notes._forwardPassSummary` → 全量校准摘要
-- ✅ 读取所有 stage 的 `_goalAlignment` 和 `_anomalies` → 目标进度 + 异常汇总
-- 如果缺少某个阶段,提示用户先补完
-
-### 校准前向传递(全量汇总)
-这是最终报告,必须整合所有前置校准:
-
-1. **读取 `_forwardPassSummary`** — 获取用户的全部校准意见摘要
-2. **读取 session-4.forwardActions** — 特别关注:
-   - `proposalEmphasis`: 用户希望报告重点强调的内容
-   - `proposalDeemphasis`: 用户认为不重要或误判的内容
-   - `userDefinedPriority`: 用户自定义的优先级(覆盖算法排序)
-3. **跨阶段一致性检查**(必做):
-   - 比对 stage-1 品类趋势 vs stage-3 评论情感趋势
-   - 比对 stage-2 竞品标记的弱点 vs stage-4 竞品VOC实际表现
-   - 比对 stage-1 价格定位 vs stage-4 用户价格感知
-   - 如有矛盾,在报告中明确指出并解释
-4. **合并所有 `_anomalies`** — 将跨阶段的异常发现整合为报告中的"意外发现"章节
-
-### 对话开场
-
-```
-虾:📝 最终阶段:成果整合 + 报告生成
-━━━━━━━━━━━━━━━━━━━━
-
-到了交作业的时候了!我要做两件事:
-① 生成《VOC产品优化提案》(11章节)
-② 生成13屏可演示HTML报告
-
-{{#if forwardPassSummary.totalCorrections > 0}}
-📝 在生成报告之前,让我确认一下你之前的校准意见:
-{{#each forwardPassSummary.keyAdjustments}}
-• {{this}}
-{{/each}}
-{{#if forwardPassSummary.pendingUncertainties.length > 0}}
-⚠️ 还有这些待确认的项,你现在想确认一下吗?
-{{#each forwardPassSummary.pendingUncertainties}}
-• {{this}}
-{{/each}}
-{{/if}}
-{{/if}}
-
-我会把前面4个阶段的所有数据 + 你的校准意见整合起来。
-```
-
-### 技能调用序列
-
-```
-Step 5.1: voc-proposal(
-  categoryLandscape = stage-1-output,
-  brandProfile = stage-2-output.brandProfile,
-  competitorData = stage-2-output.{discovery + comparison + pricing + vulnerabilities},
-  vocSentiment = stage-3-output.{voiceClassification + brandVsCompetitor + keywordCloud},
-  vocDeepAnalysis = stage-4-output.{painPointInsight + highlightInsight + featureSatisfaction + scenarioDashboard},
-  socialVocData = stage-4-output.{socialTrend + competitorBsr} || null,
-  userPersona = stage-4-output.userPersona,
-  brandName = brand-context.brandName,
-  categoryKeyword = brand-context.categoryKeywords[0],
-  calibrationNotes = memory/calibration-notes.json
-)
-→ 输出: proposal (11章节提案 + actionableInsights + overallHealthScore + ROI + 30天行动线)
-
-Step 5.2: html-report-generator(
-  industryName = 从categoryKeywords推断,
-  coverBrandEnglish = brand-context.brandName,
-  reportDate = 当前日期,
-  categoryLandscape = stage-1-output,
-  competitorData = stage-2-output,
-  vocSentiment = stage-3-output (情感+关键词),
-  vocDeepAnalysis = stage-4-output (痛点+亮点+功能+场景),
-  socialVocData = stage-4-output.{socialTrend + competitorBsr} || null,
-  userPersona = stage-4-output.userPersona,
-  actionableInsights = step5.1 output.actionableInsights,
-  overallHealthScore = step5.1 output.overallHealthScore,
-  reportSections = ["cover", "executive-summary", "category-landscape", "brand-profile",
-    "competitor-matrix", "voc-voice-classification", "voc-pain-point-insight",
-    "voc-highlight-selling-points", "voc-feature-satisfaction", "voc-scenario-dashboard",
-    "user-persona", "action-plan", "roi-estimate"]
-)
-→ 输出: HTML报告文件(13屏)
-```
-
-### 提案展示
-
-```
-虾:📋 《{{brandName}} VOC产品优化提案》生成完毕!
-
-━━━━━━━━━━━━━━━━━━━━
-🎯 综合健康度评分:{{overallHealthScore.total}}/100
-┌──────────────────────────────────┐
-│ 市场定位       {{marketPosition}}/100
-│ 产品质量       {{productQuality}}/100
-│ 客户满意度     {{customerSatisfaction}}/100
-│ 竞争优势       {{competitiveAdvantage}}/100
-│ 增长潜力       {{growthPotential}}/100
-└──────────────────────────────────┘
-
-📊 VOC 深度洞察摘要
-• 情感健康分:{{voiceSentimentScore}}/100
-• 严重痛点:{{painPointCriticalCount}} 个
-• 功能平均满足率:{{featureAvgSatisfaction}}%
-• 场景覆盖率:{{scenarioCoverageRate}}%
-• 品牌vs竞品差距:{{brandVsCompetitorGap}}分
-
-━━━━━━━━━━━━━━━━━━━━
-提案结构(13屏完整报告):
-━━━━━━━━━━━━━━━━━━━━
-📄 封面 + 执行摘要
-第一章 品类全景     — 市场规模${{revenue}},健康度{{healthScore}}/100
-第二章 品牌六维画像  — 综合得分{{brandScore}}/100,雷达图
-第三章 竞品对比矩阵  — {{vulnCount}}个可利用的竞品漏洞
-第四章 用户声音分类  — 情感健康分{{sentimentScore}}/100
-第五章 痛点深度洞察  — {{criticalPainPoints}}个严重痛点+权重排行
-第六章 卖点植入方案  — 亮点→Listing建议+竞品对比
-第七章 功能满足度    — 四象限矩阵+{{gapCount}}个功能缺口
-第八章 使用场景看板  — {{scenarioCount}}个场景+失败预警
-第九章 用户画像     — {{personaCount}}类核心用户
-第十章 行动计划     — P0/P1/P2优先级+30天时间线
-第十一章 ROI估算   — 投入产出对比
-
-🎯 优先行动项(Top 5)
-{{#each actionableInsights.topActions slice=5}}
-{{priority}} {{suggestion}}
-   场景:{{scenario}} | 功能:{{feature}}
-   预期影响:{{expectedImpact}} | 投入:{{investmentLevel}}
-   见效周期:{{timeToResult}}
-{{/each}}
-
-⚡ 快速见效(零/低投入)
-{{#each quickWins}}
-• {{this}}
-{{/each}}
-
-� 战略投资(中长期高回报)
-{{#each strategicInvestments}}
-• {{this}}
-{{/each}}
-
-�� ROI估算摘要:
-• Listing优化:$0投入 → 转化率提升15-25%(即时)
-• PPC广告:$30-50/日 → ACOS 20-30%(2-3周回本)
-• 产品迭代:$5k-10k → 评分提升+差评降低(60-90天)
-
-HTML报告已生成(13屏),可在浏览器打开直接演示。
-```
-
-### 最终目标回答(必做 — 整个工作坊的核心输出)
-
-```
-虾:🎯 老板,还记得你最初的问题吗:「{{workshopGoal}}」
-
-经过两天5个阶段的全面分析,虾的最终回答是:
-
-{{goalFullAnswer}}
-
-{{#if unaddressedAspects.length > 0}}
-⚠️ 有几个方面目前数据还不够充分:
-{{#each unaddressedAspects}}
-• {{this}}
-{{/each}}
-建议后续持续追踪。
-{{/if}}
-
-{{#if crossStageContradictions.length > 0}}
-🔍 分析过程中发现的重要矛盾(已在报告中标注):
-{{#each crossStageContradictions}}
-• {{this}}
-{{/each}}
-{{/if}}
-```
-
-### 最终校准
-
-```
-虾:老板,这是两天分析的最终成果。请你整体审阅一下:
-
-1️⃣ 我对你问题「{{workshopGoal}}」的回答到位吗?
-2️⃣ 11章节的内容和结论有没有明显偏差?
-3️⃣ 30天行动计划的优先级排序合理吗?
-4️⃣ 有没有想补充的战略方向?
-
-你的反馈我会记录下来,作为提案的"老板批注"附在最后。
-```
-
-### 工作坊结束
-
-```
-虾:🎉 恭喜!VOC虾工作坊全部完成!
-
-📦 你的完整交付物清单:
-━━━━━━━━━━━━━━━━━━━━
-
-📊 阶段一:品类全景
-✅ 《品类健康度评分》(四维雷达图)
-✅ 《品类认知校准表》(含竞争格局分析)
-✅ 《价格带分布 + 空白机会》
-✅ 《搜索趋势报告》
-
-🏷️ 阶段二:品牌+竞品
-✅ 《品牌六维画像》(定价/评分/流量/销售/增长/口碑雷达图)
-✅ 《单品深度诊断》(主力ASIN)
-✅ 《竞品档案卡》× {{n}}个 + 竞品漏洞分析
-✅ 《竞品六维对比矩阵》
-✅ 《定价策略分析》(价格带+毛利估算)
-
-💬 阶段三:评论采集+VOC初体验(Day1晚)
-✅ � 结构化评论语料库({{totalReviews}}条,含品牌+竞品)
-✅ ��《情感分析报告》— 情感健康分+正/中/负分布
-✅ 🔤《关键词情感地图》(正向/负向/中性/趋势)
-✅ 🏷️《品牌vs竞品情感对比》
-
-📊 阶段四:深度VOC+社媒+用户画像(Day2上午)
-✅ ⚡《痛点深度洞察》— 显性+隐性+权重排行+关联分析
-✅ ✨《卖点植入方案》— 亮点→Listing标题/Bullet/A+建议
-✅ 📈《功能满足度看板》— 四象限矩阵+功能缺口
-✅ 🎯《使用场景看板》— 高频/失败/新兴场景
-✅ 《社媒趋势报告》(TikTok/Instagram/抖音)
-✅ 📊《竞品BSR追踪》— 增长路径+风险预警
-✅ 👤《用户画像手册》({{personaCount}}类画像+购买行为)
-
-📋 阶段五:最终报告
-✅ 《VOC产品优化提案》(11章节)
-✅ 🎯 综合健康度评分(五维{{totalScore}}/100)
-✅ 优先行动项(P0/P1/P2)+ 快速见效+战略投资
-✅ 30天行动时间线 + ROI估算
-✅ 《HTML可演示报告》(13屏完整报告)
-
-━━━━━━━━━━━━━━━━━━━━
-所有数据和报告都已保存在我的记忆中。
-以后你随时可以叫我重新分析、更新数据、或者换一个品类再跑一遍。
+## 配套文档
 
-虾会一直在这里,有问题随时叫我!🦐
-```
+| 文件 | 用途 |
+|------|------|
+| `workspace/synthesis-prompts.md` | 数据合成 Prompt 模板 |
+| `workspace/voc-report-schema-spec.md` | v2 schema 字段级规范 |
+| `workspace/product-analysis-playbook.md` | 产品分析模式(独立于工作坊) |
 
 ---
 
-## 进度恢复协议
-
-当用户说"继续"时,Agent 执行以下逻辑:
+## 文件清单
 
 ```
-1. 读取 memory/workshop-progress.json
-2. 找到最后一个 status != "completed" 的 session
-3. 读取对应的 brand-context.json 和前置 stage output
-4. 展示进度摘要:
-
-虾:欢迎回来老板!上次我们完成到了阶段{{N}}。
-当前进度:
-✅ 阶段一:品类全景 — 已完成
-✅ 阶段二:品牌+竞品 — 已完成
-⏳ 阶段三:评论采集+VOC初体验 — 进行中
-⬜ 阶段四:深度VOC+社媒+画像 — 待开始
-⬜ 阶段五:最终报告 — 待开始
-
-要继续阶段三吗?
+workspace/
+├── workshop-voc-playbook.md          ← 你正在读的文件(入口路由)
+├── workshop-global-rules.md          ← 全局规则(每次必读)
+├── workshop-session-0-intake.md      ← Session 0: 品牌建档
+├── workshop-session-1-category.md    ← Session 1: 品类全景
+├── workshop-session-2-brand.md       ← Session 2: 品牌画像+竞品
+├── workshop-session-3-voc.md         ← Session 3: 评论采集+VOC
+├── workshop-session-4-deep.md        ← Session 4: 深度VOC+社媒+画像
+├── workshop-session-5-report.md      ← Session 5: 最终报告
+├── synthesis-prompts.md              ← 数据合成Prompt模板
+├── voc-report-schema-spec.md         ← v2 schema规范
+└── memory/
+    ├── workshop-progress.json        ← 进度追踪(含 _playbookFiles 映射)
+    ├── brand-context.json            ← 品牌档案
+    ├── calibration-notes.json        ← 校准记录
+    └── stage-{1~5}-output.json       ← 各阶段输出
 ```
 
----
-
-## 多客户支持
-
-当需要为不同客户运行工作坊时:
-- 在 memory/ 下建子目录:`memory/clients/{{brandName}}/`
-- 每个客户独立的 brand-context.json 和 stage outputs
-- workshop-progress.json 支持 `clientId` 字段区分
-
----
-
-## 附录:技能调用汇总
-
-| 阶段 | 调用技能 | 预计耗时 |
-|------|---------|---------|
-| 建档 | brand-context-builder | 对话采集 |
-| Session 1 | category-landscape (含 product-search ×2-3, asin-sales-volume ×100, keyword-search ×5-10, keyword-search-trend ×5, category-tree ×1) | 3-5min |
-| Session 2 | brand-profile, competitor-discovery, product-deep-analysis, competitor-product-comparison, competitor-pricing-analysis | 5-8min |
-| Session 3 | review-batch-collection, review-sentiment-analysis, review-keyword-cloud | 3-5min |
-| Session 4 | review-pain-point-extraction, review-highlight-extraction, tiktok-category-voc, tiktok-brand-voc, instagram-brand-voc, douyin-general-search, social-trend-analysis, competitor-bsr-tracking, user-persona | 8-10min |
-| Session 5 | voc-proposal, html-report-generator | 3-5min |
+**现在请执行 Step 1:读取 `workspace/workshop-global-rules.md`。**