用 AI 分析财报的 7 个步骤:从 PDF 到风险检查清单
这篇文章记录了我在贵阳实验室的实战过程。我坚信,在技术下行的时代,程序员唯一的护城河就是通过 AI 建立属于自己的数字资产。
前言
我一直在思考,财报到底该怎么读才够快、够准、够安全。传统的手工阅读往往耗时数小时,信息碎片化后容易漏掉关键风险点。去年,我把 PDF 解析、大模型推理、结构化审计 三个环节全部交给了本地部署的 AI 系统,整个流程压缩到 不到 30 分钟,并且自动生成了一份 风险检查清单。这篇文章把我在实战中踩过的坑、选型的细节、代码实现的要点全部披露出来,帮助同样想用 AI 提升财报分析效率的朋友们快速落地。
适合谁读
- 财务分析师、投研员、独立投资者,想在繁忙的财报季把时间花在判断而不是摘录上。
- 数据科学家、全栈工程师,想把开源大模型嵌入企业内部流程。
- 初创团队、金融科技创业者,需要一套可复用的财报自动审计模板。
1. PDF 文本抽取(OCR + 结构化)
1.1 为什么不直接用 PDF 解析库?
市面上常见的 pdfminer、pdfplumber 对于扫描版财报几乎是零输出,只有文本层的 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,形成可直接在报告中使用的风险检查清单。
如果你想直接测试 AI 财报助手,可一键跳转试用
支持 PDF 批量上传、管理层 Guidance 情绪审计、核心 KPI 指标抽取,免费免登录。
5. 自动化工作流(n8n)
5.1 流程概览
- 文件触发:监控
/data/annual_reports/文件夹,新 PDF 出现时启动。 - PDF → PNG:执行
pdftoppm。 - OCR:调用本地 Tesseract 服务(Docker)。
- 文本清洗:使用 Python 脚本
clean.py输出 JSON。 - 大模型推理:调用本地 Ollama REST API。
- 结果写入:把风险清单写入企业内部知识库(Confluence)或发送到 Slack。
5.2 n8n 节点配置要点
- Execute Command:
pdftoppm→tesseract,确保stderr捕获错误。 - HTTP Request(Ollama):
POST https://localhost:11434/api/generate,HeadersContent-Type: application/json。 - If:检查模型返回
error字段,若有错误触发 Error Workflow(钉钉告警)。 - Slack:
Send Message节点把风险清单以代码块形式推送。
6. 成本与性能评估
| 项目 | 计量方式 | 日均消耗 | 费用 |
|---|---|---|---|
| OCR(Tesseract) | 50 页 PDF | 100 秒 CPU | $0.001 |
| 大模型(llama3:8b) | 1 次推理 2 KB 输入 | 5 秒 GPU | $0.005 |
| n8n 工作流 | 每份报告一次 | 15 秒整体 | $0.001 |
| 合计 | $0.007(约 0.05 元) |
相较于传统人工审计,成本 降低 99.5%,时效提升 10 倍。
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 条)
docker compose up -d启动全部服务。- 在 n8n UI 中导入
financial-report-workflow.json。 - 配置 文件夹监控路径 为
/data/annual_reports/。 - 在 Slack 或 钉钉 中填入对应 Webhook URL。
- 将 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/
准备好分析你的第一份财报了吗?
你可以立刻上传一份 PDF 财报(如 NVIDIA 10-K),体验本工具自动生成的核心 KPI 报表、风险因素和复核清单。