用 Python 和 AI 做财务报表分析:从环境搭建到自动出结论
AI财务报表分析的核心思路是:先把财务数据整理成结构化文本或表格,再通过大模型接口让模型按固定格式输出分析结论,最后人工核对关键数字。
本文适合会用一点电脑操作、没写过代码的财务或运维人员,按步骤做完就能跑通一个可重复使用的分析脚本。
先明确你要解决什么问题
动手之前先想清楚分析目标,不同目标对应的数据准备和提示词差别很大:
- 比率计算:让模型算流动比率、资产负债率、毛利率等,需要提供完整的报表科目和金额。
- 趋势对比:对比两到三期报表,需要把多期数据按科目对齐后一起给模型。
- 异常发现:让模型指出科目变动异常或勾稽关系可疑的地方,适合先做初步筛查。
- 文字总结:把报表转成管理层能看懂的说明,适合配合前面三类结果使用。
建议第一次只选一个目标,跑通后再扩展。不要一上来就让模型做完整审计判断,模型输出需要人工复核,不能直接作为对外披露依据。
环境准备:Python 和依赖库
以下步骤在 Windows 10/11、macOS 和主流 Linux 发行版上思路一致。
需要提前准备好:
- 安装 Python 3.9 及以上版本,安装时勾选“Add Python to PATH”。
- 准备一个可调用的大模型 API 密钥,例如 OpenAI 兼容接口的密钥。本文示例使用 OpenAI 官方 Python SDK,其他兼容接口只需改
base_url。 - 财务报表导出为 CSV 或 Excel,建议每张表单独一个文件,科目名称和金额分列存放。
打开终端或命令提示符,执行:
python --version
pip install openai pandas openpyxl
pandas 用来读取和清洗表格,openpyxl 让 pandas 能读 .xlsx 文件,openai 是调用接口的 SDK。
安装完成后用 pip show openai 确认版本,不同大版本 SDK 的调用写法可能有差异,以你安装版本的官方说明为准。
数据清洗:把报表变成模型能读的文本
模型对整齐的“科目 + 金额”文本理解最好。
假设你的利润表文件叫 income.csv,包含“项目”和“本期金额”两列,可以用下面的脚本读取并转成文本:
import pandas as pd
df = pd.read_csv("income.csv")
df = df.dropna(subset=["项目", "本期金额"])
df["本期金额"] = pd.to_numeric(df["本期金额"], errors="coerce")
df = df.dropna(subset=["本期金额"])
text = "\n".join(f"{r['项目']}: {r['本期金额']}" for _, r in df.iterrows())
print(text)
运行后检查输出,确认没有乱码、没有把合计行重复计算。金额单位要统一,比如全部用元或全部用万元,并在提示词里写明单位,否则模型可能把万元当元来解读。
如果数据涉及真实企业敏感信息,先做脱敏或只上传测试数据,再决定是否接入外部接口。
调用模型生成分析结论
下面是一个最小可运行示例,把清洗后的文本放进提示词,要求模型按固定结构输出:
from openai import OpenAI
client = OpenAI(api_key="你的密钥")
prompt = f"""你是一名财务分析助手。以下是某公司利润表数据,金额单位为元:
{text}
请完成:
1. 计算毛利率、净利率(如数据支持);
2. 指出同比或环比变动最大的三个科目;
3. 用 200 字以内给出结论,并说明哪些判断受数据限制。
输出使用 Markdown 列表,不要编造未提供的数字。"""
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=0
)
print(resp.choices[0].message.content)
关键点有三个:temperature=0 让输出更稳定;
提示词里明确“不要编造未提供的数字”;
要求模型说明数据限制,方便你判断结论可信度。
模型名称和可用性会随时间变化,以你所用平台的当前文档为准。
避坑指南:新手最容易踩的四个坑
- 金额单位不统一:元、千元、万元混用会让比率算错,提示词和清洗脚本里都要统一。
- 把合计行当明细:合计行参与计算会重复计数,清洗时过滤掉“合计”“总计”类科目,或单独处理。
- 直接信任模型算数:大模型做加减乘除可能出错,比率类结果建议用 pandas 算好再让模型解读,或对模型输出逐项复核。
- 密钥写死在代码里:不要把密钥提交到代码仓库,改用环境变量读取,例如
os.environ["OPENAI_API_KEY"]。
结果验证:三步确认输出可用
- 核对数字:把模型给出的比率和用计算器或 Excel 公式算出的结果对比,差异超过舍入误差就要查数据。
- 检查引用:模型提到的科目和金额必须能在原始报表中找到,找不到的视为编造。
- 复查结论边界:确认模型是否说明了数据缺失、期间不可比等限制,没有说明的结论不要直接使用。
如果接口返回 401,检查密钥是否正确;
返回 429 通常是频率或额度限制,降低调用频率或检查账户余额;
连接超时先确认本机网络能否访问接口地址,再检查代理设置。
AI财务报表分析能明显减少整理和初稿时间,但结论的准确性仍取决于数据质量和人工复核。
建议先用历史报表跑一遍,把脚本和提示词固定下来,再逐步接入更多报表类型。