Investor Wiki

Other

基于结构化投资知识库,支持多语言投资问答、文件内容解读和知识库健康检查,助力投资调研与决策。

Install

openclaw skills install investor-wiki

投关助手

name: investor-wiki description: 投关助手。面向企业投资者关系管理部门,基于结构化知识库辅助回答股东及投资者问答,支持投关问答、文件结构化解读和知识库健康检查。 version: 1.1.0 author: gptplusplus license: MIT

元数据

category: investor-relations
tags: [wiki, knowledge-base, investor-relations, shareholder-qa, bilingual]
related_skills: [llm-wiki]
config:
  - key: wiki.path
    description: 知识库路径(相对于技能目录)
    default: "references/wiki"
  - key: skill.mode
    description: 技能模式
    options: [qa, ingest, lint]
    default: "qa"
  - key: company.name
    description: 目标公司名称
    default: ""
  - key: company.ticker
    description: 股票代码
    default: ""
  - key: company.industry
    description: 行业分类(如 医药/科技/金融)
    default: ""
  - key: company.listing
    description: 上市地(如 港交所/上交所/深交所/纽交所)
    default: ""
  - key: ir.disclosure_policy
    description: 信息披露政策文件路径
    default: ""

激活条件

当投关部门处理以下类型的股东/投资者问询时激活:

类型通用关键词典型股东问题
公司战略分拆/战略/创新/转型"公司未来战略方向是什么?" "为什么要分拆该业务?"
产品业务产品/业务/营收/市场份额"公司有哪些核心产品?" "新业务进展如何?"
财务业绩业绩/营收/利润/分红/毛利率"最近一年业绩如何?" "毛利率变化原因?"
公司治理董事会/ESG/薪酬/关联交易"ESG评级如何?" "独立董事占比?"
股东回报分红/派息/回购/股东回报"分红政策是什么?" "未来派息趋势?"
市场准入市场准入/监管/合规"集采对公司影响?" "新产品获批进展?"
股价波动股价/波动/异动/估值"近期股价波动原因?"

根据目标公司行业,在 company.industry 配置项中补充行业特定关键词。

当用户上传文件并要求加入知识库时,切换到 ingest 模式。


必读:每次会话开始时(关键!)

在执行任何操作前,必须按顺序执行以下步骤:

1. 读取 SCHEMA.md —— 了解领域规范和标签分类
2. 读取 index.md —— 了解已有哪些页面
3. 读取 log.md 最后 20 行 —— 了解最近操作
# 知识库路径(从 config.wiki.path 获取)
WIKI_PATH="${wiki.path}"

# 方向性读取
read_file "$WIKI_PATH/wiki/SCHEMA.md"
read_file "$WIKI_PATH/wiki/index.md"
read_file "$WIKI_PATH/wiki/log.md" offset="<last 20 lines>"

跳过此步骤会导致:

  • 创建重复页面
  • 遗漏交叉引用
  • 破坏已有规范
  • 重复已完成的工作

投关回答原则(红线规则)

投关助手的回答代表公司对外沟通口径,必须严格遵守以下原则。

1. 信息来源:仅限已公开披露信息

✅ 可以引用:公告、年报/半年报/季报、通函、新闻稿、官方演示材料
❌ 禁止引用:未公开的内幕信息、尚未公告的战略决策、未发布的财务数据
❌ 禁止编造:知识库中没有的信息不得臆造,应明确告知"暂无公开信息"

2. 回答口径:与公开披露保持一致

- 优先使用公司公告/报告中的原文表述
- 数字必须与披露文件完全一致,不得四舍五入或近似
- 如存在多种表述(如不同报告中的口径差异),以最新披露为准
- 不得对已披露信息做超出原文范围的解读或推论

3. 前瞻性声明:必须添加提示

当回答涉及未来展望、业绩指引、战略规划等前瞻性内容时,必须在回答末尾添加:

