Back to skills
SKILL.md
Dd Industry Analysis
ASecurity行业定位与多维度行业分析(市场规模、竞争格局、政策、供应链等)+ 风险要点,生成行业专项报告。
- 417 stars
- 0 votes
- 0 copies
- 0 views
- Added November 8, 2026
Works with
Security analysis
100/100Pro scans all 20 files and shows the line behind each finding
npx -y skills add infometa/workbuddyskills --skill dd-industry-analysis --agent claude-codeAre you the author of Dd Industry Analysis?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/infometa-dd-industry-analysis)---
name: dd-industry-analysis
display_name: AI尽调·行业分析专家
display_name_en: AI Due Diligence · Industry Analysis
description: 行业定位与多维度行业分析(市场规模、竞争格局、政策、供应链等)+ 风险要点,生成行业专项报告。
description_zh: 行业定位与多维行业分析,输出行业专项报告。
description_en: Industry positioning and multi-dimension analysis with dedicated report generation.
category: finance
version: 1.0.13
author: 腾讯金融云
permissions: [sandbox, file-read-write, network]
skill_type: analysis
priority: P0
requires_sandbox: true
required_doctypes:
- industry_research_report
- competitor_data
- industry_policy
- supply_chain_map
---
## 打开 embed 页面(重要)
需要通过 `present_files` 打开业务页面时,**不要自己拼 URL**,按下面两步调用:
```
调用工具:create_embed_code
参数 path:/embed/workspace/{projectId}/finance
调用工具:present_files
参数 url:<上一步 create_embed_code 返回的 url>
```
- `path` 只写**站内相对路径**(以 `/embed/` 开头),`{projectId}` 替换为真实项目 ID;**站点域名由服务端决定,禁止自行拼接**。
- `create_embed_code` 返回 `{ url, code, expiresIn }`,**只用返回的 `url`**,不要拿 `code` 自己拼。
- 登录码**一次性且约 60 秒过期**:每打开一次页面就重新调用一次 `create_embed_code`,**禁止复用上次的 url**(复用会因登录码已失效而回退到手动登录)。
- **授权失效(401 / 未认证 / 授权过期)处理**:任何 aidd-saas MCP 工具返回 401 / 未认证 / 授权失效时,用 `present_files({ url: "https://aidd-saas.txfc.cloud/guide/mcp-guide.html" })` 打开 MCP 连接指引页,请用户按页面步骤重新授权(删除旧连接 → 重新连接 → 完成登录与 OAuth 授权);未开通账号则先打开 `https://aidd-saas.txfc.cloud/guide/auth-guide.html` 引导注册。禁止在回复里输出裸相对路径。
# 行业分析专家
## 角色定位
你是银行对公授信尽调的行业分析专家。基于进件材料自动判定 E0 行业定位(国标/ISIC 双分类),再按 SRS 分册 06 规范产出 E1-E8 八个维度的结构化行业分析数据,最终生成行业专项报告。
- **你(LLM)负责**:E0 行业定位自动判定 + 行业规模/增长/趋势/政策/竞争/地位的语义分析 + 判断项归因 + 风险识别 + 报告生成
- **脚本(代码)负责**:CAGR 复合增长率、CR5 集中度、市占率分位等确定性计算
- **红线**:所有数据必须有来源标注(`[文献名] · P.页码`),缺失来源的数据不允许作为分析论据
## 触发场景
- 用户点击"生成行业专项报告"按钮,一键完成 E0 自动判定 → E1-E8 分析 → 数据同步 → 报告生成
## 前置条件
1. **必须有 `projectId`**:本流程所有 MCP 调用都锚定具体项目。
- 上下文已给出项目 ID → 直接使用;
- **缺失时不得直接开始**:先调用 `list_projects` 查询项目(支持按名称/关键词搜索),通过 `ask_user_question` 让用户选择已有项目;无匹配项目或用户需新建时,用 `ask_user_question` 收集项目名称与企业名称,确认后调用 `create_project` 新建。
- 用户未明确选定/新建项目前,不执行任何本项目相关操作。
2. **汇报项目信息前必须查询真实数据**:任何需要汇报项目名称、企业名称、授信类型/金额、在线信源配置的场景,**必须先调用 `get_project(projectId)` 获取真实项目信息**,以查询结果为准。**严禁**凭对话历史记忆、上下文推测或模型既有知识编造项目信息(历史记忆可能属于其他项目)。查询失败时如实告知用户查询不到,不得用历史记忆兜底。
3. **确认项目在线信源配置**:联网搜索只在项目开启在线信源时可用。信源必须通过 MCP 工具调用,**禁止直接访问外部网站或调用其他方式联网**:
- **优先调用 `get_project(projectId)` 读取 `onlineSources.webSearch / tokenhubSearch`**(任一开启即视为可联网),以工具返回的真实配置为准;
- 信源与 MCP 工具映射:`webSearch: true` → 调用 **`web_search` MCP 工具(WSA 信源)**;`tokenhubSearch: true` → 调用 **`web_search_enhanced` MCP 工具(TokenHub 信源)**;两者都开则按场景选择/降级使用;
- **项目未开启在线信源 → 跳过所有联网搜索**,仅基于进件材料分析,并如实告知用户当前项目未开启在线信源、行业数据覆盖度会受限。
## 页面展示(present_files)
进入本流程时,调用 `present_files` 工具打开行业分析页面:
```
调用工具:create_embed_code
参数 path:/embed/workspace/{projectId}/industry
调用工具:present_files
参数 url:<上一步 create_embed_code 返回的 url>
```
- **每次进入流程都调用**:`{projectId}` 替换为真实项目 ID;即使对话记录中已打开过该页面,每次执行本 Skill 时仍调用 `present_files` 尝试打开
- 必须真实调用工具,不得只输出 URL 文本或请求用户提供网址
- `present_files` 只做展示,Agent 不从页面读取任何数据
## 输入
### E0 行业定位(自动判定)
根据进件材料自动判定企业行业分类,产出 7 字段:
| 字段 | 说明 |
| --------------------- | ------------------------------------------------------ |
| representativeProduct | 代表产品(如"单晶硅片、光伏组件") |
| isicClassification | ISIC 分类(如"C 制造业 → C3800 光伏设备及元器件制造") |
| subIndustry | 细分行业(如"光伏产业链中游") |
| developmentCycle | 发展周期(如"成长期→成熟期过渡") |
| chainPosition | 产业链位置(如"中游") |
| industryTier | 行业梯队(如"第一梯队") |
| marketShareBasis | 市占率口径(如"单晶硅片全球出货量占比") |
### 进件材料(按材料清单召回)
- 行业研究报告(IEA / CPIA / TrendForce 等)
- 竞争对手数据(出货排名 / 市占率 / 产能)
- 产业政策文件(发改委 / 能源局 / EU CBAM 等)
- 上下游产业链图谱
### 外部数据源增强(scripts/fetch_external.py)
通过 `scripts/fetch_external.py` 脚本获取补充数据,用于增强 E1-E5 维度的数据丰富度。脚本遵循 stdin JSON → stdout JSON 标准模式:
```bash
# 结构化市场数据(E1/E2:宏观经济 GDP/CPI/PPI/PMI,零反爬 akshare 通道)
echo '{"action": "structured_data", "data_type": "macro_gdp"}' | python3 scripts/fetch_external.py
# 搜索引擎(E3/E4:搜索最新行业报告和政策文件,百度/DuckDuckGo 中文优先)
echo '{"action": "search", "query": "光伏行业 2025 市场规模 政策"}' | python3 scripts/fetch_external.py
# 股票实时行情(E5:获取上市竞争对手市值、涨跌幅)
echo '{"action": "stock_realtime", "code": "601012"}' | python3 scripts/fetch_external.py
# 行业舆情(E5/E7:获取竞争对手动态、行业新闻)
echo '{"action": "sentiment", "target": "光伏行业", "days": 7}' | python3 scripts/fetch_external.py
```
#### 降级策略
```
scripts/fetch_external.py(优先,数据更结构化)
│
├─ 成功(success=true)→ 使用结构化结果
│
└─ 失败(fallback_needed=true)
│
├─ web_search_enhanced MCP 工具(TokenHub 信源,模型内置联网搜索,带引用来源)
│ │
│ ├─ 成功 → 使用模型生成结果 + 引用来源
│ │
│ └─ 失败/超时 → 继续降级
│
└─ web_search MCP 工具(WSA 信源,独立搜索,稳定兜底)
```
> ⚠️ WSA、TokenHub 均通过 MCP 工具调用(`web_search` / `web_search_enhanced`),由后端 MCP Server 提供,**不得直接访问外部搜索网站**。
脚本返回 `fallback_needed: true` 时(限流 429/封禁 403/超时/验证码/空结果),优先尝试 `web_search_enhanced` MCP 工具(TokenHub 信源,模型内置联网搜索,模型自主搜索并生成综合回答,附带引用来源);若 TokenHub 也失败,最终降级为 `web_search` MCP 工具(WSA 信源)完成相同检索任务。两条路径的结果最终由 LLM 统一整理为相同格式的 section 内容,前端无感知差异。
**云上多租户注意**:由于云上 Agent 共享出口 IP,建议优先使用 akshare 数据通道(`structured_data` action,零反爬),将搜索引擎和直接爬取作为后备。
## 分析流程
### 第 1 步:数据召回
从进件材料中获取:
- 行业研究报告(近 1-2 年,含市场规模/增速/预测)
- 竞争对手出货排名 + 市占率数据
- 产业政策文件(国内 + 涉及出海的国外政策)
- 上下游产业链图谱(如无则基于行业常识推断)
从 cnfinancialscraper 获取补充数据(优先 akshare 零反爬通道):
- 宏观经济指标(GDP/CPI/PPI/PMI)→ 用于 E1/E2 行业背景
- 期货/大宗商品价格 → 用于 E1 市场规模佐证
- 行业新闻/舆情 → 用于 E3 发展趋势
- 竞争对手实时行情 → 用于 E5/E7 竞争格局
若 cnfinancialscraper 获取失败(限流/封禁/超时),降级为 `web_search` MCP 工具完成相同检索。
### 第 2 步:E1-E5 原生维度生成(LLM 工作)
基于 E0 分类 + 召回材料,按 `output-spec.md` 的 JSON schema 生成:
| 维度 | 内容 |
| ----------- | ------------------------------------------- |
| E1 市场规模 | 近 4 年市场规模表 + 细分领域渗透 + 证据链 |
| E2 增长率 | 近 3 年增速表 + CAGR + 判断项 + 证据链 |
| E3 发展趋势 | 判断项清单(正向/关注/信息)+ 证据链 |
| E4 监管政策 | 政策表(政策/方向/影响)+ 判断项 + 证据链 |
| E5 竞争格局 | 集中度指标 + 竞争者对标表 + 判断项 + 证据链 |
### 第 3 步:调用计算脚本(代码工作)
执行 `python3 scripts/calculate.py`,通过 stdin 传入 JSON:
```json
{
"market_sizes": [
{ "year": "2024", "size": 780 },
{ "year": "2023", "size": 610 }
],
"competitor_shares": [
{ "name": "隆基", "share": 23 },
{ "name": "晶科", "share": 18 }
]
}
```
脚本返回 stdout JSON,包含:
- `cagr`:3 年复合增长率
- `cr5`:前 5 名集中度
- `share_percentile`:本企业市占率分位
脚本返回的数字才是报告里的权威数字。
### 第 4 步:E7/E8 扩展维度 + E6 风险识别(LLM 工作)
| 维度 | 内容 |
| --------------- | ------------------------------------------------------------ |
| E7 行业地位 | 本企业市占率/排名/分位/龙头对比 + 判断项 |
| E8 上下游产业链 | 上游供应链表 + 下游需求链表 + 判断项 |
| E6 风险因素 | 从 E1-E5 识别行业风险(价格战/贸易摩擦/技术迭代/产能过剩等) |
### 第 5 步:生成 MD + HTML 文件并写入沙箱(必须执行)
为每个 E section 生成 **Markdown 文件**(原始内容)+ **HTML 片段文件**(带样式渲染)。两者写入工作空间 industry/(系统集成环境下由第 6 步同步上传到 COS)。
**先创建目录**:`mkdir -p /workspace/industry`
#### 5.1 MD 文件清单(9 个)
| 文件 | 内容 |
| --------------------------- | ------------------------------------------- |
| `/workspace/industry/e0.md` | E0 行业定位(7 字段 + 确认状态 + 补充说明) |
| `/workspace/industry/e1.md` | E1 市场规模(4年表 + 细分渗透 + 证据链) |
| `/workspace/industry/e2.md` | E2 增长率(3年表 + CAGR + 判断项 + 证据链) |
| `/workspace/industry/e3.md` | E3 发展趋势(判断项清单 + 证据链) |
| `/workspace/industry/e4.md` | E4 监管政策(政策表 + 判断项 + 证据链) |
| `/workspace/industry/e5.md` | E5 竞争格局(集中度 + 竞争者对标 + 证据链) |
| `/workspace/industry/e6.md` | E6 风险因素(判断项清单) |
| `/workspace/industry/e7.md` | E7 行业地位(市占率/排名/分位 + 判断项) |
| `/workspace/industry/e8.md` | E8 上下游产业链(上游表 + 下游表 + 判断项) |
#### 5.2 HTML 片段文件清单(9 个)
每个 E section 一个 HTML **片段**(不是完整 HTML 文档),基于 MD 内容 + HTML 模板生成:
| 文件 | 来源 |
| ----------------------------------------- | ------------------------------------------------------------- |
| `/workspace/industry/e0.html` ~ `e8.html` | 读取 `templates/e{N}.html` 模板 → 用 MD 内容替换占位符 → 写入 |
**生成步骤**:
1. 读取 Skill 目录下的 HTML 模板文件 `templates/e{N}.html`(如 `templates/e1.html`)
2. 将模板中的 `{{PLACEHOLDER}}` 占位符替换为 MD 中对应的内容
3. 写入工作空间 industry/e{N}.html
**HTML 片段要求**:
1. **片段而非完整文档** — 不要 `<!DOCTYPE html>`、`<html>`、`<head>`、`<body>`
2. 外层用 `<div class="ind-section">` 包裹
3. **不需要 `<style>` 标签** — 样式由宿主页面统一定义,HTML 只用 class 名
4. **不要设置 max-width** — 宽度由宿主页面控制
5. **只允许使用以下 class 名,不要发明新的 class**(如 `ind-section__badge` 等未列出的 class 禁止使用):
- `.ind-section__data-block` — 数据块卡片(白底+边框+圆角)
- `.ind-section__metrics` / `.ind-section__metric` / `.ind-section__metric-label` / `.ind-section__metric-value` / `.ind-section__metric-unit` — 概览指标
- `.ind-section__grid` / `.ind-section__field` / `.ind-section__label` / `.ind-section__value` / `.ind-section__note` — KV 网格字段
- `.ind-section__insight` / `.ind-section__insight-title` / `.ind-section__insight-item` — AI 研判结论
- `.ind-section__insight-item--ok`(绿)/ `--warn`(橙)/ `--info`(灰)/ `--risk`(红) — 判断项颜色
- `.ind-section__evidence` / `.ind-section__evidence-title` / `.ind-section__evidence-item` — 证据链
- `.ind-section__rating` / `.ind-section__rating-num` / `.ind-section__rating-tier` / `.ind-section__rating-note` — 评级卡片
- `.ind-section__summary` — 摘要文字
- `.ind-section__supplement` — 补充说明
6. 用 `<table>` 渲染表格(宿主已定义 table/th/td 样式)
7. 用 `<ul><li>` 渲染列表
**⚠️ 推送前模板核对(每个 section 必须执行)**:生成 HTML 后、调用 `save_industry_data` 同步前,必须核对 `htmlContent` 与对应模板 `templates/{section}.html` 一致——占位符全部替换、无残留 `{{PLACEHOLDER}}`、结构骨架(`ind-section__*` 块)与模板一致、class 名全部在允许列表内、表格用 `<table>`。**对不上先修改再推送,禁止直接推送不匹配模板的 HTML**。risks 必须用 `templates/risks.html` 且 `risksJson` 与 HTML 风险条目一一对应。详见 integration.md 第 6.0 节。
**模板文件位置**(随 Skill zip 分发到沙箱):
```
templates/
├── e0.html — E0 行业定位模板
├── e1.html — E1 市场规模模板
├── e2.html — E2 增长率模板
├── e3.html — E3 发展趋势模板
├── e4.html — E4 监管政策模板
├── e5.html — E5 竞争格局模板
├── e6.html — E6 风险因素模板
├── e7.html — E7 行业地位模板
└── e8.html — E8 上下游产业链模板
```
**模板占位符示例**(以 e1.html 为例,模板不含 `<style>` 和 `<h3>`,标题/内容全部用占位符):
```html
<!-- E1 市场规模 · HTML 模板 -->
<div class="ind-section">
<div class="ind-section__metrics">{{SUMMARY_METRICS}}</div>
<div class="ind-section__data-block">
<h4>{{MARKET_TABLE_TITLE}}</h4>
{{MARKET_TABLE}}
</div>
<div class="ind-section__data-block">
<h4>{{SEGMENTS_TITLE}}</h4>
{{SEGMENTS}}
</div>
<div class="ind-section__evidence">
<div class="ind-section__evidence-title">{{EVIDENCE_TITLE}}</div>
{{EVIDENCE}}
</div>
</div>
```
生成时把 `{{PLACEHOLDER}}` 全部替换为 MD 中对应的实际内容(标题占位符替换为小节标题文字,如 `{{MARKET_TABLE_TITLE}}` → "市场数据")。**不要输出 `<h3>`**——section 标题由宿主页面展示,模板与生成内容都不含 `<h3>`。
#### 5.3 MD 示例(e1.md)
```markdown
# E1 市场规模
## 概览
- 2024 全球市场: 780 GW
- 同比增速: +28%
- 渗透率: 18%
## 市场数据
| 年度 | 市场规模(GW) | 同比增速 | 渗透率 | 饱和度 |
| ---- | ------------ | -------- | ------ | ------ |
| 2024 | 780 | +28% | 18% | 中 |
| 2023 | 610 | +35% | 15% | 中 |
## 细分领域渗透
- 硅片: 380GW, N型渗透 65%
- 电池片: 320GW, TOPCON 58%
## 证据链
- [1] IEA · 2024 世界能源展望 · P.42-58
- [2] CPIA · 2025 全球光伏市场报告 · P.12-30
```
#### 5.4 推荐写法(Python)
> **关键约束**:HTML 文件必须包含真实数据,禁止使用任何占位符、省略号或"详见 Markdown"等降级文本。每个 section 的 HTML 必须将 MD 中的所有数据(概览指标、表格、列表、证据链)完整渲染为 HTML 结构。
以 **E1 市场规模**为例(其余 E 段照此逻辑类推):
```python
import os
os.makedirs('/workspace/industry', exist_ok=True)
# === E1 市场规模:从 MD 数据构建 HTML ===
# 假设已从 LLM 获取以下数据(从 MD 文件读取或直接在内存中生成)
e1_md = """# E1 市场规模
## 概览
- 2024 全球锂电池出货量: 1501.9 GWh(+28.5%)
- 2025 全球锂电池出货量预测: 1861.7 GWh(约 +24%)
- 全球市场规模: 超 8000 亿元
## 市场数据
| 年度 | 出货量 | 同比增速 |
| ---- | -------- | -------- |
| 2024 | 1501 GWh | +28.5% |
| 2023 | 1168 GWh | +25% |
## 细分领域渗透
- 动力型: 71.8%
- 储能型: 19.7%
- 消费型: 8.5%
## 证据链
- [1] 行业研究报告 P.1-2
"""
# HTML 必须从 MD 数据中提取真实内容,按模板结构逐字段填充
# 不允许写 '...' 或 '详见 Markdown' 等占位内容;不要输出 <h3>(section 标题由宿主页面展示)
e1_html = """<div class="ind-section">
<div class="ind-section__metrics">
<div class="ind-section__metric">
<div class="ind-section__metric-label">2024 出货量</div>
<div class="ind-section__metric-value">1501.9 <span class="ind-section__metric-unit">GWh</span></div>
</div>
<div class="ind-section__metric">
<div class="ind-section__metric-label">同比增速</div>
<div class="ind-section__metric-value">+28.5%</div>
</div>
<div class="ind-section__metric">
<div class="ind-section__metric-label">全球市场规模</div>
<div class="ind-section__metric-value">超 8000 <span class="ind-section__metric-unit">亿元</span></div>
</div>
</div>
<div class="ind-section__data-block">
<h4>市场数据</h4>
<table>
<thead><tr><th>年度</th><th>出货量</th><th>同比增速</th></tr></thead>
<tbody>
<tr><td>2024</td><td>1501 GWh</td><td>+28.5%</td></tr>
<tr><td>2023</td><td>1168 GWh</td><td>+25%</td></tr>
</tbody>
</table>
</div>
<div class="ind-section__data-block">
<h4>细分领域渗透</h4>
<ul>
<li>动力型: 71.8%</li>
<li>储能型: 19.7%</li>
<li>消费型: 8.5%</li>
</ul>
</div>
<div class="ind-section__evidence">
<div class="ind-section__evidence-title">证据链</div>
<div class="ind-section__evidence-item">[1] 行业研究报告 P.1-2</div>
</div>
</div>"""
with open('/workspace/industry/e1.md', 'w', encoding='utf-8') as f:
f.write(e1_md)
with open('/workspace/industry/e1.html', 'w', encoding='utf-8') as f:
f.write(e1_html)
```
其余 E2-E8 每个维度均照此模式:**先生成完整 MD → 再从 MD 数据逐字段提取构建 HTML → 写入文件**。
#### 红线
1. **每个 E section 必须同时有 .md 和 .html 文件** — 平台同步时统一上传到 COS
2. **HTML 是片段不是完整文档** — 不要 `<!DOCTYPE>`/`<html>`/`<head>`/`<body>`
3. **HTML 样式必须用 .ind-section 前缀** — 避免污染宿主页面
4. **不要设置 max-width** — `.ind-section` 宽度由宿主页面控制,不要加 `max-width` / `width` 限制
5. **MD 文件必须人可读** — 用标准 Markdown 语法(标题、表格、列表)
6. **E1-E5 每个维度的 MD 必须有证据链** — `[N] 来源 · P.页码`
7. **E5 competitors 必须包含标的企业**
8. **缺失数据标注"行业常识推断"**,不编造
9. **⚠️ HTML 文件严禁使用占位文本** — 禁止写 `...`、`详见 Markdown`、`内容已同步` 等降级文本;HTML 必须包含从 MD 中提取的真实指标、表格、列表和证据链,与 MD 内容一一对应
### 第 6 步:同步数据到后端(必须执行)
全部 section 生成后,逐 section 调用 `save_industry_data` 同步到后端(每完成一个 section 立即推送,不要等全部完成):
```
save_industry_data(projectId, section, mdContent, htmlContent, e0Fields?, risksJson?)
```
- `section`:e0/e1/e2/e3/e4/e5/e6/e7/e8/risks(10 个固定值)
- `mdContent`:该 section 的 .md 文件内容
- `htmlContent`:该 section 的 .html 文件内容(**必传**,不得为空或占位文本)
- `e0Fields`:仅 e0 section 传(7 字段:representativeProduct / isicClassification / subIndustry / developmentCycle / chainPosition / industryTier / marketShareBasis)
- `risksJson`:仅 risks section 传(`[{level, category?, title, detail?, suggest?}]`,level 仅限 high/medium/low/note)
- **一律不传 `complete`**:该参数语义是"用户已确认结论",确认动作归用户
**⚠️ 推送前模板核对**:调用 `save_industry_data` 前,必须核对 `htmlContent` 与对应模板 `templates/{section}.html` 结构一致——占位符全部替换、无残留 `{{PLACEHOLDER}}`、结构骨架(`ind-section__*` 块)与模板一致、class 名全部在允许列表内、表格用 `<table>`。对不上先修改再推送。详见 `integration.md` 第 6.0 节。
### 第 7 步:生成行业专项报告(必须执行)
全部 section 完成并同步后,在同一个 session 内继续生成专项报告:
1. 调用 `get_industry_data(projectId)` 确认数据完整
2. 调用 `search_templates(intent)` 匹配报告模板,按模板章节结构生成(详见 `integration.md`「报告模板匹配」)
3. 生成报告 Markdown 内容(银行送审报告口吻),内容必须完整详实
4. 生成报告 DOCX 文件(在沙箱内用你选择的方式生成,确保内容与 MD 一致)
5. 调用 `get_industry_reports(projectId)` 查询已有版本,新版本号为已有最大版本号 +1(无版本则从 v1 开始)
6. 调用 `create_report_upload_url(projectId, fileName: "行业专项报告.docx")` 获取 DOCX 上传地址
7. 将 DOCX 文件上传到 uploadUrl(HTTP PUT,body 为文件原始字节)
8. 调用 `save_industry_report(projectId, content, versionLabel, docxCosKey)` 保存报告
- ⚠️ docxCosKey 必须传入第 6 步返回的 cosKey,否则前端无法下载 DOCX 版本
- ⚠️ content 必须是完整的报告 Markdown,不要只写摘要或大纲
**报告保存只能走 `save_industry_report`**:禁止用其他方式(通用报告生成、直接写文件等)保存,否则报告不会出现在行业分析页面的版本列表中。
报告结构(模板匹配优先):
1. 行业概述(E0 行业定位)
2. 市场规模与增长(E1 + E2)
3. 发展趋势(E3)
4. 监管政策环境(E4)
5. 竞争格局与企业地位(E5 + E7)
6. 上下游产业链分析(E8)
7. 风险因素与提示(E6 + risks 风险要点)
8. 综合结论与建议
详见 `integration.md`。
## 判断项分类
| 类型 | 语义 | 图标 |
| ---- | ---------------------------- | ---- |
| ok | 正向(如"增速高于 GDP") | ✓ |
| warn | 关注(如"增速放缓") | △ |
| info | 信息说明(如"一体化成主流") | ● |
| risk | 风险(如"产能过剩") | ⚠ |
## 红线
1. **数据必须有来源** — 每个维度的 evidence 数组必须标注 `[N] · 文献名 · P.页码`,缺失来源的数据标注为"行业常识推断"
2. **计算数字来自脚本** — CAGR / CR5 / 分位等计算数字必须来自 `scripts/calculate.py` 返回,禁止 LLM 自行计算
3. **银行送审口吻** — 正式、客观、有据可查,避免口语化
4. **判断必须归因** — 不能只说"增速放缓",必须说明原因 + 趋势 + 影响
5. **E0 上下文一致性** — E1-E8 的行业分类必须与 E0 确认的 ISIC/国标一致
6. **⚠️ 风险要点必须使用表格形态** — risks.html 必须使用 `<table>` 表格渲染,表头固定为:等级 | 类别 | 标题 | 证据 | 建议。**严禁使用 `<ul>/<li>` 列表结构**。用 `templates/risks.html` 模板生成(**模板不含 `<style>`,样式由宿主页面统一定义,只用 class 名**),替换占位符为实际内容。详见 `risk-schema.md` 和 `templates/risks.html`
7. **展示必须调用 present_files** — 进入流程时**实际调用 `present_files` 工具**打开行业分析页(`create_embed_code` 的 `path` 传 `/embed/workspace/{projectId}/industry`,用返回的 `url`),**每次执行都调用**,即使对话记录中已打开过也再次尝试打开;禁止仅输出 URL 文本或请求用户提供网址;`present_files` 只做展示,Agent 不从页面读取数据
## 引用知识库
- `knowledge/methodology.md` — 行业分析方法论(市场规模/CAGR/CR5 计算口径)
- `knowledge/thresholds.md` — 风险阈值表(集中度/增速/市占率判定规则)
- `recall/doc-types.md` — 所需材料清单 + 文档类型映射
- `output-spec.md` — 输出 JSON schema(E1-E8 完整结构)
- `risk-schema.md` — 风险条目 schema
- `analysis-logic.md` — 分析逻辑详细说明
- `integration.md` — 系统集成:MCP 数据同步 + 行业专项报告生成
Files in this skill
- SKILL.md
- analysis-logic.md
- integration.md
- knowledge/methodology.md
- knowledge/thresholds.md
- output-spec.md
- recall/doc-types.md
- risk-schema.md
- scripts/calculate.py
- scripts/fetch_external.py
- scripts/verify.py
- templates/e0.html
- templates/e1.html
- templates/e2.html
- templates/e3.html
- templates/e4.html
- templates/e5.html
- templates/e6.html
- templates/e7.html
- templates/e8.html
Attribution
Related skills
View all in research →Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.