零基础用AI做财务对账:从环境准备到自动核验的完整流程
如果你手头有两份表格——一份银行流水、一份内部账务记录,想用AI快速找出对不上的条目,这篇教程就是为你准备的。
下面从零开始,用Python脚本调用大模型API完成金额和摘要的比对,并给出每一步的验证方法。
整个过程不需要财务系统开发经验,但需要你能在电脑上运行命令。
先理清适用场景和前提条件
这个方法适合单次对账量在几千条以内、格式相对固定的Excel或CSV文件。
如果流水条目超过一万条,建议先按日期或账号拆分,否则API调用费用和响应时间都会明显上升。
你需要准备三样东西:
- 一台能联网的电脑(Windows、macOS或Linux均可),安装Python 3.9以上版本;
- 一个大模型API密钥(如DeepSeek、通义千问、OpenAI等),本文以通用HTTP接口为例,不绑定具体厂商;
- 两份示例文件:
bank.csv(银行流水)和ledger.csv(账务记录),至少包含日期、金额、摘要三个字段。
注意:不要把真实客户名称、账号等敏感信息直接发给第三方API。
建议先用脱敏后的数据测试,正式使用时在本地做字段替换。
搭建运行环境并安装依赖
打开终端(Windows用PowerShell或CMD),依次执行以下命令创建虚拟环境并安装库:
python -m venv finance-ai
# Windows激活
finance-ai\Scripts\activate
# macOS/Linux激活
source finance-ai/bin/activate
pip install pandas requests python-dotenv
安装完成后,在项目目录新建.env文件,写入你的API密钥和接口地址(以实际服务商为准):
API_KEY=你的密钥
API_URL=https://api.example.com/v1/chat/completions
验证环境是否正常:
python -c "import pandas, requests; print('ok')"
终端输出ok即表示依赖安装成功。
编写对账脚本的核心步骤
新建reconcile.py,按以下顺序实现。
第一步:读取并清洗数据。
用pandas加载两个CSV,统一金额为两位小数,日期转为字符串:
import pandas as pd
bank = pd.read_csv('bank.csv', dtype=str)
ledger = pd.read_csv('ledger.csv', dtype=str)
bank['金额'] = bank['金额'].astype(float).round(2)
ledger['金额'] = ledger['金额'].astype(float).round(2)
第二步:构造比对提示词。
将每一行流水和账务记录拼成一段文本,要求模型判断是否匹配并输出JSON:
prompt = f"""对比以下两条记录,判断是否为同一笔交易。
银行流水:日期{bank_date},金额{bank_amt},摘要{bank_memo}
账务记录:日期{ledger_date},金额{ledger_amt},摘要{ledger_memo}
只返回JSON:{{"match": true/false, "reason": "简短理由"}}"""
第三步:调用API并解析结果。
用requests发送POST请求,注意设置超时和异常捕获:
import requests, json, os
from dotenv import load_dotenv
load_dotenv()
headers = {"Authorization": f"Bearer {os.getenv('API_KEY')}"}
data = {"model": "你的模型名", "messages": [{"role": "user", "content": prompt}], "temperature": 0}
resp = requests.post(os.getenv('API_URL'), headers=headers, json=data, timeout=30)
result = json.loads(resp.json()['choices'][0]['message']['content'])
第四步:批量循环并输出差异表。
将不匹配的记录写入diff.csv,方便人工复核。
循环时建议每处理50条暂停1秒,避免触发接口限流。
容易踩坑的几个地方
- 金额格式不一致:银行流水可能带千分位逗号或货币符号,读取后先用
str.replace清理再转float,否则比对全部失败。 - 日期格式差异:一方是
2025/01/01,另一方是2025-01-01,建议统一用pd.to_datetime转换后再格式化。 - 模型返回非JSON:提示词中明确“只返回JSON”,并在代码里用
try...except包裹解析,解析失败时记录原始返回内容,不要直接中断整个脚本。 - API超时或限流:设置
timeout=30并增加重试逻辑(如requests.adapters.HTTPAdapter配合Retry),不要无限重试。 - 敏感数据泄露:测试阶段用假数据,正式环境考虑本地部署开源模型或对字段做哈希替换。
验证对账结果是否可信
脚本运行结束后,打开diff.csv,人工抽查10条标记为“不匹配”的记录,确认模型给出的理由是否合理。
同时统计匹配率:如果匹配率低于70%,优先检查数据清洗步骤,而不是怀疑模型能力。
另一个验证方法是构造已知答案的测试集:手动准备5对完全相同的记录和5对明显不同的记录,运行脚本看模型是否全部判断正确。
全部通过后再处理真实数据。
最后,将每次运行的匹配率、耗时和差异条数记录到日志文件,方便后续对比不同提示词或模型版本的效果。
常见疑问
没有编程基础,能用现成工具吗?
可以。部分财务软件已内置智能对账功能,但通常需要付费或绑定特定银行接口。本文的脚本方式更适合想自定义规则、控制成本的场景。
API调用费用大概多少?
费用取决于服务商定价和调用次数,无法给出统一数字。建议先用少量数据测试,在服务商控制台查看每次调用的token消耗,再估算全量成本。
对账结果需要人工复核吗?
需要。AI适合做初步筛选和差异标记,最终确认仍应由财务人员完成,尤其是涉及大额或跨期交易时。
如果你在运行脚本时遇到报错,先检查.env文件是否被正确加载、API地址是否完整、以及返回内容是否被意外截断。
按本文步骤完整执行一遍,再根据自己的数据格式微调字段名即可。