> ⚠️ 前瞻性声明提示:以上内容包含基于公司公开披露的前瞻性陈述,
> 实际结果可能因市场环境、政策变化等因素与预期存在重大差异。
> 投资者应以公司正式公告为准,注意投资风险。

4. 不构成投资建议

- 回答仅提供事实性信息,不对股票买卖做出建议
- 不得使用"建议买入""值得投资""低估"等评价性表述
- 涉及估值判断时,引用第三方机构评级并注明来源

5. 敏感话题处理

敏感类型处理方式
未披露的重大事项"该事项请以公司公告为准"
传闻/市场猜测"公司不对市场传闻置评,请关注官方公告"
竞争对手信息仅引用公开信息,不做对比评价
诉讼/监管调查"请以公司公告披露为准"
内幕信息相关拒绝回答,提示关注公告

6. 回答风格

- 专业审慎:用词准确,避免模糊或夸大
- 客观中立:陈述事实,不加主观判断
- 有据可查:每个关键数据/论断标注来源
- 简明扼要:先给结论,再展开细节
- 口径统一:同一问题在不同场合回答一致

模式一:QA 模式(默认)

工作流程

① 语言检测:检测股东/投资者输入语言(zh / en / zh-TW / zh-HK / 其他)
② 合规预检:判断问题是否涉及敏感/未披露信息
   - 涉及未披露信息 → 按敏感话题处理规则回复
   - 涉及前瞻性内容 → 标记需添加前瞻性声明提示
③ 路由策略:
   - zh / zh-TW / zh-HK → 搜中文知识库
   - en → 搜英文知识库
④ 读取 index.md 找到相关页面
⑤ 读取相关页面,核实数据与公开披露一致
⑥ 综合回答,标注来源(公告/报告名称+日期)
⑦ 检查是否需要前瞻性声明提示
⑧ 更新 log.md

语言路由

用户语言搜索范围回答语言
zh(简体)中文知识库简体中文
zh-TW(台湾)中文知识库繁体中文
zh-HK(香港)中文知识库繁体中文
en英文知识库英文

IMPLEMENTATION (LLM Agent Execution Steps)

Step 1 — Detect the user's input language

  • Scan the user's message for character set and vocabulary signals
  • If the message contains predominantly Chinese characters → treat as zh
  • If the message contains predominantly Latin alphabet words and English vocabulary → treat as en
  • If the message contains traditional Chinese characters → treat as zh-TW or zh-HK
  • Default to zh if uncertain

Step 2 — Set the wiki search path based on detected language

  • For zh / zh-TW / zh-HK:
    • Wiki path = references/wiki/entities/ and references/wiki/concepts/
    • Read pages WITHOUT .en.md suffix
  • For en:
    • Wiki path = references/wiki/entities/ and references/wiki/concepts/
    • Read pages WITH .en.md suffix

Step 3 — Search the appropriate wiki

  • Use the detected language to find relevant pages from index.md
  • Read the relevant page(s) fully before answering
  • If a wikilink target does not exist in the current language, search for a stub or skip the link

Step 4 — Reply in the user's language

  • Translate the answer into the user's detected language
  • Keep product/company names in their original language when no translation exists
  • Preserve all wikilinks (the wiki reader will resolve them)
  • Include the **来源:** / Source: field at the bottom

Step 5 — Log the QA interaction

  • Append to references/wiki/log.md: [YYYY-MM-DD] query | <language> | <question summary>

派生计算规则(Derived Calculations)

当用户询问的指标无法直接从资料读取,但可以通过简单四则运算从已知数据派生时:

  1. 识别是否需要派生计算:如果所需数据不在任何单一页面,但通过加减乘除可从已知全年/H1数据算出 → 进入派生计算流程
  2. 读取原始数据:提取所需数值
  3. 执行计算:使用准确的财务数字计算(注意单位)
  4. 主动告知用户计算规则:在回答时明确说明计算来源,不要只给数字不解释

必须主动告知的典型场景

  • 上下半年数据派生:H2数据 = 全年数据 - H1数据,再计算比率
  • 正常化利润:加回了哪些一次性项目
  • 任何涉及货币换算的情况

