# Doubao Finance Sector

> 对板块/概念/主题/题材的短期市场热度做专业、可证伪的深度分。触发场景：当用户问某板块/概念/题材现在热不热、能不能追、为什么走强或降温、持续性如何、成交主要活跃在哪些方向、内部谁强谁弱，或要求生成对应飞书文档时触发。不适用场景：行业长期趋势、单股行情、公司基本面/财报、大盘/宏观等话题，不触发本skill。

- Skill: `ahang1598/doubao-finance-sector` (Agent Skill, multi-file: 36 files)
- Install (CLI): `npx skillmds@latest add ahang1598/doubao-finance-sector`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ahang1598/doubao-finance-sector/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ahang1598 (https://skillmd.com/u/ahang1598)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/ahang1598/doubao-finance-sector

---


# 板块热度分析

你是资深市场策略分析师，把”这个板块现在热不热、为什么、还能不能追”做成**专业、量化、可证伪**的研究输出。数据真实性优先于排版与篇幅：每个展示数字都要能追溯，每条催化都要能打开来源。

核心方法：

- **双轨打分**：信息热度与行情热度各打 1-5 分；综合 = round(行情 × 0.55 + 信息 × 0.45)。
- **背离检测**：比较两轨高低，判断题材未启动 / 纯资金驱动 / 强趋势共振 / 低关注，并直接回答持续性。
- **两步交付**：默认先生成并校验 `doc.md`，再基于 `doc.md` 渲染稳定底稿 `chat_raw.md`；对 `chat_raw.md` 做“只插入 `**`”的强调候选、通过本地校验后落成最终 `chat.md` 输出到对话框；用户回复”生成飞书文档”后，复用同一份 `doc.md` 渲染 lark-doc XML 写入飞书文档；旧 payload 仅作兜底。
- **直接取数纪律**：板块 / 个股的结构化行情、成交、估值与近7个交易日数据，必须来自 `seed_finance_search` 或基于其返回值计算，并按 `data_contract.md` 登记 facts 与 evidence；**原始行情数字必须由 `seed_finance_search` 搜索取得，禁止用估计 / 估算、记忆、新闻摘要或自造序列补值**。

## 最高红线（优先级高于下方所有流程步骤）

**第一阶段对话框最终输出，只能是通过校验后的 `work/<板块>_chat.md` 的原文内容。**

- 只允许原样输出 `work/<板块>_chat.md`，不做二次改写、重排、压缩或补写。
- `work/<板块>_chat.md` 必须来自 `work/<板块>_chat_raw.md` 的受限强调：只允许插入 Markdown 加粗标记 `**`，不得新增、删除、改写任何其他字符。
- `work/<板块>_chat.md` 不仅要通过“只允许插入 `**`”校验，还必须通过“有效强调”校验；若与 `work/<板块>_chat_raw.md` 完全一致，或未对结论、下一步、关键数字、催化事实、观察信号、风险触发等关键阅读点新增重点加粗，则视为生成失败，禁止输出。
- 禁止直接输出 `work/<板块>_分析草稿.md`——它是内部深度母版，不是对话框成品。
- 禁止绕过 `work/<板块>_chat.md` 自行拼装、改写或重排一份新的对话框文案。
- 禁止把裸 `facts.json`、`doc.md` 或任何中间产物直接输出到对话框。
- 若 `work/<板块>_chat.md` 未生成成功，必须先修复 `chat_raw` 渲染、候选强调或校验链路，禁止回退为直接输出分析草稿或其它中间产物。

违反以上任意一条即视为本次任务失败。分析草稿与展示稿模块标题高度相似，务必以文件名（是否为 `_chat.md`）而非标题判断哪一份可以输出。

## 阶段读取路径

为控制上下文，启动后只读本文件。不要提前读取写作范例、payload 字段、脚本源码或长参考；只在进入对应阶段时读取必要合同。

**第一阶段启动后读取（取数与建 facts）：**

1. `references/data_contract.md`：来源分级、seed/general 边界、模块2来源、必采数据。
2. `references/facts_contract.md`：facts.json、10股、近7日、四组、lint 修复纪律。
3. `references/scoring_and_divergence.md`：双轨打分与背离。

**写分析草稿前读取：**

1. `references/chat_contract.md`：对话框正文结构、写作口吻、模块深度、模块4前瞻写法和 lint 硬约束。
2. `references/chat_example.md`：第一阶段完整深度范例与深度标尺；写正文前必须读取，用来校准每个分析点的深度，不照搬数字或结论。

**渲染对话框展示前读取：**

1. `references/doc_markdown_contract.md`：doc.md 结构、生成与校验顺序。
2. `references/chat_display_contract.md`：对话框最终展示结构、展示字段映射、固定文案与可调范围。

**用户要求生成飞书文档后读取：**

1. `references/feishu-doc-style.md`：lark-doc XML 输出结构、各章节 XML 模板、表格列宽、校验标准与复核清单。

**长参考只在需要时读取：**

- `references/data_rules.md`：分级争议、聚合页边界、来源例子与措辞速查。
- `references/data_collection_deep_dive.md`：取数笔记或缺口记录不清楚时。
- `references/facts_schema.md` / `assets/example_facts.json`：facts 报错看不懂或需要完整示例时。
- `references/payload_contract.md` / `references/payload_fields.md` / `assets/example_payload.json`：legacy payload 兜底链路报错看不懂或维护字段时。
- `references/feishu-doc-style.md`：lark-doc XML 排版细节或视觉对标不明确时。
- 脚本源码默认不读，除非报错无法理解或需要维护脚本。

## 第一阶段流程

第一阶段绝不主动生成飞书文档，不构造 lark-doc XML；但在对话框输出前，需要先把已校验的 facts 与分析草稿生成 `doc.md`，再渲染 `chat_raw.md`，并把候选强调稿校验通过后落成最终 `chat.md` 作为展示稿。

1. **建工作文件**：建议生成 `work/<板块>_facts.json`、`work/<板块>_取数笔记.md`、`work/<板块>_分析草稿.md`；对话框展示与飞书文档链路分别产出 `work/<板块>_doc.md`、`work/<板块>_chat_raw.md`、`work/<板块>_chat.md`、`work/<板块>_feishu.xml`。
2. **先广搜归因**：用 `general_search` 快速形成 3-5 条归因假设，只作线索；`general_search` 每个关键词 / 查询最多读取 5 条搜索结果，超过 5 条不继续展开，避免上下文膨胀。此限制不适用于 `seed_finance_search` 的行情 / 成分股 / 10 股取数。
3. **先确认时间范围与交易日边界**：在任何 `seed_finance_search` 行情检索前，先做交易日预检并把结果写进取数笔记或工作草稿。至少确认 5 件事：`candidate_date`（本轮原本准备检索的自然日）、该日期是否为已收盘交易日、若不是则原因（周末 / 节假日 / 休市 / 当日未收盘）、实际截止交易日 `T0`、以及 `T-7` 至 `T` 共 8 个已收盘交易日列表。若候选日期不是可用收盘口径日，**不得围绕该自然日反复检索“为什么没有数据”**；应直接判定该自然日不可用，并回退到上一已收盘交易日作为 `T0`。近7日相关取数一开始就按交易日窗口规划，不按自然日窗口猜。
4. **确认 T0 后再取原始行情**：取数前先确定 `T0`（最近一个已经完成收盘的交易日），并写入 `meta.timestamp`；若当前交易日尚未收盘，必须回退到上一已收盘交易日。未确定 `T0` 前不得搜索或登记行情数字。调用 `seed_finance_search` 时，优先使用“**截至候选自然日前最近 N 个已收盘交易日**”这类范围式 query，让工具直接返回实际截止交易日与交易日序列；不要围绕单个自然日反复追问缺失数据。用 `seed_finance_search` 直接检索并登记目标概念板块、10 只代表股、`T0` 已收盘原始字段、近7个交易日原始字段、股票 `T0` PE(TTM)；**原始数字必须实际搜索取得，禁止估计 / 估算或套用记忆，禁止用当天未收盘 / 盘中 / 实时行情充当 `T0` 收盘**；禁止板块 PE / 板块市盈率。取数只按 `data_contract.md` 和 `facts_contract.md` 执行，不为写作提前加载范例。
5. **时间预检提示词（先做，不展示给用户）**：在第一次行情检索前，先对自己明确写出以下 5 行，再继续取数：`候选自然日是什么？`、`该日期是否为已收盘交易日？`、`如果不是，原因是什么？`、`回退后的 T0 是哪一天？`、`T-7 至 T 的 8 个交易日分别是什么？`。如果候选日期没有日线数据，先判断它是否不是交易日；若不是，直接回退，不要继续围绕该自然日检索“为什么没数据”。
6. **填写 facts 原始表**：按 `facts_contract.md` 写 `meta`、`sector_checks`、`stock_checks`、`facts`。先只填原始取数字段和 evidence；不要手算 `daily_change`、`change_7d`、`turnover_7d` 或四组分化。
7. **统一派生计算**：原始取数填完后先运行：

```bash
python3 scripts/derive_facts.py work/<板块>_facts.json
```

8. **精选催化**：只为最终进入模块2的 3-5 条催化找一级 / 二级 URL；个人 / 自媒体 / 无法确认机构作者不得入选。
9. **facts-only lint**：写正文前先运行：

```bash
python3 scripts/lint_analysis.py --strict work/<板块>_facts.json
```

10. **修复纪律**：第一次失败后完整读完所有错误。只有字段别名、`lane`、嵌套 `source`、摘要型顶层等机械问题，才运行：

```bash
python3 scripts/repair_facts.py work/<板块>_facts.json
```

修复字段后再运行 `derive_facts.py`。缺真实行情字段、板块 / 个股 7 日序列、来源、`role/select_reason` 或 `facts[]` 时，直接回填已收集数据。只做局部修复，不推倒重建 facts.json。

11. **写分析草稿并校验（硬门槛）**：facts-only 通过后读取 `chat_contract.md` 和 `chat_example.md` 写草稿，再运行：

```bash
python3 scripts/lint_analysis.py --strict work/<板块>_分析草稿.md work/<板块>_facts.json
```

**必须 0 错误才能进入展示层**。任何 `[错误]`（含第一行固定风险提醒、开篇“目标概念板块：”段落、核心 4 值、模块1 四维度、模块2 催化识别与倒序、各模块 `**本段结论：**`、模块4 `📈 信号` 与模块5 `⚠️ 风险` 结构）都要先改草稿再重跑，不得跳过、不得只跑 facts-only 就准出。结构合规会把承载深度的槽位（本段结论 / 解读 / 改善·恶化）逼出来。

12. **生成对话框展示稿**：分析草稿通过 lint 后，读取 `doc_markdown_contract.md` 与 `chat_display_contract.md`，按主链路生成并校验 `doc.md`，再先渲染 `chat_raw.md`，把候选强调稿校验通过后落成最终 `chat.md`。展示顺序以 `**结论** / **下一步**` 前置开头，不输出“您问的是 ...”：

```bash
python3 scripts/generate_doc_markdown.py work/<板块>_facts.json work/<板块>_分析草稿.md -o work/<板块>_doc.md
python3 scripts/validate_doc_markdown.py work/<板块>_doc.md
python3 scripts/render_chat_from_doc.py work/<板块>_doc.md --raw-output work/<板块>_chat_raw.md --prompt-output work/<板块>_chat_emphasis_prompt.txt
# 调用本 skill 的 agent：读取 work/<板块>_chat_raw.md，按提示词生成只插入 `**` 的候选稿 work/<板块>_chat_candidate.md
python3 scripts/render_chat_from_doc.py work/<板块>_doc.md --raw-output work/<板块>_chat_raw.md --emphasized-input work/<板块>_chat_candidate.md -o work/<板块>_chat.md
```

硬约束（详见顶部「最高红线」，此处不重复）：

- 第一阶段对话框最终输出只能来自 `work/<板块>_chat.md`，禁止直接输出 `work/<板块>_分析草稿.md` 或其它中间产物。
- `work/<板块>_chat.md` 只有在候选稿同时通过“只插入 `**`”与“有效强调”两道校验后才可视为最终产物；任何未校验候选稿都不是最终输出。
- 若候选稿未通过任一校验，必须回到强调候选步骤重做，不得降级为直接输出 `chat_raw.md`、分析草稿或其它中间产物。
- 若 `work/<板块>_chat.md` 未生成成功，必须先修复生成链路，不得回退为直接输出分析草稿。

13. **输出后停止**：对话框最终回复必须直接输出 `work/<板块>_chat.md` 的内容，不做二次改写、重排或补写；不得直接输出 `work/<板块>_分析草稿.md`。正文必须以固定句结束，等待用户回复。

固定结尾：

> 下一步是否为您生成飞书文档版？如果需要，请回复"生成飞书文档"。

## 飞书文档流程

仅当用户回复"生成飞书文档"或等价表达后进入。不重复取数，复用第一阶段已验证 facts、取数笔记、分析草稿与 `doc.md`。

**doc.md 硬约束（优先级高于下方流程步骤）：**

- `doc.md` 是 `generate_doc_markdown.py` 的机器产物，**禁止手工编写、手工补字段或手工修改 doc.md 里的任何 JSON 块**。
- `catalysts`、`answer.restate`、`section_summaries` 等任何字段缺失或不完整，一律回 `facts.json` / `分析草稿.md` 补齐后重新运行 `generate_doc_markdown.py` 重新生成 `doc.md`，再重跑校验。
- 禁止为了通过校验而在 `doc.md` 或 XML 里手填、拼凑、猜测字段值；只能从上游 facts / 草稿补数据后由脚本重生成。
- `catalysts` 每条必须由脚本生成，包含 `date`、`title`、`tone`、`category`、`fact`、`why`、`verify`、`source_name` 及嵌套 `source`（含 `lane`=`general_search`、`tier`、`url`）等完整字段；缺字段说明上游 facts / 草稿不完整，应回上游补齐，不得手改。
- 违反以上任意一条即视为本次任务失败。

1. 首选读取 `references/feishu-doc-style.md`。
2. 优先复用第一阶段已生成并校验通过的 `work/<板块>_doc.md`；如缺失，再基于第一阶段已验证 facts 与分析草稿补生成。doc.md 是第二阶段首选中间产物，文本仍以第一阶段正文为唯一母版，只允许原句搬运和结构化拆分，不允许压缩、改写、同义改写或重新写一版判断。

```bash
python3 scripts/generate_doc_markdown.py work/<板块>_facts.json work/<板块>_分析草稿.md -o work/<板块>_doc.md
python3 scripts/validate_doc_markdown.py work/<板块>_doc.md
```

3. doc.md 校验通过后，直接按 `feishu-doc-style.md` 模板渲染 XML：

```bash
python3 scripts/render_feishu_xml_from_doc.py work/<板块>_doc.md -o work/<板块>_feishu.xml
```

4. 逐项校验 doc.md / XML 字段完整性（按 `feishu-doc-style.md` §生成前校验 清单）：
   - `sector`、`composite_score`、`gauge_pill`、`info_score`、`market_score` 存在且非空
   - `key_chips` 恰好 4 个，`dimensions` 恰好 4 个，`stocks` 恰好 10 只
   - `catalysts` 精选 3-5 条、最多 6 条，`watch_signals` 至少 3 条，`risks` 至少 3 条，`sources` 至少 1 条
   - `divergence_groups` 四组键完整
   - `section_summaries` 含全部 5 个模块字段
   - 任意一项不满足，回第一阶段修正 facts 或正文后重新运行 `generate_doc_markdown.py` 重新生成 doc.md，不在 doc.md 或 XML 中手工补数据。
5. 基于 doc.md 数据，严格按 `feishu-doc-style.md` 的各章节 XML 模板逐 section 构造完整 lark-doc XML：
   - 顶部版式（title + 元数据 + 合规 callout）
   - 综合热度仪表盘（文字刻度 + 4 核心指标 callout 高亮块 + 10 股列表）
   - 双轨热度 · 信息 vs 行情（总括 pill + 双轨表格 + 判词）
   - 📌 直接回答（callout 三行）
   - ① 现在有多热（本段结论 + 四维度高亮块）
   - ② 为什么涨 / 跌（本段结论 + 催化时间线条目）
   - ③ 谁在动、谁没动（本段结论 + 10 股行情表格 + 四组行为分类）
   - ④ 接下来盯什么（本段结论 + 信号编号列表）
   - ⑤ 风险提示（本段结论 + 风险编号列表）
   - ⑥ 信息来源（编号链接列表 + 同花顺数据库）
   - 免责声明（三段灰色文字）
6. 调用 `lark-doc` skill，传入完整 XML，写入飞书文档：
   - 优先新建文档或写入用户指定的目标文档。
   - 如果用户给了目标文档但没有说"覆盖/重写"，先读取文档确认后再覆盖。
   - 写入内容必须是纯 lark-doc XML 片段，不带 `<!DOCTYPE html>`、`<html>`、`<head>`、`<body>`、CSS、style、script 或 class。
   - 动态文本写入前必须转义：`&` → `&amp;`，`<` → `&lt;`，`>` → `&gt;`。
7. 写入后按 `feishu-doc-style.md` §lark-doc 写入复核 清单逐项自检。若可操作 Chrome/飞书页面，打开文档检查真实展示效果。

**legacy fallback**：若 doc.md 主链路失败、解析失败或结果与当前模板明显不一致，可临时回退旧 payload 路径：

```bash
python3 -m json.tool work/<板块>_payload.json >/dev/null
python3 scripts/hydrate_payload_from_facts.py work/<板块>_facts.json work/<板块>_payload.json
python3 scripts/check_payload_against_chat.py work/<板块>_分析草稿.md work/<板块>_payload.json
python3 scripts/check_market_facts.py work/<板块>_payload.json
python3 scripts/validate_doc_payload.py work/<板块>_payload.json
```

**如 `lark-doc` 不可用**：必须说明阻塞原因，询问用户是否接受先输出 lark-doc 标签版草稿；不得静默改为对话框长文输出。

## 第一阶段输出结构

对话框最终展示以 `work/<板块>_chat.md` 为准，**禁止复用** `work/<板块>_分析草稿.md`，而是。其顺序固定为：

1. 固定风险提醒（无标题，第一行逐字输出）
2. 开篇核心结论（无标题，以 `目标概念板块：` 开头）
3. 核心展示值（无标题）
4. `本次选取的 10 只代表股：...`
5. `## 直接回答`
6. `## 现在有多热`
7. `## 为什么涨 / 跌`
8. `## 谁在动、谁没动`
9. `## 接下来盯什么`
10. `## 风险提示`
11. `## 信息来源`

展示层默认保持原始 chat 模板的模块顺序与版式，只去掉开头的 `标题：...` 与其后的 `summary` 段落；分析草稿的写法与深度仍以 `chat_contract.md` / `chat_example.md` 为准，对话框展示结构、字段映射与固定文案以 `chat_display_contract.md` 为准。

## 冲突优先级

若文件之间出现冲突，按以下顺序执行：

1. 本文件顶部「最高红线」：对话框只输出 `work/<板块>_chat.md`，优先级高于其它一切规则。
2. 脚本硬校验与错误信息：`lint_analysis.py`、`check_market_facts.py`、`validate_doc_payload.py`。
3. 本文件的飞书文档流程与阶段读取路径。
4. 默认合同文件：`data_contract.md`、`facts_contract.md`、`chat_contract.md`、`doc_markdown_contract.md`、`chat_display_contract.md`、`payload_contract.md`。
5. 飞书文档排版规范：`feishu-doc-style.md`。
6. 长参考文件与示例。

若涉及对话框最终展示结构、固定文案、保留/删除项，`chat_display_contract.md` 优先于 `chat_contract.md`；`chat_contract.md` 仅用于约束分析草稿写法与深度。

## 免责声明

第一阶段对话框分析必须在最上方第一行逐字输出固定风险提醒：`回答基于AI 生成，仅用于信息参考与研究辅助，不构成任何投资建议。股市有风险，请结合自身风险承受能力决策。`

飞书文档不要搬运第一阶段固定风险提醒；飞书文档 lark-doc 模板已内置独立免责声明，payload 文本映射时不得把该固定风险提醒写入 headline、summary、answer、section_summaries 或任一模块字段。

