| name | chain-analysis |
| description | 产业链研究第 4 段 · 三层价值量深挖。对 breakdown 选出的 Top 3 环节做深度分析。激活时机:chain-breakdown 输出 breakdown.md 后。 |
📋 SKILL 契约(6 字段 · agent 调用入口)
完整的 分析段 段契约。Claude/Codex 调用本段时,只需读这一节。
🎯 触发条件
- 前序段:chain-breakdown (chain-cycle) 已产
03_breakdown.md
📥 输入文件
- 必填:
03_breakdown.md
- 可选:
04_cycle.md
📤 输出文件
05_analysis.md(三层价值量 + 微笑曲线 + 利润转移)
🔑 必填字段
- 三层价值量:成本 / 利润 / 瓶颈
- 微笑曲线定位
- 利润转移趋势
- 周期影响传导链
✅ 验收清单
⚠️ 失败处理
- 价值量数据缺失 → 退化为定性分析
- 微笑曲线不适用(服务业等) → 改用波特五力
chain-analysis · 三层价值量深挖段
灵感:大刘《齐码.SKILL》vibe-design 段
产物:analysis.md(分析卡)
输入:breakdown.md + data.md
输出:可被 chain-report 直接消费的 analysis.md
🎯 这个 skill 干什么
对 breakdown 选出的 Top 3 环节,做三层价值量的纵深分析。
这是研究的"手术台" — 不是再列数据,而是解释数据背后的价值流。
🧠 核心方法论:三层价值量解剖法
每个 Top 3 环节都用三层解剖:
层 1 · 成本层
问题: 这个环节的 BOM 是怎么切分的? 哪些成本在降?
答法: BOM 表 + 成本曲线(过去 3 年) + 谁在挤压谁
反证: 如果成本不降反升,意味着什么?
层 2 · 利润层
问题: 利润主要从哪里挤出来? 谁在溢价?
答法: 毛利分布 + 溢价能力对比 + 议价权归属
反证: 如果利润在某环节消失,会传导到哪里?
层 3 · 瓶颈层
问题: 卡在哪? 谁掌握定价权?
答法: 关键技术/原料/设备的供给集中度 + 替代难度
反证: 如果瓶颈被突破,价值流如何重新分配?
📐 11 词 · 在深挖的体现
| 词 | 深挖要求 |
|---|
| navigate | 深挖下游应用的具体场景占比 |
| modal | 深挖风险点的传导路径 |
| confirm | 深挖增量的"已确认"程度 |
| drawer | 深挖隐藏成本对总成本的影响系数 |
| popover | 深挖差异化卖点的可量化指标 |
| bottomsheet | 深挖底部反转信号的历史可重复性 |
| toast | 深挖短期事件的具体时间线 |
| inline-expand | 深挖价值量分布的边缘变化 |
| inline-edit | 深挖成本结构变化的具体环节 |
| newtab | 深挖跨行业需求的真实体量 |
| download | 深挖数据来源的可信度差异 |
🛠 工作流(可执行版)
输入: breakdown.md(Top 3 环节) + data.md(原始数据)
↓
[Step 1: 每环节三层解剖]
对 Top 3 环节,逐个做 成本/利润/瓶颈 层
↓
[Step 2: 供需验证]
每个环节回答:
- 供给端: 当前产能 + 未来 2 年新增
- 需求端: 当前消费量 + 未来 2 年增量
- 缺口/富余: 多少
↓
[Step 3: 价值量定位]
标记每个环节在产业链中是:
- 价值集聚(利润吸盘)
- 价值传递(中转站)
- 价值衰减(赔本买卖)
↓
[Step 4: 跨环节传导]
假设一个外生冲击(政策/技术/原料),看传导链
↓
[Step 5: 输出 analysis.md]
Top 3 环节详写,加跨环节传导图
📄 analysis.md 输出模板
# [项目名] · 分析卡
> 分析环节:breakdown § Top 3
> 数据基线:data.md § 三层价值量
> 分析时间:YYYY-MM-DD
---
## 环节 1 · [环节名](金矿/壁垒/颠覆)
### 1.1 成本层
**BOM:**
| 子项 | 单价 | 单位 | 占比 | 3 年变化 | 来源 |
|---|---|---|---|---|---|
| | | | | | |
**成本曲线:**
- 2018: ...
- 2021: ...
- 2024: ...
- 趋势: 升 / 平 / 降
**谁在挤压:**
- 原材料涨价,挤压了中游 5% 毛利 — 数据来源 [年报-2024]
- 工艺改进,让上游单耗下降 15% — 数据来源 [招股书]
### 1.2 利润层(借鉴 invest:微笑曲线 + 议价权)
**毛利分布:**
- 上游 X%: [数据]
- 中游 Y%: [数据]
- 下游 Z%: [数据]
**溢价能力:**
- 龙头公司毛利 vs 行业均值:差 X 个百分点 — 谁溢出了什么
**微笑曲线定位(借鉴 invest):**
利润率
高│ 品牌/IP 设计/研发
│ ● ●
│ ● ●
│ ● ●
│ ● 制造 ●
低│ ●●●●●●●●●
└──────────────────────────
上游 中游 下游
- 本环节在微笑曲线的位置:**左高 / 中底 / 右高**
- 是否正在向其他环节**转移利润**(涨价/降价数据)
**议价权归属(借鉴 invest):**
- 谁有提价能力:**[公司名]**,原因(市占率/认证壁垒/技术稀缺)
- 谁在被动接受价格:**[公司名]**,原因(产能过剩/客户集中/可替代)
- 涨价能否传导:**能传导 X% 给下游 / 不能传导(被压价)**
**利润转移方向(借鉴 invest):**
- 利润正在从 [环节 A] → [环节 B] 转移
- 原因:技术壁垒上升 / 产能过剩 / 终端客户集中度变化
### 1.3 瓶颈层
**卡点:**
- 技术: [具体卡点]
- 原料: [具体卡点]
- 设备: [具体卡点]
**定价权归属:**
- [公司名] 掌握 [原料] 定价权,原因:市占率 X%
### 1.4 供需验证
- 供给: 当前产能 [X], 未来 2 年新增 [Y]
- 需求: 当前消费 [A], 未来 2 年增量 [B]
- 缺口/富余: [数字 + 方向]
### 1.5 价值量定位
- ⭐ 价值集聚 / 中转 / 衰减
- 一句话定位:[如"AI 算力紧缺让上游光模块成吸盘"]
### 1.6 反证条件
- 如果 [X 数据 / 事件] 出现,则这个环节判断失效
- 如果 [Y 事件] 发生,价值流可能反转
---
## 环节 2 · [环节名]
(同上结构)
---
## 环节 3 · [环节名]
(同上结构)
---
## 跨环节传导分析
### 假设 1: [原料涨价 10%]
- 传导路径:上游 → 中游 → 下游
- 各环节吸收比例: [数字]
- 终局: [涨价 5% 传导给下游]
### 假设 2: [技术突破替代 X]
- 传导路径: [哪些环节受冲击]
- 终局: [哪些环节消失/新环节出现]
## 分析决议
- 决定链: chain-report 段 — 进入研报骨架
- 重点章节:[哪个环节是报告主轴]
🚦 何时启用
- chain-breakdown 完成 breakdown.md 后,自动进入
- chain-report 上游缺失 analysis.md
- 用户要求"深挖某个环节"(可聚焦一个环节)
⚠️ 红线
- ❌ 不准"成本/利润/瓶颈"三层缺一层 — 漏一层就是分析不深
- ❌ 不准"供需验证"留空 — 没有供需支撑的判断就是空想
- ❌ 不准"反证条件"省 — 没反证的分析就是宣传文
- ❌ 不准"跨环节传导"想当然 — 必须用 data.md 的事实串
🔗 与上下游的契约
- 上游(chain-breakdown):breakdown.md 的"Top 3 环节" → 是分析对象
- 上游(chain-data):data.md 的所有事实 → 是分析依据
- 下游(chain-report):analysis.md 的"价值量定位" + "供需验证" → 是报告主轴
- 下游(chain-verify):analysis.md 的"反证条件" → 是核销清单的核心
🧰 推荐工具
def cost_layer_analysis(bom_df):
"""成本层:看 3 年成本曲线"""
return bom_df.groupby("subitem").agg(
avg_unit=("price", "mean"),
pct_change=("price", lambda s: (s.iloc[-1] - s.iloc[0]) / s.iloc[0])
)
def profit_layer_analysis(rev_df):
"""利润层:看毛利分布"""
return rev_df.groupby("segment").agg(
revenue=("rev", "sum"),
margin=("margin", "mean")
).assign(profit=lambda d: d["revenue"] * d["margin"])
def bottleneck_layer_analysis(supply_df):
"""瓶颈层:看供给集中度"""
return supply_df.groupby("supplier").agg(
market_share=("share", "sum")
).sort_values("market_share", ascending=False)