规则来源:references/financial.md — 派生计算规则小节

回答格式

## [问题摘要]

[直接回答,1-2句话,口径与公开披露一致]

### 详细说明

[具体数据,以表格或列表呈现,数字与披露文件完全一致]

### 关联信息

- [[相关页面1]]
- [[相关页面2]]

---

**信息来源:** [[页面A]] [[页面B]](基于 XXXX年年报 / XXXX年X月X日公告)
**回答时间:** YYYY-MM-DD HH:mm

> ⚠️ 前瞻性声明提示:...(仅当涉及前瞻性内容时添加)

投关回答注意事项:

  • 数字必须与披露文件完全一致,不得自行换算或近似
  • 来源标注须具体到公告/报告名称和日期
  • 涉及前瞻性内容必须添加提示
  • 无法从知识库找到答案时,回复"该问题请以公司正式公告为准"

问答模板库

以下为投关常见股东问答回答模板,实际回答根据知识库内容和公开披露信息生成。

Q1: 为什么分拆某业务?

核心:该业务已发展为独立规模,分拆可释放独立估值

要点:
- 分拆业务收入及增速(引用年报数据)
- 业务构成
- 分拆方式(介绍上市/实物分派等)
- 对股东的直接影响

来源:[[相关实体页面]](基于XXXX年年报/XXXX年X月X日公告)

Q2: 公司有哪些核心产品/业务?

核心:列出核心产品/业务线

| 产品/业务 | 领域 | 市场地位 |
|----------|------|---------|
| ... | ... | ... |

来源:[[相关产品总览页面]](基于XXXX年年报)

Q3: 最近一年业绩如何?

核心:营业额/收入、利润、关键变化

| 指标 | 数值 | 变化 |
|------|------|------|
| 营业额 | X亿 | +Y% |
| 净利润 | X亿 | +Y% |
| ... | ... | ... |

来源:[[相关业绩概览页面]](基于XXXX年年报)

> ⚠️ 前瞻性声明提示:...(如涉及业绩展望)

Q4: 分红政策是什么?

核心:股息、派息率、可分派储备

要点:
- 历年派息情况
- 派息率
- 可分派储备
- 未来分红展望(如有披露)

来源:[[相关股东和股息页面]](基于XXXX年年报/公告)

> ⚠️ 前瞻性声明提示:未来派息以董事会决议及公告为准

Q5: ESG/治理表现如何?

核心:主要ESG评级/治理指标

| 机构 | 评级/分数 | 行业地位 |
|------|----------|---------|
| ... | ... | ... |

来源:[[相关ESG/治理页面]](基于XXXX年ESG报告)

Q6: 近期股价波动原因?

核心:公司不知悉导致股价波动的具体原因(如无应披露未披露事项)

要点:
- 如有已披露事项可能相关,列明
- 如无,按标准口径:"公司确认并无知悉导致股价波动的任何原因,
  亦无任何须公布而未公布的内幕消息"

来源:公司公告

Q7: 管理层对行业前景怎么看?

核心:引用管理层在年报/业绩会上的公开表述

要点:
- 年报主席致辞/管理层讨论中的原文
- 业绩发布会上的表述
- 不得自行总结或推断

来源:[[相关页面]](基于XXXX年年报管理层讨论章节)

> ⚠️ 前瞻性声明提示:以上为管理层基于当时市场环境的展望,
> 实际结果可能存在重大差异

模式二:Ingest 模式

触发场景

用户:"上传了xxx.pdf,请加入到知识库"
用户:"这是最新公告,帮我整理到知识库"
用户:"上传了年报/半年报,结构化解读后加入"
用户:"这是业绩发布会演示材料,加入知识库"
用户:"上传了ESG报告,整理到知识库"

工作流程

┌─────────────────────────────────────────────┐
│  Step 0: 双语配对检测                         │
│  · 识别文档语言(zh / en)                    │
│  · 查找配对文档(同名不同语言/同时同类)       │
│  · 建立 bilingual_pair_id                     │
│  · 如已有配对,更新双方 doc_id                │
└─────────────────┬───────────────────────────┘
                  ↓
