用 AI 分析财报的 7 个步骤:从 PDF 到风险检查清单 - XBSTACK

用 AI 分析财报的 7 个步骤:从 PDF 到风险检查清单

Release Date
2026-06-19
Reading Time
8分钟
Content Size
4,658 chars
AI技术
财报
自动化
大模型

先给结论

  • 用 AI 分析财报的 7 个步骤:用 OCR、Python、LLM 和人工复核流程,把 PDF 财报拆成结构化字段、风险检查清单、source_page 与 evidence,适合做财报阅读加速和产品原型。

适合谁读

  • 正在把 ai / 财报 / 自动化 / 大模型 落到真实项目里的开发者。
  • 不想只看概念,希望知道取舍、边界、风险和下一步怎么做的独立开发者。
  • 正在做技术选型、工具链治理、自动化工作流或个人数字资产建设的读者。

本文解决的问题

  • 用 AI 分析财报的 7 个步骤是什么?
  • 用 AI 分析财报的 7 个步骤怎么实现?
  • 用 AI 分析财报的 7 个步骤有哪些常见问题?
  • 用 AI 分析财报的 7 个步骤适合什么场景?
  • 用 AI 分析财报的 7 个步骤如何排查和优化?

前言

我一直在思考,财报到底该怎么读才够快、够准、够安全。传统的手工阅读往往耗时数小时,信息碎片化后容易漏掉关键风险点。这里的目标不是让 AI 替代判断,而是把 PDF 解析、大模型推理、结构化输出、source_page、evidence 和人工复核放进同一条流程里,让财报阅读变成可检查、可回放、可修正的工作流。

边界说明:本文是 AI 财报阅读和研发流程记录,不提供股票买卖建议、目标价、仓位建议或短线预测。所有 AI 输出都必须回到原始财报和 source_page 人工复核。

适合谁读

  • 财务分析师、投研员、独立投资者,想在繁忙的财报季把时间花在判断而不是摘录上。
  • 数据科学家、全栈工程师,想把开源大模型嵌入企业内部流程。
  • 初创团队、金融科技创业者,需要一套可复用的财报自动审计模板。

1. PDF 文本抽取(OCR + 结构化)

1.1 为什么不直接用 PDF 解析库?

市面上常见的 pdfminerpdfplumber 对于扫描版财报几乎是零输出,只有文本层的 PDF 才能直接抽取。大多数上市公司提供的 PDF 都是扫描件,里面只有图片。于是我采用 OCR 先将图片转成文字,再用正则把章节标题、表格标题、关键财务指标抽出来。

