一江山水的随笔

当前位置:首页 - 技术 - 正文

Enjoy life!

效果先看:AI智能体生成的账单报告长这样

每月月底,我花5分钟导出微信和支付宝的账单CSV文件,扔给AI智能体处理。几分钟后,它给我生成一份这样的报告:

  • 消费结构饼图:清晰显示餐饮、购物、交通等各类支出占比
  • 月度趋势折线图:展示本月与上月的消费对比,一眼看出变化
  • 异常支出提醒:自动标记超过设定阈值的大额消费(比如单笔超过500元)
  • 分类统计表格:详细列出每类支出的金额和占比

不用再打开Excel手动分类统计,也不用纠结“钱到底花哪儿了”——AI智能体全搞定。下面我分享具体实现方法。

准备工作:导出账单CSV文件

首先,你需要从微信和支付宝导出账单:

微信账单导出步骤

  1. 打开微信 → 我 → 服务 → 钱包 → 账单 → 常见问题 → 下载账单
  2. 选择“用于个人对账”,设置时间范围(比如整个月),填写邮箱
  3. 收到加密压缩包,解压密码在微信支付消息中查看

支付宝账单导出步骤

  1. 打开支付宝 → 我的 → 账单 → 右上角“...” → 开具交易流水证明
  2. 选择“用于个人对账”,设置时间范围,填写邮箱
  3. 收到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智能体

  1. 安装依赖:确保已安装Python3,然后运行pip install pandas matplotlib
  2. 准备数据:将导出的微信支付宝CSV文件放在同一目录,重命名为wechat_bill.csvalipay_bill.csv
  3. 运行程序:将上面的代码保存为bill_analyzer.py,运行python bill_analyzer.py
  4. 查看结果:程序会在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智能体账单分析工具,我用了三个月,效果显著:

  1. 时间节省:从每月手动整理2小时,降到5分钟导出+自动分析
  2. 消费洞察:可视化图表让我清楚看到“钱去哪儿了”,餐饮超支一目了然
  3. 异常预警:自动标记大额支出,避免忘记或重复订阅扣款
  4. 数据积累:每月报告存档,可以对比长期消费趋势

代码已分享,你可以直接使用或二次开发。家庭财务管理从此变得简单——让AI智能体做枯燥的数据整理,你只需关注报告结果和调整消费习惯。

如果你有改进想法或遇到问题,欢迎在评论区交流。毕竟,让技术真正服务于生活,才是我们折腾的最终目的。

本文来源:一江山水的随笔

本文地址:https://www.298.name/post/158.html

主要内容:AI智能体自动分析家庭账单:每月5分钟搞定支出报告,图表一目了然

版权声明:如无特别注明,转载请注明本文地址!

想找什么搜索会更快哦!
站点信息
  • 文章总数:142
  • 页面总数:1
  • 分类总数:4
  • 标签总数:141
  • 评论总数:61
  • 浏览总数:1552107
控制面板
您好,欢迎到访网站!
  查看权限
Top