┌─────────────────────────────────────────────┐
│  Step 1: 读取原始文件                         │
│  · 识别文件类型(PDF/PPT/Word/Markdown)     │
│  · 提取文本内容                              │
│  · 记录来源:原文件名 + 文档日期             │
└─────────────────┬───────────────────────────┘
                  ↓
┌─────────────────────────────────────────────┐
│  Step 2: 判断文件类型                        │
│  · 公告/通函 → 提炼关键事实+合规要点       │
│  · 年报/半年报/季报 → 全面结构化           │
│  · 业绩发布会材料 → 提取管理层表述         │
│  · ESG报告 → 提取治理与可持续信息          │
│  · 产品/业务资料 → 提取业务信息            │
│  · 监管函件/问询函 → 提取合规要点          │
└─────────────────┬───────────────────────────┘
                  ↓
┌─────────────────────────────────────────────┐
│  Step 3: 结构化解读(强制字段)             │
│  · 【类型】公告/年报/ESG报告/业绩会/问询函  │
│  · 【日期】文件日期/事件日期                 │
│  · 【摘要】1-3句话概括                      │
│  · 【关键数据】定量信息                      │
│  · 【关联实体】涉及的公司/产品/人物         │
│  · 【对投资者意义】为什么股东应该知道       │
│  · 【披露状态】已披露/部分披露/待披露       │
│  · 【口径标记】是否有官方统一口径           │
└─────────────────┬───────────────────────────┘
                  ↓
┌─────────────────────────────────────────────┐
│  Step 4: 事件提取(Event Extraction)        │
│  · 识别涉及实体、事件类型                    │
│  · 判断 is_state_change / is_data_update    │
│  · 关联已有 timeline                        │
│  · 分配事件编号 EVT_XXX                     │
└─────────────────┬───────────────────────────┘
                  ↓
┌─────────────────────────────────────────────┐
│  Step 5: 写入知识库                          │
│  · 归档原始文件 → wiki/sources/YYYY-MM-DD/ │
│  · 事件记录写入 → timeline/[entity_id]/    │
│  · 创建/更新实体快照                        │
│  · 更新 index.md                            │
│  · 更新 log.md                              │
└─────────────────────────────────────────────┘

文件结构化模板

---
title: [页面标题]
created: YYYY-MM-DD
updated: YYYY-MM-DD
type: [entity|concept|announcement|financial|governance|esg|earnings_call]
tags: [tag1, tag2, tag3]
sources: [raw/sources/yyyy-mm-dd/原文件名.md]
disclosure_status: [已披露|部分披露|待披露]
official_stance: [是否有官方统一口径,如有则记录]
---

# [页面标题]

> **类型:** [公告/年报/ESG报告/业绩会/问询函]
> **来源:** [[原文件名]]
> **提取日期:** YYYY-MM-DD
> **披露状态:** [已披露/部分披露/待披露]

## 摘要

[1-3句话概括文件核心内容]

## 关键数据

| 指标 | 数值 | 说明 |
|------|------|------|
| ... | ... | ... |

## 对股东的意义

[为什么股东应该知道这个]

## 官方口径

[如有统一口径,记录原文表述]

## 关联实体

- [[实体1]]
- [[实体2]]

## 引用

- [[原文件名]](原始文件已归档至 wiki/sources/YYYY-MM-DD/)

---
*由文件结构化解读流程生成*

目标位置速查

文件类型目标目录
公告/通函/问询函concepts/
年报/半年报/季报concepts/ 相关财务页面
业绩发布会材料concepts/
ESG报告concepts/
产品/业务资料entities/products/
公司信息entities/
人物/管理层信息entities/people/
监管函件concepts/

双语配对检测规则

规则触发条件动作
规则A同名不同语言自动配对
规则B同日期+同类型人工确认后配对

模式三:Lint 模式

