dify支持原生用量统计与自动计费闭环:需启用“启用用量统计”,通过控制台用量分析定位高成本应用,导出csv或调用api获取明细,再用python脚本按模型单价计算费用并生成含cost_usd的excel账单。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要在Dify中看清每一次大模型调用花了多少钱、谁用了最多、哪条工作流最烧钱,并让系统自动把明细整理成可对账的账单文件——这不是靠人工扒日志或写脚本拼凑,而是利用Dify原生的计量埋点、结构化存储和标准API能力完成闭环。
确认Dify实例已启用完整用量采集
进入Dify管理后台 → 点击右上角「设置」→「系统配置」→ 检查「启用用量统计」开关是否为开启状态。该选项默认开启,但私有化部署时若使用精简版镜像可能被关闭。【关闭状态下所有token_usage字段为空,后续所有分析将失效】
验证方式:在任意应用中发起一次对话,随后执行命令查看最新日志条目:kubectl logs -n dify $(kubectl get pods -n dify -l app=dify-api -o jsonpath='{.items[0].metadata.name}') | grep -i "token_usage" | tail -1。若返回包含prompt_tokens、completion_tokens等字段的JSON,则采集正常。
从控制台快速定位高成本应用
登录Dify Web控制台 → 左侧导航栏点击「分析」→「用量分析」。
在时间范围选择器中设定最近7天 → 在筛选条件中勾选「按应用分组」→ 查看「总Token消耗」列,数值最高者即为当前成本主力。
点击该应用名称进入详情页 → 切换到「调用明细」标签 → 按「输入Token」倒序排列 → 找出单次输入超5000 tokens的记录,这类请求往往源于未截断的知识库片段或嵌套过深的上下文拼接。
导出CSV格式的原始账单明细
方法一:控制台一键导出
在「用量分析」页面完成筛选后(支持按应用ID、模型名称、日期区间、用户ID等多维组合),点击右上角「导出CSV」按钮。导出文件包含字段:request_id、app_id、user_id、model_name、prompt_tokens、completion_tokens、total_tokens、created_at、status。
方法二:通过API批量拉取(适合每日定时归档)
构造GET请求:GET https://your-dify-instance.com/api/workspaces/{workspace_id}/analytics/usage?start=2026-06-01%2000:00:00&end=2026-06-01%2023:59:59&limit=1000&page=1,需携带Bearer Token认证头。注意:每次请求最多返回1000条,超过需分页遍历。
提示:API返回的total_tokens字段已按各模型计费权重归一化(例如gpt-4-turbo输入/输出权重比为1:3),可直接用于财务核算,无需二次换算。
用Python脚本自动计算费用并生成Excel账单
第一步:安装依赖
pip install pandas openpyxl requests
第二步:准备模型单价映射表(根据Dify内置计费对照表或实际采购合同填写)
第三步:运行以下脚本(替换BASE_URL、API_KEY、WORKSPACE_ID、APP_ID及price_map):
```python
import pandas as pd
import requests
from datetime import datetime, timedelta
BASE_URL = "https://your-dify-instance.com"
API_KEY = "sk-xxx"
WORKSPACE_ID = "ws-xxx"
APP_ID = "app-xxx"
price_map = {
"gpt-4-turbo": {"input": 0.01, "output": 0.03}, # USD per 1K tokens
"qwen-plus": {"input": 0.00002, "output": 0.00006}
}
def fetch_and_calculate():
end = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
start = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
url = f"{BASE_URL}/api/workspaces/{WORKSPACE_ID}/analytics/usage"
headers = {"Authorization": f"Bearer {API_KEY}"}
params = {"app_id": APP_ID, "start": start, "end": end, "limit": 500}
res = requests.get(url, headers=headers, params=params)
data = res.json()["data"]
df = pd.DataFrame(data)
df["cost_usd"] = df.apply(lambda r: (
r["prompt_tokens"] / 1000 * price_map.get(r["model_name"], {}).get("input", 0) +
r["completion_tokens"] / 1000 * price_map.get(r["model_name"], {}).get("output", 0)
), axis=1)
df.to_excel(f"bill_{start[:10]}.xlsx", index=False)
fetch_and_calculate()
```
脚本执行后,会在当前目录生成形如bill_2026-06-06.xlsx的文件,含原始字段+cost_usd列,可直接发财务入账。











