效果先看:AI智能体生成的账单报告长这样
每月月底,我花5分钟导出微信和支付宝的账单CSV文件,扔给AI智能体处理。几分钟后,它给我生成一份这样的报告:
- 消费结构饼图:清晰显示餐饮、购物、交通等各类支出占比
- 月度趋势折线图:展示本月与上月的消费对比,一眼看出变化
- 异常支出提醒:自动标记超过设定阈值的大额消费(比如单笔超过500元)
- 分类统计表格:详细列出每类支出的金额和占比
不用再打开Excel手动分类统计,也不用纠结“钱到底花哪儿了”——AI智能体全搞定。下面我分享具体实现方法。
准备工作:导出账单CSV文件
首先,你需要从微信和支付宝导出账单:
微信账单导出步骤
- 打开微信 → 我 → 服务 → 钱包 → 账单 → 常见问题 → 下载账单
- 选择“用于个人对账”,设置时间范围(比如整个月),填写邮箱
- 收到加密压缩包,解压密码在微信支付消息中查看
支付宝账单导出步骤
- 打开支付宝 → 我的 → 账单 → 右上角“...” → 开具交易流水证明
- 选择“用于个人对账”,设置时间范围,填写邮箱
- 收到CSV文件,无需解压密码
吐槽一下:微信的加密压缩包设计真是反人类,每次都要翻消息找密码。不过为了数据安全,忍了。
核心代码:AI智能体账单分析程序
我用Python写了个智能体程序,主要依赖pandas处理数据、matplotlib画图。以下是完整代码:
import pandas as pd
import matplotlib.pyplot as plt
import os
from datetime import datetime
class BillAnalyzer:
def __init__(self, wechat_csv, alipay_csv, output_dir='reports'):
"""初始化分析器,传入微信和支付宝CSV文件路径"""
self.wechat_csv = wechat_csv
self.alipay_csv = alipay_csv
self.output_dir = output_dir
os.makedirs(output_dir, exist_ok=True)
# 消费分类映射(根据你的消费习惯调整)
self.category_map = {
'餐饮': ['美食', '外卖', '餐厅', '咖啡'],
'购物': ['淘宝', '京东', '超市', '服饰'],
'交通': ['滴滴', '地铁', '公交', '加油'],
'娱乐': ['电影', 'KTV', '游戏', '会员'],
'生活': ['水电', '房租', '物业', '维修'],
'其他': [] # 未匹配的归为此类
}
def load_data(self):
"""加载并合并微信支付宝数据"""
# 读取微信CSV(注意编码问题)
try:
df_wechat = pd.read_csv(self.wechat_csv, encoding='gbk')
except:
df_wechat = pd.read_csv(self.wechat_csv, encoding='utf-8')
# 微信数据清洗
df_wechat = df_wechat[['交易时间', '交易类型', '商品', '金额(元)', '支付方式']]
df_wechat.columns = ['time', 'type', 'description', 'amount', 'channel']
df_wechat['amount'] = df_wechat['amount'].astype(str).str.replace('¥', '').astype(float)
df_wechat['source'] = '微信'
# 读取支付宝CSV
df_alipay = pd.read_csv(self.alipay_csv)
df_alipay = df_alipay[['交易创建时间', '商品名称', '金额(元)']]
df_alipay.columns = ['time', 'description', 'amount']
df_alipay['type'] = '支出' # 支付宝数据需要补充类型
df_alipay['channel'] = '支付宝'
df_alipay['source'] = '支付宝'
# 合并数据
self.df = pd.concat([df_wechat, df_alipay], ignore_index=True)
self.df['time'] = pd.to_datetime(self.df['time'])
self.df = self.df[self.df['type'].str.contains('支出')] # 只保留支出
print(f"加载完成!总支出记录数:{len(self.df)}")
def categorize_spending(self):
"""智能分类消费"""
def get_category(desc):
desc = str(desc).lower()
for category, keywords in self.category_map.items():
for kw in keywords:
if kw.lower() in desc:
return category
return '其他'
self.df['category'] = self.df['description'].apply(get_category)
def analyze(self):
"""执行完整分析"""
self.load_data()
self.categorize_spending()
# 按分类统计
category_summary = self.df.groupby('category')['amount'].agg(['sum', 'count'])
category_summary['percentage'] = category_summary['sum'] / category_summary['sum'].sum() * 100
# 检测异常支出(单笔超过500元)
threshold = 500
abnormal = self.df[self.df['amount'] > threshold]
# 生成报告
self.generate_report(category_summary, abnormal)
return category_summary, abnormal
def generate_report(self, category_summary, abnormal):
"""生成可视化报告"""
# 创建图表
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# 1. 消费结构饼图
axes[0, 0].pie(category_summary['sum'], labels=category_summary.index, autopct='%1.1f%%')
axes[0, 0].set_title('消费结构分布')
# 2. 分类金额柱状图
category_summary['sum'].plot(kind='bar', ax=axes[0, 1], color='skyblue')
axes[0, 1].set_title('各分类消费金额')
axes[0, 1].set_ylabel('金额(元)')
axes[0, 1].tick_params(axis='x', rotation=45)
# 3. 异常支出表格(文本)
if len(abnormal) > 0:
abnormal_text = '\n'.join([
f"{row['time'].date()} {row['description'][:20]}... ¥{row['amount']:.2f}"
for _, row in abnormal.iterrows()
])
else:
abnormal_text = "本月无异常大额支出"
axes[1, 0].text(0.1, 0.5, f"异常支出提醒(>500元):\n\n{abnormal_text}",
verticalalignment='center', fontsize=10)
axes[1, 0].axis('off')
axes[1, 0].set_title('异常支出检测')
# 4. 统计摘要
total_spent = self.df['amount'].sum()
avg_daily = total_spent / self.df['time'].dt.date.nunique()
summary_text = f"""月度支出摘要:
总支出:¥{total_spent:.2f}
日均支出:¥{avg_daily:.2f}
总交易笔数:{len(self.df)}
最多消费分类:{category_summary['sum'].idxmax()}
"""
axes[1, 1].text(0.1, 0.5, summary_text, verticalalignment='center', fontsize=11)
axes[1, 1].axis('off')
axes[1, 1].set_title('统计摘要')
plt.tight_layout()
# 保存报告
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
report_path = os.path.join(self.output_dir, f'bill_report_{timestamp}.png')
plt.savefig(report_path, dpi=150)
plt.close()
print(f"报告已生成:{report_path}")
# 同时保存详细数据到CSV
detail_path = os.path.join(self.output_dir, f'bill_detail_{timestamp}.csv')
self.df.to_csv(detail_path, index=False, encoding='utf-8-sig')
print(f"详细数据已保存:{detail_path}")
# 使用示例
if __name__ == '__main__':
analyzer = BillAnalyzer('wechat_bill.csv', 'alipay_bill.csv')
summary, abnormal = analyzer.analyze()
print("\n分类统计:")
print(summary)
if len(abnormal) > 0:
print("\n异常支出:")
print(abnormal[['time', 'description', 'amount']])
如何使用这个AI智能体
- 安装依赖:确保已安装Python3,然后运行
pip install pandas matplotlib - 准备数据:将导出的微信支付宝CSV文件放在同一目录,重命名为
wechat_bill.csv和alipay_bill.csv - 运行程序:将上面的代码保存为
bill_analyzer.py,运行python bill_analyzer.py - 查看结果:程序会在
reports文件夹生成PNG图片报告和详细数据CSV
个性化调整:你可以修改代码中的category_map字典,添加自己的消费关键词;调整threshold值改变异常支出检测标准。
进阶玩法:让AI智能体更聪明
基础版本已经够用,但如果你想让智能体更智能:
1. 自动邮件发送报告
添加SMTP代码,每月自动将报告发送到邮箱:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
def send_report(email_to, report_path):
msg = MIMEMultipart()
msg['Subject'] = '月度家庭账单报告'
msg['From'] = 'your_email@gmail.com'
msg['To'] = email_to
with open(report_path, 'rb') as f:
img = MIMEImage(f.read())
img.add_header('Content-Disposition', 'attachment', filename='bill_report.png')
msg.attach(img)
# 配置SMTP发送(以Gmail为例)
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login('your_email@gmail.com', 'your_app_password')
server.send_message(msg)
server.quit()
2. 集成ChatGPT API自动分析
将消费数据发送给GPT,获取更深入的分析建议:
import openai
def gpt_analysis(category_summary):
prompt = f"""基于以下消费数据,给出省钱建议:
{category_summary.to_string()}
请指出哪些类别支出可能过高,并提供具体调整建议。"""
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
3. 部署为定时任务
在服务器或树莓派上设置cron job,每月1号自动运行:
# Linux/Mac的crontab添加
0 9 1 * * /usr/bin/python3 /path/to/bill_analyzer.py
# Windows用任务计划程序
注意事项和踩坑记录
- 编码问题:微信CSV可能是GBK编码,支付宝是UTF-8,代码中已做兼容处理
- 数据清洗:不同时期导出的账单格式可能有变化,可能需要调整列名
- 分类准确率:基于关键词的分类约85%准确,对于无法识别的消费会归为“其他”
- 隐私安全:账单数据敏感,建议在本地运行,不要上传到第三方服务
- 微信限制:微信账单只能导出最近3个月,记得每月及时导出
总结
这个AI智能体账单分析工具,我用了三个月,效果显著:
- 时间节省:从每月手动整理2小时,降到5分钟导出+自动分析
- 消费洞察:可视化图表让我清楚看到“钱去哪儿了”,餐饮超支一目了然
- 异常预警:自动标记大额支出,避免忘记或重复订阅扣款
- 数据积累:每月报告存档,可以对比长期消费趋势
代码已分享,你可以直接使用或二次开发。家庭财务管理从此变得简单——让AI智能体做枯燥的数据整理,你只需关注报告结果和调整消费习惯。
如果你有改进想法或遇到问题,欢迎在评论区交流。毕竟,让技术真正服务于生活,才是我们折腾的最终目的。
本文来源:一江山水的随笔
本文地址:https://www.298.name/post/158.html
主要内容:AI智能体自动分析家庭账单:每月5分钟搞定支出报告,图表一目了然
版权声明:如无特别注明,转载请注明本文地址!