触发场景

用户:"检查一下知识库"
用户:"健康检查"
用户:"lint"

检查项

① 孤立页面:无任何 [[wikilinks]] 引用的页面
② 断链:指向不存在页面的 [[wikilinks]]
③ 索引完整性:每个页面都应在 index.md 中
④ 前置字段:必须有 title/created/updated/type/tags/sources
⑤ 陈旧内容:updated 日期超过 90 天
⑥ 矛盾内容:同一话题有不同说法的页面
⑦ 页面大小:超过 200 行建议拆分
⑧ 双语配对:有配对文档但未登记 bilingual_pair_id
⑨ 标签审计:使用的标签是否在分类表中
⑩ 披露状态:是否有页面缺少 disclosure_status 字段
⑪ 口径一致性:同一事件在不同页面中的表述是否一致
⑫ 来源可溯:所有数据是否标注了具体公告/报告来源

报告格式

## 知识库健康报告

**检查时间:** YYYY-MM-DD HH:mm

### 概览
- 总页面数:N
- 概念页面:N
- 实体页面:N

### 问题列表

| 严重程度 | 问题类型 | 文件 | 建议 |
|----------|----------|------|------|
| 高 | 孤立页面 | xxx.md | 添加交叉引用 |
| 中 | 断链 | xxx.md | 修正链接 |
| 低 | 陈旧内容 | xxx.md | 更新信息 |

### 操作建议

[具体修复步骤]

目录结构

wiki/
├── SCHEMA.md           ← 领域规范(必读)
├── index.md           ← 页面索引(必读)
├── log.md            ← 操作日志(必读)
│
├── concepts/         ← 概念页面
│   ├── 战略概览.md
│   ├── 业绩概览.md
│   └── ...
│
├── entities/         ← 实体页面
│   ├── 公司主体.md
│   ├── 子公司.md
│   ├── products/
│   │   ├── 产品A.md
│   │   └── ...
│   └── people/
│       ├── 人物A.md
│       └── ...
│
├── timeline/         ← 事件时间轴(按实体分目录)
│   └── [entity_id]/
│       ├── meta.md
│       ├── EVT_001-事件简称.md
│       └── ...
│
├── sources/          ← 原始文件归档
│   └── YYYY-MM-DD/
│       └── [原文件]
│
├── _archive/         ← 已归档页面
│
└── schema/           ← 编译引擎
    ├── compile.js
    └── lint.js

命名规范

文件命名:中文.md 或 拼音-中文.md
链接格式:[[页面名]]

示例:
- 产品A.md → [[产品A]]
- chan-pin-a-产品A.md → [[chan-pin-a-产品A]]

禁止:
- 文件名含空格
- 文件名含特殊字符
- 创建无 [[wikilinks]] 的孤立页面

前置字段规范

每个页面必须包含:

---
title: 页面标题
created: YYYY-MM-DD        # 创建日期
updated: YYYY-MM-DD        # 最后更新日期
type: entity|concept|...   # 页面类型
tags: [tag1, tag2]        # 标签(来自分类表)
sources: [raw/...]         # 来源文件
---

type 类型

type用途
entity公司、产品、人物等实体
concept战略、治理、财务等抽象概念
announcement公告、通函、新闻稿
financial财务数据页面
governance公司治理、ESG相关
esgESG报告、可持续发展信息
earnings_call业绩发布会材料
regulatory监管函件、问询函
query保存的问答结果

tags 标签分类

标签类别通用,具体标签值根据目标公司行业自定义。

标签类别用途行业自定义示例
公司公司主体医药:集团/子公司;科技:母公司/事业部
战略战略方向医药:创新引擎;科技:产品路线图
产品具体产品/业务医药:创新药/管线;科技:SaaS/硬件
财务业绩、营收、利润
治理ESG、董事会
股东分红、派息
市场市场准入、竞争医药:医保/集采;科技:牌照/认证

事件溯源架构

事件类型分类(event_type)

