dify可自动解析用户上传的excel/csv消费账单,完成支出分类、月度趋势分析、异常消费识别,并生成含具体行动项的中文理财建议,全程四步闭环:文件上传→结构化解析→规则计算→大模型解读。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让Dify自动读取用户上传的Excel或CSV格式消费账单(如支付宝/微信/银行流水),识别支出类别、计算月度趋势、定位异常消费,并生成带具体行动项的中文理财建议——整个流程必须支持文件上传→结构化解析→规则计算→大模型解读四步闭环,不依赖外部数据库或手动写SQL。
准备合规的消费账单文件
将原始账单导出为标准Excel(.xlsx)或CSV(UTF-8编码),确保首行为字段名,且至少包含“交易时间”“交易类型”“金额”“商户名称”四列;【交易时间必须为标准日期格式(如2024-03-15或2024/03/15),含中文“年/月/日”或非ISO格式会导致后续时间聚合失败】。
删除所有汇总行、空行、合并单元格;若存在“收入”“支出”混在同一列,需在Excel中新增一列“direction”,填入“in”或“out”,Dify的Table Extract节点无法自动判断正负号含义。
文件名避免使用“账单_6月(含退款).xlsx”这类含括号、空格或中文标点的命名,改用“spending_june_2024.xlsx”,否则上传后解析器会静默跳过整份文件。
搭建账单解析与分类工作流
登录Dify控制台 → 左侧导航栏点击「Workflow」→「+ New Workflow」→ 选择「Blank Workflow」。
第一步:拖入「File Upload」节点,双击编辑 → 将「File type restriction」设为「xlsx, csv」,关闭「Allow multiple files」;右下角「⋯」→「Rename」为「用户账单文件」——此名称将作为后续所有节点的数据源标识,不可更改。
第二步:拖入「Table Extract」节点,连接至「用户账单文件」输出端;配置时「Header row index」填0,「Sheet name」留空(自动读第一张表);在「Column mapping」中,将第1列映射为“date”,第2列映射为“type”,第3列映射为“amount”,第4列映射为“merchant”——【映射顺序错一位,后续所有统计维度将全盘错乱】。
第三步:拖入「Python Code」节点,连接Table Extract输出;粘贴以下代码:
```python
import pandas as pd
from datetime import datetime
# 读取输入数据
df = pd.DataFrame(input_value)
if df.empty:
output = {"error": "无有效交易记录"}
else:
# 强制转换日期并过滤无效行
df['date'] = pd.to_datetime(df['date'], errors='coerce')
df = df.dropna(subset=['date', 'amount'])
# 提取月份并标记支出
df['month'] = df['date'].dt.strftime('%Y-%m')
df['is_expense'] = (df['amount'] # 按月汇总支出
monthly = df[df['is_expense']].groupby('month')['amount'].sum().abs().round(2).to_dict()
output = {"monthly_spending": monthly}
```
这一步直接产出结构化月度支出字典,无需额外清洗节点;注意代码中`errors='coerce'`会把非法日期转为NaT,配合`dropna`可自动剔除脏数据行。
接入大模型生成个性化理财建议
方法一:使用内置LLM节点(推荐新手)
拖入「LLM」节点,连接Python Code节点输出;在提示词框中输入:
```text
你是一位资深理财顾问。请基于以下用户月度消费数据,完成三件事:
1. 找出支出最高和最低的月份,计算环比变化率(保留1位小数);
2. 识别单月支出超均值150%的异常月份;
3. 给出3条具体、可执行的优化建议(例如:“7月餐饮支出占比达42%,建议下周起启用‘外卖红包+自做饭’组合,预估月省320元”)。
数据:{{#node_3.monthly_spending#}}
```
关键点:`{{#node_3.monthly_spending#}}` 中的 `node_3` 是Python Code节点默认ID,务必核对画布左上角节点编号,否则变量为空。
方法二:调用通义千问API(适合需长文本分析场景)
先在「设置」→「模型供应商」中配置通义千问qwen-max模型及API密钥;再新建LLM节点,模型选“qwen-max”,提示词同上;但需额外开启「Stream response」开关——否则大模型可能因响应截断而漏掉第三条建议。
导出带图表的理财报告
拖入「ECharts」节点,连接LLM节点输出;在配置中填入标准ECharts Option JSON:
```json
{
"title": {"text": "近6个月消费趋势"},
"xAxis": {"type": "category", "data": ["{{#node_4.monthly_spending.keys()[0]#}}", "{{#node_4.monthly_spending.keys()[1]#}}"]},
"yAxis": {"type": "value"},
"series": [{"data": [{{#node_4.monthly_spending.values()[0]#}}, {{#node_4.monthly_spending.values()[1]#}}], "type": "bar"}]
}
```
⚠️ 注意:ECharts节点不支持动态数组长度,此处仅示例前两个月;真实部署需用Python Code节点预处理成固定6个月数据并补零,再传入ECharts。
最后拖入「Response」节点,连接ECharts输出;在「Response content」中输入:`{{#node_5#}}\n\n---\n\n{{#node_4#}}` —— 这样用户收到的回复将同时包含可视化图表与文字建议,中间用分隔线隔离。










