2026-10-02 · 原文发布日
给多个客户共用的AI Agent加上每月预算上限
面向同时服务多个付费客户的代理商和自由职业者:每个客户在n8n Data table里有月度预算、暂停开关和独立指令。外部应用向webhook提交client_id和prompt,未知或暂停客户返回403、预算耗尽返回429;运行前按最坏情况预扣额度,运行后通过n8n API读取实际token用量记账,达到告警阈值或预算不足时发邮件,另有按月汇总和用量查询接口。作者说明预扣是估算值,并行高并发场景的限制见模板备注。
原文要点
该模板面向服务多个付费客户的代理商:每个客户在n8n Data table中有月度预算、暂停开关和独立指令。外部应用向webhook提交client_id和prompt,未知或暂停客户返回403、预算耗尽返回429、Data table读写失败返回503。运行前把最坏情况预扣写为台账行,再重读台账防止并行抢占;运行后通过n8n API读取实际token用量记账;达到告警阈值或预算不足时发邮件;每小时清理卡住的预扣,每月汇总并删旧行,另有GET用量查询接口。作者注明预扣是估算、Data tables无原子自增,并行限制见模板备注;测试于n8n 2.41.6;缺n8n API凭证时按全额预扣收费。
这次做成什么
给多个客户共用一个AI Agent加上按客户记账的月度预算门禁:客户余额不足就拒绝运行,跑完按实际token扣账。练习方案:先建两张Data table并手工录入一个测试客户,用一条curl命令走通『预扣→运行→实扣』全流程,再接真实Agent。
准备什么
- n8n 2.41.6或更高版本且含Data tables功能(原模板在该版本测试)
- OpenAI API密钥,或其他兼容OpenAI Chat Completions接口的服务
- n8n API密钥(免费试用期不可用n8n API,缺它时每次按全额预扣收费)
- SMTP凭证用于告警与月度汇总邮件
- 一个能发POST请求的测试环境,如本地终端的curl
具体怎么做
创建两张Data table
在n8n左侧面板进入Data tables,按下方CSV结构新建ai_clients(客户档案与预算)和ai_usage_ledger(用量台账)。台账行的amount字段既存预扣(估算)也存实扣,靠status字段区分,这是整个记账方案的核心。
配置凭证与Settings节点
在Chat model节点填OpenAI凭证;Read token usage节点填n8n API凭证;两个webhook填Header Auth凭证;邮件节点填SMTP凭证。填写三个Settings节点:预扣的最坏情况token数、告警阈值(如预算的80%)、两个费率(如需折算成本币)。保持Save execution progress开启,否则读不到token用量。
录入测试客户并发布
在ai_clients里加一行:client_id=test-client、monthly_budget=100000、alert_threshold=0.8、paused=false、instructions=测试指令。发布工作流拿到生产webhook地址。
用curl走通一次调用
用下方curl命令POST一次短prompt。预期返回200并带usage摘要;回到ai_usage_ledger确认出现一行预扣记录,运行结束后该行被实际用量更新或补一行实扣记录。
验证拒绝路径
把paused改为true再调一次,应返回403;把monthly_budget改为小于预扣额的数再调,应返回429;临时断开Data table权限,应返回503。三条拒绝路径都验证过才算门禁可用。
可直接复制的材料
ai_clients 表结构与测试行
本站按模板描述设计的表结构,列名需与原模板sticky note里的实际定义核对后再录入。
client_id,display_name,monthly_budget,alert_threshold,paused,instructions
test-client,测试客户甲,100000,0.8,false,用简洁中文回答,不超过200字
demo-client,演示客户乙,50000,0.9,false,只回答与电商相关的问题ai_usage_ledger 表结构与示例行
reservation行为预扣估算,actual行为运行后的实扣;字段命名需以原模板为准。
ledger_id,client_id,run_id,type,amount,status,created_at
led-001,test-client,exec-1001,reservation,2000,reserved,2026-10-05T08:00:00Z
led-002,test-client,exec-1001,actual,347,settled,2026-10-05T08:00:09Z调用webhook的curl测试命令
URL、密钥和webhook路径需替换为你发布后的真实值;请在隔离测试环境使用,勿用生产凭据。
curl -X POST "https://你的n8n域名/webhook/ai-agent-gateway" \
-H "Authorization: Bearer 你的HeaderAuth密钥" \
-H "Content-Type: application/json" \
-d '{"client_id": "test-client", "prompt": "用一句话解释什么是月度预算上限"}'用量查询与告警阈值配置说明
本站整理的概念配置,具体字段位置以原模板三个Settings节点为准。
{
"worst_case_tokens": 2000,
"alert_threshold_ratio": 0.8,
"cost_rate_input_per_1k": 0.0,
"cost_rate_output_per_1k": 0.0,
"note": "两个费率为0时按token计数;填入单价后按本币折算。告警在用量达到月预算的该比例时发邮件。"
}输入与输出示例
本站虚构演示,token数与返回体结构为按模板描述设计的示意,未实际运行。
输入
客户test-client月预算100000 tokens、已用80500,此时再POST一次prompt『用一句话解释什么是月度预算上限』,预扣额为2000。对应输出
{"status": 200, "client_id": "test-client", "answer": "月度预算上限是指客户当月可消耗的token总量达到设定值后,系统拒绝新的运行请求。", "usage": {"prompt_tokens": 128, "completion_tokens": 219, "booked": 347, "month_used_after": 80847, "month_budget": 100000}}
随后系统因累计用量超过80%阈值向管理员发出告警邮件。做完检查这些
- curl测试返回200且响应体含prompt_tokens、completion_tokens等usage摘要
- ai_usage_ledger中同一次执行同时存在reservation与actual两类记录,actual金额为真实用量
- 客户paused=true时webhook返回403且无任何台账新行
- 已用加预扣超过月预算时返回429且不调用模型
- 停用n8n API凭证后重跑,该行按全额预扣记账而非实际用量(作者声明的回退行为)
容易卡住的地方
- 预扣是最坏情况估算,若上限设太高会锁死客户预算、设太低会频繁429,需按模型和最大输出长度调
- Data tables没有原子自增,多个请求并行时靠重读台账退让,作者说明高并发场景的残余风险在模板备注里,上生产前务必读那一段
- n8n免费试用期没有n8n API,读不到真实token用量,每次按全额预扣收费,账单会明显偏高
- 原模板未提供可下载工作流文件以外的计费保证,Data table列名以画布上sticky note为准,不要直接照抄本站列名进生产
- 忘记开启Save execution progress会导致读取token用量失败
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Run budget-capped client AI agents with OpenAI and n8n data tables
- 原作者
- Alexander Englund
- 原始发布日期
- 2026-10-02T10:33:21.976Z
- 来源
- https://n8n.io/workflows/20333