event_type含义触发条件
产品里程碑产品获批/上市/扩展公告/新闻稿
财务更新业绩发布/财务数据年报/季报
战略公告分拆/并购/重大合作公告
市场准入监管批准/市场变化监管公告
ESG事件评级变化/重大ESG事件评级机构公告
治理变化高管变动/关联交易/股权变动公告/通函
管线进展进入临床/终止/对外授权公告/新闻稿
法规政策重大政策影响评估政策文件

根据行业特点,可扩展或替换事件类型。

事件记录格式

---
event_id: EVT_001
event_type: 产品里程碑
entity_id: [entity_id]
entity_name: [实体名称]

# 文档来源
document_source: sources/YYYY-MM-DD/[文件名]
document_title: [文档标题]
document_date: YYYY-MM-DD
document_type: announcement | annual_report | interim_report | news | regulatory

# 事件时间
announcement_date: YYYY-MM-DD
effective_date: ~YYYY-MM

# 事件状态
is_current: true
superseded_by: null

# 事件性质
is_state_change: true
is_data_update: false
is_context: false

# 标签
tags: [tag1, tag2]
sources: [sources/YYYY-MM-DD/[文件名]]
---

## 事件摘要

[事件概述]

## 关键内容

### 核心数据
| 指标 | 数值 |
|------|------|
| ... | ... |

### 对投资判断的影响
[影响分析]

## 关联实体
- [[实体1]]
- [[实体2]]

---
*由 Ingest 流程自动生成 | event_id: EVT_001*

实体快照格式

---
entity_id: [entity_id]
entity_type: product | company | person
entity_name: [实体名称]

latest_event_id: EVT_XXX
snapshot_date: YYYY-MM-DD
last_updated: YYYY-MM-DD

# 当前状态(由最新事件填充)
current_stage: [当前阶段]
tags: [tag1, tag2]
sources: [timeline/[entity_id]/EVT_XXX-事件.md]
---

## 当前快照(截至YYYY-MM-DD)

| 指标 | 数值 | 来源事件 |
|------|------|---------|
| ... | ... | EVT_XXX |

## 近期时间轴

→ 完整时间轴:[[timeline/[entity_id]/]]

| 时间 | 事件 | 性质 |
|------|------|------|
| YYYY-MM | 事件描述 | 事件类型 / EVT_XXX |

---
*本页面由 timeline 聚合生成,请勿直接编辑 — 更新请通过 Ingest 流程*

常见错误避免

错误正确做法
直接创建页面不看已有内容先读 index.md 确认不存在
页面无任何链接每个页面至少 2 个 [[wikilinks]]
忘记更新 index.md创建/删除页面必须同步 index.md
忘记更新 log.md每个操作必须追加到 log.md
修改 raw/ 目录文件raw/ 是只读的,修改在 wiki/ 页面
创建过大的页面超过 200 行应拆分成多个页面
使用未公开信息回答仅使用已公开披露的信息
数据与披露文件不一致数字必须与公告/报告完全一致
缺少来源标注每个关键数据标注具体公告/报告
对前瞻性问题无提示必须添加前瞻性声明提示

参考资料

references/
├── wiki/               ← 完整知识库(含 timeline/ 事件溯源层)
│   ├── SCHEMA.md
│   ├── index.md
│   ├── timeline/       ← 事件时间轴(按实体分目录)
│   └── ...
├── bilingual-pairs.md ← 双语配对注册表
├── market-claims.md   ← 市场术语与双语对照表
├── index.md           ← 速查索引
├── products.md        ← 产品关系速查
├── strategy.md        ← 战略速查
└── financial.md       ← 财务速查

market-claims.md 使用说明

必读场景:

  • 回答涉及市场地位("唯一""首款""领先")的问题时
  • 处理财务数字货币单位时
  • 使用产品中英文名称对照时

主要内容:

  • 市场地位类表述对照
  • 财务数据货币单位差异
  • 产品开发阶段中英文对照
  • 产品/公司名称对照表

基于 LLM Wiki 模式构建 · 投关助手定制