大模型辅助账单整理

经过多年的使用,我已经习惯了使用钱迹这个软件来记账,微信和支付宝账单自动导入时,分类总是和我设想的不一样,因此以前是每隔一段时间就手动录入所有花费,但这样操作费时费力,现在有了大模型,于是写了一个脚本用大模型根据账单备注等信息对每一笔花费按照我设计的方案进行分类。虽然仍然有分类错误的情况,但整体提高了效率。代码和使用流程如下:

钱迹这个软件支持的导入格式是csv,xlsx也可以,但涉及文本格式等问题,所以csv最简便。导入的表格表头需要有时间、分类、类型、金额、备注等信息,并且表头的名称顺序必须和模板一致。因此在python处理表格时要注意生成文件的表头。

微信和支付宝直接导出的账单格式并不统一,考虑到账单可能几个月整理一次,针对不同软件写代码又有点繁琐,还不如手动把输入的表格文件整理好。需要执行的操作包括:表头名称统一为:时间、分类、交易情况、交易对方、备注、类型、金额这几列,其余信息都删了,其中分类是自己新建的空白列,交易情况是微信或支付宝自动生成的分类(如商户消费、发红包等),备注是所有账单中提供的关于这条交易的条目,类型是收入或支出,交易对方和金额都是导出自带的。

代码需要用到的库如下:

1
2
3
4
5
import pandas as pd
import os
import dashscope
from http import HTTPStatus
import time

首先指定大模型的key,并读入文件:

1
2
3
key = "xxxxx"
file_path = r"filename.xlsx"
df = pd.read_excel(file_path)

可以print看一眼输出的内容是否正确。

接着定义分类:

1
2
EXPENSE_CATEGORIES = '三餐, 零食, 衣服, 交通, 娱乐, 旅行, 话费网费, 学习, 日用品, 住房, 美妆, 医疗, 发红包, 请客送礼, 家具, 电器数码, 运动, 水电煤, 快递, 其它'
INCOME_CATEGORIES = '工资, 收红包, 其它'

这是我自己设定的几个分类,可以根据需求随意修改。因为我的分类方案中只有三餐划分了二级分类,所以就不让大模型去填充二级分类而是我手动填充了。

接着逐行读取账单记录,并把每条记录的交易情况、交易对方、备注等相关信息组装起来发给大模型,让大模型返回分类结果,然后将结果填充到分类这一列,如果大模型没判断出来,或者输出有异常,则填充其它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
for idx, row in df.iterrows():
    if pd.isna(row['分类']) or row['分类'] == '':
        # 构造提示词
        messages = [
            {
                "role": "system",
                "content": f"你是一个专业的财务分类助手。支出分类: {EXPENSE_CATEGORIES};收入分类: {INCOME_CATEGORIES}。顺丰速运属于快递类,纯净水属于水电煤类,只返回分类名称,不要其他文字。"
            },
            {
                "role": "user",
                "content": f"交易情况: {row['交易情况'] if pd.notna(row['交易情况']) else ''}\n交易对方: {row['交易对方'] if pd.notna(row['交易对方']) else ''}\n类型: {row['类型']}\n备注: {row['备注'] if pd.notna(row['备注']) else ''}\n请返回分类名称。"
            }
        ]
        response = dashscope.Generation.call(
            api_key=key,
            model="qwen-flash",
            messages=messages
        )
        if response.status_code == HTTPStatus.OK:
            df.at[idx, '分类'] = response.output.text.strip() or '其它'
        else:
            df.at[idx, '分类'] = '其它'
        time.sleep(0.3)

到这里已经完成了分类,可以导出为单独的csv文件:

1
2
3
4
final_columns = ['时间', '分类', '类型', '金额', '交易对方', '备注', '交易情况']
df_final = df[final_columns]
output_path = file_path.replace('.xlsx', '_classified.csv')
df_final.to_csv(output_path, index=False, encoding='utf-8-sig')

存好的文件需要打开逐一核对分类是否准确,并添加需要的二级分类,然后根据需求把交易对方、备注、交易情况这三列合并成备注,我一般是直接删了交易情况,把交易对方和备注两列的文本合起来。

最后进钱迹导入即可。

  • Copyrights © 2020-2026 Kun Li

请我喝杯咖啡吧~

支付宝
微信