十三:自动化数据处理 Agent:让 AI 听懂“导出上月销售报表”并自动执行
将数据查询封装为 RESTful 接口,由 Agent 调用。能力技术实现✅ 理解自然语言Agent + Prompt 意图识别✅ 获取真实数据自定义工具 + 数据库查询✅ 生成可视化图表Markdown + QuickChart + 图片嵌入✅ 端到端自动化Workflow 编排全流程这个 Agent 不仅能回答问题,更能执行任务、产出结果、驱动决策。运营日报自动化客服自助查数据管理层临时数据需
你是否经常遇到这样的场景?
“小李,帮我查一下上个月各区域的销售额,做成柱状图发群里。”
“能不能把最近一周的用户注册数据导出来?”
“哪个产品退货率最高?”
这些本应由系统自动完成的任务,却因为“不会写 SQL”、“找不到报表入口”而变成人工沟通负担。
现在,借助 Dify + Agent 模式 + 工具链,你可以打造一个 能听懂人话、会跑脚本、能画图表的“AI 数据分析师”。
本文将带你:
✅ 让 Agent 理解自然语言指令(如“导出上月销售报表”)
✅ 调用 Python 脚本或数据库查询真实数据
✅ 自动生成可视化图表并返回结果
实现 “说一句,跑一套” 的智能数据处理流程。
一、从自然语言指令解析任务
真正的智能不是“回答问题”,而是“理解意图 + 执行动作”。
🎯 核心能力:语义到任务的映射
| 用户提问 | 解析出的任务 |
|---|---|
| “导出上月销售报表” | 查询 sales 表,时间范围为上个月 |
| “哪个产品退货最多?” | 统计 returns 表中 product_id 的频次 |
| “生成本周用户增长趋势图” | 查询每日新增用户数,绘制成折线图 |
🛠️ 实现方式:Prompt + Agent 意图识别
在 Dify 中创建一个 Agent 应用,设置系统提示词如下:
你是一个专业的数据分析师助手,能理解用户的自然语言查询需求,并将其转化为具体的数据任务。
请根据用户问题判断其意图,仅返回以下类型之一:
- sales_report(销售报表)
- user_growth(用户增长)
- product_analysis(商品分析)
- return_rate(退货率分析)
- unknown(无法识别)
问题:{{query}}
输出保存为变量 {{intent}},供后续流程使用。
✅ 可结合知识库,加入公司术语解释(如“GMV”、“DAU”),提升识别准确率。
二、调用 Python 脚本或数据库查询工具
识别出意图后,Agent 需要“动手”获取数据。Dify 提供了两种主流方式:
✅ 方式 1:调用自定义工具(HTTP API)
将数据查询封装为 RESTful 接口,由 Agent 调用。
示例:创建“获取上月销售额”API
# Flask 示例
from flask import Flask, request, jsonify
import pandas as pd
from sqlalchemy import create_engine
app = Flask(__name__)
engine = create_engine("sqlite:///sales.db")
@app.route("/api/reports/monthly-sales", methods=["POST"])
def monthly_sales():
data = request.json
month = data.get("month", "2025-03") # 支持动态传参
query = f"""
SELECT region, SUM(amount) as total
FROM sales
WHERE strftime('%Y-%m', sale_date) = '{month}'
GROUP BY region
"""
df = pd.read_sql(query, engine)
return jsonify(df.to_dict(orient='records'))
部署后,在 Dify 中添加为 自定义工具:
- 名称:
查询月度销售数据 - URL:
https://your-api.com/api/reports/monthly-sales - 参数:
{"month": "{{target_month}}"}
✅ 方式 2:使用代码执行节点(Code Executor)
对于轻量级任务,可直接在 Dify 内运行 Python 脚本(沙箱环境)。
示例:计算退货率最高的产品
def main(inputs):
import pandas as pd
# 模拟数据(实际可从数据库加载)
data = [
{"product": "A", "returns": 15, "total_sold": 100},
{"product": "B", "returns": 8, "total_sold": 60},
{"product": "C", "returns": 20, "total_sold": 180}
]
df = pd.DataFrame(data)
df["return_rate"] = df["returns"] / df["total_sold"]
top_product = df.loc[df["return_rate"].idxmax()]
return {
"product": top_product["product"],
"return_rate": round(top_product["return_rate"], 4),
"details": data
}
⚠️ 注意:生产环境建议通过 API 调用,避免敏感数据暴露。
三、生成可视化图表并返回结果
数据查出来还不够,用户更想看“图”。
🎨 方案一:返回 Markdown 图表(简单高效)
在 Prompt 中要求 AI 用 Markdown 生成图表描述或 ASCII 图:
请将以下数据绘制成柱状图描述:
{{query_result}}
输出格式:

利用 QuickChart.io 等服务生成图表 URL:

Dify 支持渲染 Markdown,前端可直接显示图表。
🎨 方案二:调用绘图 API 并返回图片链接
使用后端服务生成 PNG/JPG 图片:
# Python 绘图示例
import matplotlib.pyplot as plt
import io
import base64
def generate_bar_chart(data):
plt.bar(data['labels'], data['values'])
plt.title("月度销售额")
buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
img_str = base64.b64encode(buf.read()).decode()
return f"data:image/png;base64,{img_str}"
Agent 调用该接口后,将图片嵌入回复:
这是上月各区域销售额的柱状图:
{{chart_image}}
总销售额:{{total}} 元
🎯 完整流程示例
用户输入:“导出上月销售报表”
[Agent] → 识别 intent = sales_report
↓
[HTTP 工具] → 调用 /api/reports/monthly-sales?month=2025-03
↓
[Code 节点] → 使用 QuickChart 生成图表 URL
↓
[LLM 节点] → 汇总文字说明 + 插入图表
↓
返回结果:
“上月总销售额为 22,500 元,详情如下:
”
📈 用户无需登录 BI 系统,一句话获取完整报表。
四、实战建议与安全控制
✅ 最佳实践
| 建议 | 说明 |
|---|---|
| 分步引导 | 先确认时间范围、再选择维度,避免歧义 |
| 缓存机制 | 对高频查询结果缓存 5~30 分钟,提升响应速度 |
| 权限控制 | 根据用户角色限制可查数据范围(如区域经理只能看本区) |
| 审计日志 | 记录每次查询请求,便于追溯 |
🔐 安全策略
- 数据库连接使用只读账号
- API 接口启用 JWT 认证
- 敏感字段脱敏处理(如客户手机号)
- 代码沙箱禁止
os.system、subprocess等危险操作
✅ 总结:你刚刚构建了一个“AI 数据分析师”
通过本文,你已经实现了:
| 能力 | 技术实现 |
|---|---|
| ✅ 理解自然语言 | Agent + Prompt 意图识别 |
| ✅ 获取真实数据 | 自定义工具 + 数据库查询 |
| ✅ 生成可视化图表 | Markdown + QuickChart + 图片嵌入 |
| ✅ 端到端自动化 | Workflow 编排全流程 |
这个 Agent 不仅能回答问题,更能执行任务、产出结果、驱动决策。
它适用于:
- 运营日报自动化
- 客服自助查数据
- 管理层临时数据需求响应
- 低代码 BI 前端入口
更多推荐



所有评论(0)