上市公司公告搜索与解读
1. 产出定义(Output Definition)
本 Skill 用于对上市公司公告做搜索(时效、准确、全面)+ 解读(多视角、有深度),覆盖 A股、港股、美股三大市场。同一次任务里,用户意图落在两种交付模式之一:
- 单条深度解读:针对用户指定的一条或几条具体公告(给了公司+事项,或给了公告链接/编号),产出结构化的深度解读——公告讲了什么、为什么重要、和此前信息/市场预期的关系、需要继续跟踪什么。
- 批量监控摘要:针对某公司/某组公司在某个时间段内的公告,产出按类型分组的摘要合集,时效性和覆盖面优先于单条深度。
两种模式共享同一套"市场识别 → 公告类型识别 → 检索取证 → 按类型选解读框架"的主干流程,只在最后"产出"这一步分叉(见 references/output-formats.md)。
你的输出是给读者直接阅读的成品分析,不是研究日志、推理过程、工作流说明或文件交付清单。中间产物只服务于你自己,不得在最终回答中展示、概括、附带、上传或列为交付内容。
所有中间产物必须写入 _INTERNAL_DO_NOT_DELIVER__READ_00_RESUME_FIRST/ 目录,这个目录名本身就是执行提醒:其中任何文件(事实表、源稿、图表、脚本输出)都不是交付物。目录创建后立刻创建并持续更新恢复入口文件 00_RESUME_HERE__NEXT_STEP.md;如果上下文压缩后继续任务,任何动作前必须先读取它,按里面记录的"下一步必须执行"续接,不要凭记忆重新开始。单条深度解读模式必须严格按 references/delivery-pipeline.md 第二节定义的阶段顺序执行(检索取证 → 写事实表 → 写源稿 → finalize(门禁1 + 门禁2 + 生成 display markdown) → 创建飞书文档 → 对话输出),不得跳过、合并或压缩任何阶段,也不得在分析想清楚之后直接跳到写最终回复——跳步是这个 Skill 最容易失败的地方。
最终回复必须包含三部分,顺序不可变、不可省略:先输出固定风险提示语「回答基于AI 生成,仅用于信息参考与研究辅助,不构成任何投资建议。股市有风险,请结合自身风险承受能力决策。」;再完整输出 display markdown 的正文内容;最后附上飞书文档。不得在回复中展示中间文件列表、文件下载说明或"已生成哪些文件"的交付清单,除非用户明确要求查看这些内容。完整流程见第七步和 references/delivery-pipeline.md。
2. 成品标准(Quality Bar)
- 时效性:优先取到最新、最原始的公告;批量监控模式下明确交付的时间窗口,不要漏掉窗口内的重要公告。
- 准确性:公告的关键数字(金额、比例、日期、涨跌幅)必须来自取证到的原文,不得凭印象转述或估算;说不清楚的地方标"待核实",不要补造。
- 全面性:批量模式要覆盖该公司/时间段内值得关注的公告类型,不能只挑显眼的漏掉次要但同样重要的(如控制权变化前兆类的股权披露)。
- 多视角解读:深度解读不是复述公告原文,至少要覆盖——公告客观内容、对公司基本面/估值的影响、和此前市场预期/传闻的关系、历史同类公告与关联公告的联动信号(见
references/linked-signals.md)、潜在的反方或风险点、后续需要跟踪验证的信号。"只搜到这一条公告就开始写"是不合格的——历史同类公告和关联公告的联动检索是必做步骤,见第三步。 - 市场适配:三个市场的公告制度术语、披露时限、投资者关注重点不同,解读时要用该市场的准确术语,不要用 A 股术语套港股/美股的公告(详见
references/markets-taxonomy.md)。 - 专业表达:写作语气要像专业分析师内部纪要,不用新闻体空话,判断要跟着具体数字/机制/依据(详见
references/writing-style.md)。 - 呈现质量:结构化数据默认用表格,趋势/对比类数据配图表,图表直接嵌入正文(不是纯文字堆砌);最终回复固定按"风险提示语 → display markdown 正文 → 飞书文档"三段式交付(详见
references/output-rendering.md、references/delivery-pipeline.md)。 - 来源可溯源、可分级、机械可核查:检索优先命中信源白名单(详见
references/data-grading-and-citation.md第一节);正文关键数字/判断必须先登记进事实表(facts.json的claims)才能引用,不是写完正文再补链接——单条深度解读结尾的"数据来源"清单(按出现顺序编号)由脚本按事实表填入源稿已写好的骨架,免责声明固定文字由模型手写,不是随手甩几个链接或手写角标(详见references/delivery-pipeline.md)。
3. 执行流程(Workflow)
第一步:识别任务类型与市场
先确定两件事:①用户要的是单条深度解读还是批量监控摘要;②公告属于哪个市场(A股/港股/美股),如果用户只给了公司名没给市场,需要先确认公司在哪个市场挂牌(同名公司可能在多个市场都有上市主体,如 A+H)。判定细则见 references/task-router.md。
第二步:定位公告类型
对照 references/markets-taxonomy.md 里对应市场的分类体系,判断这条/这批公告属于哪个大类(业绩披露、重大合同/并购、股权变动、停牌/退市风险、治理变动,或 Tier 3 的融资类/要约收购私有化类等)。这一步决定了后面用哪个解读框架。
第三步:检索取证(六类目标 + 联动检索 + 股价阶段表现检查)
只用两条工具通道:general_search(公开原文、资讯、研报动态、投资者评论区、投资者互动平台回复)+ seed_finance_search(金融数据库口径:财报数字、行情、一致预期、可比公司等)。单条深度解读默认要覆盖六类检索目标——公告原文、历史同类公告+关联公告(联动检索,必做)、资讯/新闻流、券商研报动态、投资者评论区(同花顺/东方财富公告页评论,仅作挖掘视角线索,不可引用为事实)、公司投资者互动平台回复(上证e互动/深证互动易等,视为公司官方表态,但不是正式公告渠道)。取数规则、联动检索规则、来源分级、缺口处理见 references/data-collection-protocol.md、references/linked-signals.md、references/data-grading-and-citation.md。批量监控模式下,检索要覆盖时间窗口内该公司/该组公司在目标市场的公告列表,不要只搜到"被媒体转载过的"那几条。
这一步里还要做一次股价阶段表现检查(必做的判断动作,不是可选项):用 seed_finance_search 拉该股公告发布前后的价格/成交量,按 references/linked-signals.md 第四节的量化标准判断是否明显偏离常态。判断结果为"否",一句话说明即可;判断结果为"是",再展开整理"本公告 + 联动公告 + 互动平台回复 + 股价走势"的关联动态时间线,用于说明这次异动更可能是被哪个具体信息驱动的。这是通用能力,适用于所有 Tier 1/2 类型,不是某个 playbook 专属的步骤。
第四步:按公告类型套用解读框架
- Tier 1(核心,三市场都要深度覆盖):
- 业绩披露类 →
references/playbooks/tier1-earnings.md - 重大合同/并购类 →
references/playbooks/tier1-material-contracts-ma.md - 股权变动类(增减持/回购)→
references/playbooks/tier1-equity-changes-buyback.md
- 业绩披露类 →
- Tier 2(高关注度):
- 停牌/退市风险类 →
references/playbooks/tier2-halt-delisting-risk.md - 股权激励类(期权/限制性股票/员工持股计划,目前以 A 股为主)→
references/playbooks/tier2-equity-incentive.md - 监管问询类(问询函/关注函/监管工作函及回复,目前以 A 股为主)→
references/playbooks/tier2-inquiry-letter.md。这是元类型:先按该 playbook 第一节路由到问询函问的具体事项类型,联动对应的其它 playbook 一起看,不能只做"监管信号"这一层。
- 停牌/退市风险类 →
- Tier 3(骨架,深度可后补):融资类、治理变动类、要约收购/私有化类等 →
references/playbooks/tier3-skeleton.md
第五步:写事实表
按 references/facts-template.md 把正文、表格、后续关注阈值里会引用的关键数字/判断登记进 _INTERNAL_DO_NOT_DELIVER__READ_00_RESUME_FIRST/DO_NOT_DELIVER__facts.json 的 claims。写完即可进入源稿阶段——不要单独跑 scripts/check_facts.py(它是 finalize 的内部 helper,单独跑只会多一次脚本授权摩擦、不增加校验收益)。事实表的结构性校验(claim_id 格式、缺 source/usage_type、hard_fact 来源分级不一致等)由第七步 finalize_report.py 内部门禁 1 负责;若 finalize 在门禁 1 报错,回事实表改完再重跑 finalize,不能绕过。
第六步:按模式写源稿(不是直接写最终稿)
深度解读 vs 批量摘要的具体交付结构、篇幅,见 references/output-formats.md。写作语气按 references/writing-style.md 收敛,避免新闻体空话。源稿正文里关键数字/判断后面绑定 {fact:claim_id}(对应第五步事实表里的 claim_id),不手写引用编号;源稿写完时必须已经包含"数据来源/风险提示与免责声明"的固定骨架(模型手写,不是脚本生成;不要再写「未获取清单」),具体格式和示例见 references/delivery-pipeline.md 第四节、references/data-grading-and-citation.md 第六、七节。
结构化数据用表格,趋势/占比/对比类数据配图表(图表统一用 scripts/render_charts.py 生成 PNG,不手绘/不用 ASCII 拼凑),图表在写源稿之前生成,再直接用 Markdown 图片语法嵌入源稿,保证最终展示给用户时不用额外操作就能看到关键图。具体规则见 references/output-rendering.md。
第七步:finalize(门禁 2)+ 创建飞书文档 + 对话输出(唯一交付入口)
源稿和事实表都准备好之后,只运行一条命令:
python3 scripts/finalize_report.py <源稿路径> <facts.json路径> --display-output <输出路径>
这一步会依次:规范化排版(含把英文直引号包裹的中文短语自动转成弯引号)→ 门禁 1(scripts/check_facts.py)→ 门禁 2(scripts/lint_report.py,硬门禁:语气三句式、无名锚、自有评级、无锚的超/低于预期、内部术语泄露、fact 引用合法性、券商/媒体/推断类表述是否保留限定语等,有 ERROR 就非零退出、不生成 display markdown)→ 把 {fact:claim_id} 重新编号成 [n] 并填入源稿已有的骨架,生成 display markdown。scripts/normalize_report.py、scripts/check_facts.py、scripts/lint_report.py、scripts/make_display_markdown.py 都是它的内部 helper,不要拆开单独跑;命令非零退出时回源稿/事实表改完问题重跑,不能跳过。
命令成功后,用当前环境的飞书文档/云文档创建能力(或降级用 lark-cli + lark-doc 技能)把 display markdown 全文创建成在线文档。最终回复固定为三段:固定风险提示语 → display markdown 正文全文 → 飞书文档链接,不展示中间文件/生成过程。完整流程、facts.json 结构、错误排查见 references/delivery-pipeline.md。
4. 硬约束(Hard Constraints,两种模式共用)
取数与来源
- 取数只有两条工具通道(
general_search+seed_finance_search),不得引入第三条隐藏数据源;两条通道都拿不到的数据如实标"数据缺口",不得补造。 - 无来源数字不入正文:正文里的关键证据数字和关键事实判断必须先登记进事实表(
facts.json的claims)才能引用,写作顺序是"先建事实表、再写正文",不是写完正文再补链接;scripts/finalize_report.py的门禁 2(lint_report.py)会机械校验这一点——正文引用了事实表里没有的claim_id会直接报错、非零退出,不能靠手工检查代替,也不能删掉引用来"绕过"报错。 - 二级/三级来源不得包装成公司披露的确定事实:券商估算、媒体观点、平台自撰文章、作者推断只能显名归因转述,不能写成好像是公司自己披露的确定事实;分级规则见
references/data-grading-and-citation.md第一节。 - 不臆断重要性:公告是否"重大"要依据该市场官方分类/披露规则(如港股的比率测试、美股 8-K 的 33 类法定事项),不要凭标题感觉判断。
- 投资者评论区只作线索,不作事实:同花顺/东方财富等平台的用户评论不得作为事实引用,只能用于定位解读切入点,具体用法见
references/data-grading-and-citation.md第三节。 - 互动平台回复不是正式公告:上证e互动/深证互动易等平台的公司回复视为官方表态,可比照一级来源使用,但要显名标注来源是互动平台,且与正式公告冲突时以正式公告为准。
联动与核查动作
- 联动检索不可省略:单条深度解读不得只看孤立一条公告就下结论,必须先跑
references/linked-signals.md里的历史同类公告与关联公告检索,即便结果是"未发现联动信号"也要写明,不能默认跳过。 - 股价阶段表现检查不可跳过,但展开与否要看判断结果:先按
references/linked-signals.md第四节的量化标准判断股价是否明显偏离常态,这个判断动作本身是必做的;只有判断结果为"是"才需要展开关联动态时间线,判断结果为"否"就一句话带过。
表达与结论强度
- 市场术语与口径不得混用:同一概念在三个市场的官方叫法不同(如 A 股"权益变动"、港股"须予公布的交易/DI 通知"、美股"13D/13G/Form 4"),按
references/markets-taxonomy.md使用该市场的准确术语;利润类指标按市场档案使用对应口径——A 股"归母净利润/扣非",港股"股东应占溢利/经调整",美股中概"GAAP/非 GAAP",不跨市场混用(详见references/writing-style.md第五节)。 - 中概股特殊处理:在美股上市但主要业务在中国的公司,常用 20-F 替代 10-K、6-K 替代 8-K,披露时限和栏目要按这套对照处理,不要套用纯美国公司的时限要求。
- 无锚指标不用"超预期/低于预期":这类表述必须锚定一个具体、可核查的基准并写明基准是什么,找不到明确基准就不用,改成直接陈述数字和历史对比(详见
references/writing-style.md第七节)。 - 不输出评级、目标价、估值倍数:不管信源里出现了什么评级/目标价/估值倍数,本 Skill 自己的结论都不直接输出这三类内容;信源本身包含的可以显名转述为市场观点,不能包装成本 Skill 的结论(详见
references/writing-style.md第六节)。 - 结论强度不超出证据档位:确定性语气只配得上一级来源支撑的事实,二级来源要显名归因带保留措辞,三级来源不能撑起任何结论,数据缺口要显性降级表述,不能为了给出干脆结论而跳过这层保留(详见
references/writing-style.md第八节)。
呈现与交付
- 图表必须用脚本生成,且直接嵌入正文:交付里的图表统一走
scripts/render_charts.py生成,不得手绘或用文字/表情符号拼凑图形,每张图必须有标题、坐标轴单位、来源口径说明;图表要直接用 Markdown 图片语法嵌入源稿/正文,不能只存在于飞书文档这一份附加产物里。 - 文末溯源清单与免责声明不可省略:单条深度解读源稿写完时必须已经包含
references/data-grading-and-citation.md第六节格式的"数据来源"骨架和第七节的免责声明固定文字(不要再附「未获取清单」),scripts/finalize_report.py只把编号列表填进这个骨架,不生成免责声明文字,模型不能等脚本"自动补全";批量摘要至少手工附简版免责声明。 - 执行必须走阶段化流程,不得跳步:单条深度解读必须先创建
_INTERNAL_DO_NOT_DELIVER__READ_00_RESUME_FIRST/目录和恢复入口文件,再按references/delivery-pipeline.md第二节的阶段顺序(检索 → 写事实表 → 写源稿 → finalize(门禁1+门禁2)→ 创建飞书文档 → 对话输出)执行;不允许分析想清楚后直接跳到写最终回复、绕开事实表和门禁。 - 最终回复固定三段式,不暴露内部实现细节:固定风险提示语 → display markdown 正文全文 → 飞书文档链接,顺序不可变、不可省略;不得在回复中展示中间文件列表、"已生成哪些文件"之类的交付清单或生成过程播报,也不得在回复正文里出现
facts.json、finalize_report、playbook、Tier 1/2/3、工作目录名等内部文件/脚本/分类名,除非用户明确要求查看这些内容——scripts/lint_report.py会机械拦截常见的内部术语泄露,但不能完全替代自查。完整契约见references/delivery-pipeline.md。 - 飞书文档创建失败不能连带整体失败:优先用当前环境内置的飞书文档创建能力,没有则降级用
lark-cli+lark-doc技能;文档创建成功后,应以当前运行环境支持且用户可访问的方式提供在线 URL;创建失败时如实告知原因,固定风险提示语和 display markdown 正文依然要完整交付。