XBSTACK XBSTACK
小白 / Xiaobai

小白 / Xiaobai

开发者 · 产品构建者

持续构建 AI 工程系统、开发者工具与长期数字资产。

关于作者与 XBSTACK →
AI 财报助手技术实现:如何把财报 PDF 拆成结构化风险检查清单?

AI 财报助手技术实现:如何把财报 PDF 拆成结构化风险检查清单?

AI 财报助手技术实现:深入拆解 AI 财报助手的技术实现思路,包括 PDF 解析、章节切分、表格抽取、LLM 结构化抽取、JSON Schema 输出、风险因素提取、管理层语气分析以及人工复核清单生成。

发布 · 2026-06-207 分钟阅读XBSTACK 原创
#AI Agent#AI 财报分析#LLM#PDF 解析#JSON Schema#结构化抽取#RAG#AI 投研工具

适合谁读

  • AI 开发者:想在金融场景实现可靠的文档解析与结构化抽取。
  • 投研 analyst:需要将年度/季报转化为机器可读的 JSON,便于横向对比。
  • 产品经理:了解技术实现背后的设计思路,为金融 AI 产品制定 roadmap。
  • 技术写作者:参考本文的 ARO(TL;DR‑问题‑受众‑结论‑坑‑对比‑FAQ‑继续阅读)结构撰写同类技术文档。

1 为什么 AI 财报助手不是简单把 PDF 丢给大模型

财报 PDF 与普通文章不同,包含以下要素:

  1. 正文段落、脚注、页眉页脚。
  2. 关键的财务表格,列名、单位、币种必须保留。
  3. 风险因素章节、管理层讨论(MD&A)以及电话会 Q&A。 直接把整份 PDF 丢给模型会出现三大问题:
  • 上下文长度:财报常常超过三万字符,超过大多数模型的上下文窗口。
  • 表格错位:纯文本抽取失去表格列结构,模型难以定位具体数值。
  • 幻觉风险:模型倾向于“填补”不存在的数字或结论,产生虚假数据。

解决思路是先把原始材料结构化,再交给模型进行受控抽取。

2 第一层:PDF 解析,文本 & 表格双重抽取

  • 文本抽取 使用 pdfplumberpoppler,保留页码、章节标题、脚注。
  • 表格抽取 使用 camelotflavor='stream')或 tabula-py,输出每页表格的二维数组,随后统一列名、单位、币种。
  • OCR 备份 对扫描版 PDF 采用 tesseract,抽取后通过正则校验金额、日期等关键字段。
  • 元数据 为每段文本或表格添加 sourcePagesourceSectionsourceFile,便于后续追溯。

示例抽取结果(JSON):

{
  "page": 12,
  "section": "Consolidated Statements of Operations",
  "type": "table",
  "raw": [
    ["Year", "Revenue", "Cost of Revenue", "Gross Profit"],
    ["2024", "$1.2B", "$800M", "$400M"]
  ],
  "normalized": {
    "year": 2024,
    "revenue": 1200000000,
    "cost_of_revenue": 800000000,
    "gross_profit": 400000000,
    "currency": "USD"
  }
}

3 第二层:按财报结构切分 Chunk,而不是固定字数

财报的自然结构包括以下几类 Chunk:

  • Business Overview:公司业务概览、市场定位。
  • Financial Statements:资产负债表、利润表、现金流量表,每张表单单独作为 Chunk,保持表格结构。
  • Management Discussion & Analysis (MD&A):管理层对业绩的分析,需捕捉情感倾向。
  • Risk Factors:法规、市场、供应链等风险,逐条抽取。
  • Notes to Financial Statements:会计政策、估计变更。
  • Earnings Call Q&A:投资者提问与管理层回答。

每个 Chunk 必须携带 sectionNamepageRangesourceFile,确保后续 LLM 能够在提示中引用原始位置。

4 第三层:使用 JSON Schema 固定抽取输出

使用 JSON Schema 强制模型只能在预定义字段内输出,任何未匹配的内容必须返回 null。示例 Schema:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "revenue": {"type": ["number", "null"]},
    "gross_margin": {"type": ["number", "null"]},
    "operating_income": {"type": ["number", "null"]},
    "net_income": {"type": ["number", "null"]},
    "operating_cash_flow": {"type": ["number", "null"]},
    "free_cash_flow": {"type": ["number", "null"]},
    "cash_and_equivalents": {"type": ["number", "null"]},
    "total_debt": {"type": ["number", "null"]},
    "source_pages": {"type": "array", "items": {"type": "integer"}}
  },
  "required": ["source_pages"]
}

在系统提示中明确要求模型 只输出符合上述 Schema 的 JSON,并在每个字段后附带 source_page。后处理阶段使用 ajv(JavaScript)或 jsonschema(Python)进行校验,若不符合则将对应字段置为 null 并记录错误日志。

小白实验室自研 / TOOL CONVERSION

如果你想直接测试 AI 财报助手,可一键跳转试用

支持 PDF 批量上传、管理层 Guidance 情绪审计、核心 KPI 指标抽取,免费免登录。

5 第四层:风险因素抽取,聚焦真实业务风险

风险类别包括:客户集中、监管、供应链、汇率、库存、应收账款、债务、诉讼、商誉减值等。抽取时在 Risk Factors 章节使用 Few‑Shot 示例,引导模型输出如下结构:

{
  "risk_type": "customer_concentration",
  "risk_summary": "前五大客户贡献 68% 收入,下降 5% 为负面信号",
  "severity": "medium",
  "evidence": "第 23 页:我们的前五大客户占比 68%",
  "source_page": 23
}

对比当前报告与上一次报告的风险字段,标记 is_newchanged_severity,帮助 analyst 快速定位新增风险。

6 第五层:管理层语气分析

将 MD&A 与电话会 Q&A 中的关键句子映射为情感维度:demand、margin、guidance、competition、inventory、customer_budget、macro_uncertainty。使用句向量相似度(如 sentence-transformers)对比本期与上期相同章节的语句,计算情感分值差异。示例输出:

{
  "dimension": "guidance",
  "prev_phrase": "我们预计明年收入将保持 15% 增长",
  "curr_phrase": "鉴于市场不确定性,收入增长可能放缓至 8%",
  "trend": "downward",
  "severity": "high",
  "source_page": 45
}

7 第六层:生成人工复核清单

复核清单是 AI → 人 → AI 循环的关键环节。每条清单必须指向原始证据,方便 analyst 核实。示例清单:

  1. 收入增长是否全部来源于主营业务?(见 2024 财年收入明细第 12‑14 页)
  2. 自由现金流是否低于净利润 20%?(现金流量表第 30 行)
  3. 毛利率下降是否因原材料成本上涨还是价格压缩?(营业成本分析第 18‑19 页)
  4. 管理层是否在 MD&A 中暗示 2025 年指引下调?(风险提示第 22‑23 页)
  5. 风险因素章节是否出现 “regulatory scrutiny” 新增项?(第 27 页)

8 常见坑 / 常见报错

症状可能原因解决方案
LLM 输出未包含 source_pagePrompt 未明确要求在系统提示中加入 “每个字段后必须提供 source_page”。
表格抽取后列错位PDF 使用了合并单元格使用 camelotflavor='stream' 并自行后处理合并单元格。
JSON Schema 校验失败金额单位未统一(如 $1.2B在抽取阶段统一转化为数值(乘以 10⁹),并在校验前做单位标准化。
风险因素抽取出现空值Risk Factors 章节标题不标准在 Chunk 切分阶段使用正则匹配 “Risk Factors” 与本地化标题(如 “风险因素”)。
复核清单遗漏关键证据章节切分时未保留页码确保每个 Chunk 带 pageRange,并在生成清单时引用。

9 对比块 (AI 财报助手 vs 传统财报分析工具)

维度传统工具(Excel + 手工)AI 财报助手
速度半天至数天,取决于报告页数5‑10 分钟完成全部抽取
准确性人工录入易出错,表格需逐行核对自动校验 JSON Schema,错误可追溯
可复用性每份报告需重新建模同一 Schema 可跨公司、跨季度复用
风险识别依赖分析师经验,覆盖面有限结构化风险抽取覆盖全部 Risk Factors 章节
成本人工成本高,软件授权费基于开源库,服务器成本可控

继续阅读 (内部链接)

下一步 / NEXT READING

准备好分析你的第一份财报了吗?

你可以立刻上传一份 PDF 财报(如 NVIDIA 10-K),体验本工具自动生成的核心 KPI 报表、风险因素和复核清单。

工具入口 / AI Finance Tool

把这篇文章里的财报抽取逻辑,放进爱财报工具里跑一遍

AI 财报文章统一导向工具页:上传财报、查看 JSON Schema、source_page、evidence 字段和人工复核流程。该工具只做信息压缩和结构化分析,不构成投资建议。

继续阅读

返回专题 →
LLM JSON Schema 实战:如何让 AI 稳定输出财报收入、现金流和风险因素?LLM JSON Schema 实战:本文拆解 AI 财报助手中的 JSON Schema 结构化输出设计,包括财务指标字段、风险因素字段、管理层表述字段、source page、confidence、evidence、null 值处理和 schema validation,解决大模型分析财报时的幻觉、漏字段和格式不稳定问题。AI 财报助手任务队列实战:PDF 解析、LLM 调用和进度回传怎么设计?AI 财报助手任务队列实战:本文拆解 AI 财报助手的异步任务队列设计,包括 PDF 上传、解析任务、LLM 调用、状态机、失败重试、进度回传、结果缓存和人工复核入口,解决大文件财报分析中的接口超时和用户等待问题。AI 财报助手评测体系:如何用 Golden Dataset 发现 LLM 是否看错财报?AI 财报助手评测体系:本文拆解 AI 财报助手的评测体系设计,如何用 Golden Dataset、人工标注答案、Schema 校验、数值误差容忍、风险因素召回率和证据页码核对,判断 LLM 是否看错财报、漏掉风险或编造数字。用 AI 分析财报的 7 个步骤:从 PDF 到风险检查清单用 AI 分析财报的 7 个步骤:用 OCR、Python、LLM 和人工复核流程,把 PDF 财报拆成结构化字段、风险检查清单、source_page 与 evidence,适合做财报阅读加速和产品原型。

AI 工程周报

只发真正改变工程判断的变化、故障、实验和新资产。

评论与补充证据

参与讨论

问题、验证与勘误

登录后可发表评论。所有新评论先进入审核;审核期间仅评论者本人和管理员可见,通过后才公开。

登录评论 审核后公开
正在加载评论区…