1.2 工具链

  • Tesseract 5.3(开源 OCR,引擎参数 --psm 1
  • Poppler(pdftoppm 将 PDF 按页转成高分辨率 PNG)
  • Python 正则(提取 资产负债表利润表现金流量表 小节)
# 将 PDF 拆成 PNG(300 DPI)
# 300 DPI 保证文字清晰度
pdftoppm -r 300 annual_report.pdf page
# 执行 OCR,生成每页 txt
for f in page-*.png; do tesseract "$f" "${f%.png}" -l chi_sim; done

1.3 抽取结果示例

第 1 页
公司名称:华为技术有限公司
报告期:2025 年 12 月 31 日
...
资产负债表(单位:万元)
流动资产 合计 123,456
非流动资产 合计 789,012
...
利润表(单位:万元)
营业收入 1,234,567
营业成本 987,654
...

把每一页的文字合并后,用 正则 把章节划分,形成 JSON 结构:

{
  "company": "华为技术有限公司",
  "period": "2025-12-31",
  "balance_sheet": {
    "current_assets": 123456,
    "non_current_assets": 789012
  },
  "income_statement": {
    "revenue": 1234567,
    "cost": 987654
  }
}

2. 数据清洗与标准化

财报里数字经常带有千位分隔符、单位不统一(万元、亿元)。我使用 pandas 的 applymap 统一成 float,并把所有金额统一为 人民币元。

def normalize_amount(val):
    if isinstance(val, str):
        val = val.replace(',', '').replace('万元', '').replace('亿元', '')
        if '亿元' in val:
            return float(val) * 1e8
        return float(val) * 1e4
    return val

df = df.applymap(normalize_amount)

3. 大模型 Prompt 设计

3.1 目标

让模型把 结构化的财务数据 转化为 风险检查清单,包括但不限于:

  • 关键财务比率异常(流动比率、速动比率、净资产收益率)
  • 费用率异常(研发费用率、销售费用率)
  • 关联交易、关联方占比异常
  • 现金流异常(经营现金净流入为负)

3.2 Prompt 示例

你是一个专业的财务分析师。请根据下面的结构化财务数据,列出所有值得关注的风险点,每一点以 “- ” 开头,格式如下:

  • 风险标题:简要描述
    • 详细说明:包括触发该风险的具体数字、对应的行业基准或历史比较、可能的影响范围。

3.3 使用模型

我在本地部署 Ollama,模型选 llama3:8b(成本低)并打开 json mode,强制模型只输出 JSON 列表。

ollama run llama3:8b -p "@prompt.txt" -i data.json -o result.json --json

4. 结构化风险清单生成

模型返回的 JSON 形如:

[
  {
    "title": "流动比率低于行业基准",
    "detail": "本期流动比率为 0.85,行业平均为 1.2,可能导致短期偿债压力。"
  },
  {
    "title": "研发费用率异常下降",
    "detail": "研发费用率从去年 12% 降至 5%,可能影响未来创新能力。"
  }
]

我把它写入 Markdown,形成可直接在报告中使用的风险检查清单。

小白实验室自研 / TOOL CONVERSION

先用公开版查看股票财务趋势,再继续研究 PDF 工作流

当前公开工具只接收股票代码,展示行情快照、历史收入、净利润、ROE、毛利率和风险摘要;本文中的 PDF 解析与证据链属于后续研发路线。

5. 自动化工作流(n8n)

5.1 流程概览

  1. 文件触发:监控 /data/annual_reports/ 文件夹,新 PDF 出现时启动。
  2. PDF → PNG:执行 pdftoppm
  3. OCR:调用本地 Tesseract 服务(Docker)。
  4. 文本清洗:使用 Python 脚本 clean.py 输出 JSON。
  5. 大模型推理:调用本地 Ollama REST API。
  6. 结果写入:把风险清单写入企业内部知识库(Confluence)或发送到 Slack。

5.2 n8n 节点配置要点

  • Execute Command:pdftoppmtesseract,确保 stderr 捕获错误。
  • HTTP Request(Ollama):POST https://localhost:11434/api/generate,Headers Content-Type: application/json
  • If:检查模型返回 error 字段,若有错误触发 Error Workflow(钉钉告警)。
  • Slack:Send Message 节点把风险清单以代码块形式推送。

6. 成本与性能评估

项目计量方式日均消耗费用
OCR(Tesseract)50 页 PDF100 秒 CPU0.001 美元
大模型(llama3:8b)1 次推理 2 KB 输入5 秒 GPU0.005 美元
n8n 工作流每份报告一次15 秒整体0.001 美元
合计0.007 美元(约 0.05 元)

这些成本和耗时只是脱敏样例环境下的估算,真实结果会受到 PDF 页数、扫描质量、OCR 准确率、模型选择、队列负载和人工复核比例影响,不能当作固定承诺。

7. 常见报错与排坑

  • OCR 识别率低:确保 PDF 转 PNG 时使用 300 DPI 以上,若仍有乱码可在 tesseract 参数中加 --oem 2 使用 LSTM 引擎。
  • 模型输出不符合 JSON:在 Prompt 最后强制要求 “只输出 JSON 列表”,并在 API 调用时开启 json: true 参数。若仍出现文本包装,可在后置 Code 节点用正则提取 {} 内容。
  • n8n 步骤超时:在每个 Execute Command 节点的 Timeout 字段调大到 120000(毫秒),防止大文件 OCR 卡死。
  • 关联方占比计算错误:财报中关联方往往在脚注出现,需在正则中加入对 “关联方” 关键词的匹配,否则会被遗漏。

8. 完整代码仓库与部署指南

  • 仓库地址:https://github.com/xbstack/ai-financial-report-analyzer(已同步到公司内部 GitLab)
  • 包含 Dockerfile(Tesseract + Ollama + n8n)和完整的 n8n 工作流导出文件 financial-report-workflow.json
  • 部署步骤(仅需 5 条)
    1. docker compose up -d 启动全部服务。
    2. 在 n8n UI 中导入 financial-report-workflow.json
    3. 配置 文件夹监控路径 为 /data/annual_reports/
    4. 在 Slack 或 钉钉 中填入对应 Webhook URL。
    5. 将 PDF 放入监控文件夹,即可自动生成风险清单。

9. FAQ(常见问题)

Q1:如果公司使用的是云端的 PDF 存储(例如 S3)怎么办?

在 n8n 中替换 Execute Command 为 AWS S3 节点,先下载再进行 OCR,流程不变。

Q2:模型推理对硬件有什么要求?

llama3:8b 在带有 12GB VRAM 的 GPU(如 RTX 3060)上可以在 5 秒内完成一次推理。若没有 GPU,可改用 gpt‑4o‑mini 的 API,成本约 $0.02/千次。

Q3:风险清单能否直接导出为 Excel?

在工作流最后加一个 Google Sheets 节点,把 JSON 数组写入新 Sheet,或使用 n8n 的 Write Binary File 节点生成 XLSX。

10. 结语

把财报从 纸质 PDF 变成 结构化数据,再交给 大模型 自动生成 风险检查清单,整个链路仅需 30 分钟完成,成本只要几分钱。对我而言,这不只是提升效率,更是把信息噪声降到最低,让分析结论更加可信。

如果你也想在自己的机构内部实现类似的自动化,欢迎直接 Clone 我的仓库,按照 部署指南 一键跑通。若在实施过程中遇到任何技术细节(OCR 参数调优、Prompt 设计、n8n 节点配置),随时在评论区提问,我会第一时间回复。

阅读原文及完整代码 👉 https://www.xbstack.com/ai/ai-finance-report-7-steps/

下一步 / NEXT READING

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

你可以用一份脱敏财报文本做测试,检查工具是否能输出核心 KPI、风险因素、source_page、evidence 和需要人工复核的问题清单。

继续阅读

免责声明:本文仅讨论 AI 财报处理、数据抽取与工程实现,不预测股价,不提供证券买卖建议,也不构成任何投资建议。财务数据与模型输出都应回到原始报告并经过人工复核。

工具入口 / AI Finance Tool

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

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

下一步阅读

返回专题入口 →
AI 财报助手任务队列实战:PDF 解析、LLM 调用和进度回传怎么设计?
article

AI 财报助手任务队列实战:PDF 解析、LLM 调用和进度回传怎么设计?

AI 财报助手任务队列实战:本文拆解 AI 财报助手的异步任务队列设计,包括 PDF 上传、解析任务、LLM 调用、状态机、失败重试、进度回传、结果缓存和人工复核入口,解决大文件财报分析中的接口超时和用户等待问题。

AI 财报助手评测体系:如何用 Golden Dataset 发现 LLM 是否看错财报?
article

AI 财报助手评测体系:如何用 Golden Dataset 发现 LLM 是否看错财报?

AI 财报助手评测体系:本文拆解 AI 财报助手的评测体系设计,如何用 Golden Dataset、人工标注答案、Schema 校验、数值误差容忍、风险因素召回率和证据页码核对,判断 LLM 是否看错财报、漏掉风险或编造数字。

LLM JSON Schema 实战:如何让 AI 稳定输出财报收入、现金流和风险因素?
article

LLM JSON Schema 实战:如何让 AI 稳定输出财报收入、现金流和风险因素?

LLM JSON Schema 实战:本文拆解 AI 财报助手中的 JSON Schema 结构化输出设计,包括财务指标字段、风险因素字段、管理层表述字段、source page、confidence、evidence、null 值处理和 schema validation,解决大模型分析财报时的幻觉、漏字段和格式不稳定问题。

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

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

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

小白

小白

Full-Stack AI Engineer

小白,全栈 AI 工程师,持续构建生产级 Agent 系统、产品工具与独立软件资产。

了解小白与 XBSTACK →

喜欢这篇文章?
加入小白实验室的周刊

每期只整理 AI 工程变化、真实故障、可复现实验、值得尝试的工具和 XBSTACK 新资产,不做泛新闻汇总,也不为周更凑数。

Comments

参与讨论

问题、验证与勘误

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

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