Skip to content
Back to skills

Dd Industry Analysis

ASecurity

行业定位与多维度行业分析(市场规模、竞争格局、政策、供应链等)+ 风险要点,生成行业专项报告。

  • 417 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 8, 2026
researchpythongobash

Works with

  • mcp

Security analysis

A100/100

Pro scans all 20 files and shows the line behind each finding

Scanned November 8, 2026

npx -y skills add infometa/workbuddyskills --skill dd-industry-analysis --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dd Industry Analysis?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Dd Industry Analysis
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/infometa-dd-industry-analysis/badge)](https://www.skillsdirectory.com/skills/infometa-dd-industry-analysis)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.md26.4 KB
  • analysis-logic.md3.8 KB
  • integration.md9.8 KB
  • knowledge/methodology.md2.8 KB
  • knowledge/thresholds.md2.7 KB
  • output-spec.md3 KB
  • recall/doc-types.md2.1 KB
  • risk-schema.md4.6 KB
  • scripts/calculate.py4.6 KB
  • scripts/fetch_external.py14.6 KB
  • scripts/verify.py3.8 KB
  • templates/e0.html1.3 KB
  • templates/e1.html550 B
  • templates/e2.html403 B
  • templates/e3.html374 B
  • templates/e4.html465 B
  • templates/e5.html562 B
  • templates/e6.html194 B
  • templates/e7.html242 B
  • templates/e8.html384 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in research →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.