AI PLAY玩法更新持续收录
← 回到更新流

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

具体怎么做

  1. 创建两张Data table

    在n8n左侧面板进入Data tables,按下方CSV结构新建ai_clients(客户档案与预算)和ai_usage_ledger(用量台账)。台账行的amount字段既存预扣(估算)也存实扣,靠status字段区分,这是整个记账方案的核心。

  2. 配置凭证与Settings节点

    在Chat model节点填OpenAI凭证;Read token usage节点填n8n API凭证;两个webhook填Header Auth凭证;邮件节点填SMTP凭证。填写三个Settings节点:预扣的最坏情况token数、告警阈值(如预算的80%)、两个费率(如需折算成本币)。保持Save execution progress开启,否则读不到token用量。

  3. 录入测试客户并发布

    在ai_clients里加一行:client_id=test-client、monthly_budget=100000、alert_threshold=0.8、paused=false、instructions=测试指令。发布工作流拿到生产webhook地址。

  4. 用curl走通一次调用

    用下方curl命令POST一次短prompt。预期返回200并带usage摘要;回到ai_usage_ledger确认出现一行预扣记录,运行结束后该行被实际用量更新或补一行实扣记录。

  5. 验证拒绝路径

    把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