fal-consumption-audit

Verified·Scanned 2/18/2026

审计 fal 账号消耗与用户扣费的一致性。查询 fal 官方账单,交叉比对 fal_tasks 中的用户消耗,汇总积分/现金明细,检测异常。当用户提到"消耗审计"、"账单核对"、"fal 对账"、"用量异常"时使用此 skill。

from clawhub.ai·vbdc9c67·13.8 KB·0 installs
Scanned from 1.0.0 at bdc9c67 · Transparency log ↗
$ vett add clawhub.ai/hexiaochun/fal-consumption-audit

Fal 消耗审计

审计目标

核对三层数据的一致性,发现差异和异常:

fal 官方账单(实际成本)
       ↕ 比对
fal_tasks 任务表(系统记录)
       ↕ 比对
用户积分/现金明细(用户扣费)

审计流程

复制此清单跟踪进度:

Task Progress:
- [ ] Step 1: 查询 fal 官方账单
- [ ] Step 2: 查询 fal_tasks 任务明细
- [ ] Step 3: 按用户聚合消耗
- [ ] Step 4: 比对用户积分/现金明细
- [ ] Step 5: 异常检测 & 输出报告

Step 1: 查询 fal 官方账单

调用 fal Platform API 获取每个 fal 账号的实际消耗。

API: GET https://api.fal.ai/v1/models/usage

认证: Authorization: Key {fal_api_key}

关键参数:

参数说明
expand["time_series", "auth_method", "summary"]包含按时间和汇总数据
timeframeday按天聚合
start审计开始日期ISO8601 格式
end审计结束日期ISO8601 格式

数据来源: FalAccount 表(ts_fal_account),取最新插入的 20 个账号(按 id 倒序,不过滤 status)

FalAccount 关键字段:
  id          - 账号ID
  api_key     - fal API 密钥(用于调用 Usage API + 关联 FalTasks)
  balance     - 当前余额
  status      - 1=正常 0=禁用

查询: FalAccount.select().order_by(FalAccount.id.desc()).limit(20)

输出: 每个 fal 账号 → 各模型的 cost(USD) 和 quantity


Step 2: 查询 fal_tasks 任务明细

FalTasks 表查询同一时间段内,每个 fal key 被哪些用户使用。

数据来源: FalTasks 表(ts_fal_tasks

FalTasks 关键字段:
  user_id     - 发起任务的用户ID(核心关联字段)
  api_key     - 使用的 fal API 密钥(与 FalAccount.api_key 关联)
  app_name    - fal 模型名称(如 fal-ai/flux/schnell)
  money       - 向用户收取的金额(系统内积分,单位:分)
  cost_money  - fal 实际成本
  status      - 任务状态
  is_refund   - 是否退款(0=否 1=是)
  created_at  - 创建时间

查询逻辑:

SELECT
  api_key,
  user_id,
  app_name,
  COUNT(*) as task_count,
  SUM(money) as total_charged,        -- 向用户收的
  SUM(cost_money) as total_cost,      -- fal 实际成本
  SUM(CASE WHEN is_refund=1 THEN 1 ELSE 0 END) as refund_count
FROM ts_fal_tasks
WHERE created_at BETWEEN {start} AND {end}
GROUP BY api_key, user_id, app_name
ORDER BY total_charged DESC

Step 3: 按用户聚合消耗

将 Step 2 的结果按 user_id 聚合,得到每个用户的消耗全貌。

聚合维度:

维度说明
用户总消耗SUM(money) — 用户在 fal_tasks 中被收取的总积分
用户实际成本SUM(cost_money) — 对应的 fal 实际成本
用户任务数COUNT(*) — 总任务数
用户退款数SUM(is_refund=1) — 退款任务数
使用的 fal 账号GROUP_CONCAT(DISTINCT api_key) — 用了几个 fal 账号
使用的模型GROUP_CONCAT(DISTINCT app_name) — 用了哪些模型

Step 4: 比对用户积分/现金明细

对 Step 3 中每个用户,查询其积分明细和现金明细进行交叉验证。

积分明细表: PointsDetailts_points_detail

PointsDetail 关键字段:
  user_id        - 用户ID
  points         - 积分变动(正=增加,负=减少)
  title          - 交易说明(包含任务描述)
  source_type    - 来源类型:recharge/consume/gift/refund
  balance_before - 交易前余额
  balance_after  - 交易后余额
  created_at     - 创建时间

现金明细表: FinancialTransactionsts_financial_transactions

FinancialTransactions 关键字段:
  user_id          - 用户ID
  money            - 交易金额(单位:分,正=收入,负=支出)
  title            - 交易标题
  transaction_type - 0=充值/退款 1=消耗 3=智能体收益
  is_cash          - 0=否 1=是(现金交易)
  time             - 时间戳

查询逻辑:

对每个用户,分别查询审计时间段内的:

-- 积分消耗汇总
SELECT
  user_id,
  SUM(CASE WHEN source_type='consume' THEN ABS(points) ELSE 0 END) as points_consumed,
  SUM(CASE WHEN source_type='refund' THEN points ELSE 0 END) as points_refunded,
  SUM(CASE WHEN source_type='recharge' THEN points ELSE 0 END) as points_recharged,
  COUNT(*) as transaction_count
FROM ts_points_detail
WHERE user_id = {uid} AND created_at BETWEEN {start} AND {end}

-- 现金消耗汇总
SELECT
  user_id,
  SUM(CASE WHEN transaction_type=1 THEN ABS(money) ELSE 0 END) as cash_consumed,
  SUM(CASE WHEN transaction_type=0 AND money>0 THEN money ELSE 0 END) as cash_recharged,
  COUNT(*) as transaction_count
FROM ts_financial_transactions
WHERE user_id = {uid} AND time BETWEEN {start} AND {end}

Step 5: 异常检测 & 输出报告

异常检测规则

编号规则判定条件严重等级
A1fal 成本 vs 系统记录偏差abs(fal官方cost - fal_tasks.cost_money之和) / fal官方cost > 10%HIGH
A2用户被收费但 fal 无记录fal_tasks 有记录但 fal Usage API 中无对应模型消耗HIGH
A3fal 有消耗但用户未被收费fal Usage API 有消耗但 fal_tasks 中无对应任务HIGH
A4收费与扣费不一致fal_tasks.money 之和 ≠ PointsDetail consume 之和MEDIUM
A5异常退款退款金额 > 当日消耗总额的 30%MEDIUM
A6单用户消耗异常用户当日消耗 > 历史日均消耗的 5 倍LOW
A7零成本任务fal_tasks.money=0 且 cost_money>0(白嫖)MEDIUM
A8fal 账号余额预警FalAccount.balance < 1.0 USDLOW

报告输出格式(终端)

============================================================
  Fal 消耗审计报告
  审计日期: 2026-02-06
  审计范围: 2026-02-06 00:00:00 ~ 2026-02-06 23:59:59
============================================================

  ━━━ 第一层:Fal 官方账单 ━━━

  账号ID  余额(USD)  官方消耗(USD)  模型数  请求数
  ─────  ─────────  ────────────  ──────  ──────
     5      12.30         99.92      18    1049
    12      45.60          8.50       5     120
  ─────  ─────────  ────────────  ──────  ──────
  合计                    108.42      --    1169

  ━━━ 第二层:系统任务记录 (fal_tasks) ━━━

  fal账号ID  用户ID  用户名   模型              任务数  收费(积分)  fal成本(USD)
  ────────  ──────  ──────  ────────────────  ──────  ─────────  ──────────
     5       101    张三     sora-2/i2v          50      5000       5.00
     5       102    李四     kling/v2.1/i2v      30      8400      28.00
     5       103    王五     seedream/v4/t2i     20       600       0.60
    12       101    张三     flux/schnell        80       800       0.80
  ────────  ──────  ──────  ────────────────  ──────  ─────────  ──────────
  合计                                         180     14800      34.40

  ━━━ 第三层:用户扣费核对 ━━━

  用户ID  用户名   fal任务收费  积分消耗  现金消耗  积分充值  差异(积分)  状态
  ──────  ──────  ──────────  ────────  ────────  ────────  ─────────  ────
   101    张三        5800      5600       200      1000         0     OK
   102    李四        8400      8400         0         0         0     OK
   103    王五         600       400       200         0         0     OK

  ━━━ 异常告警 ━━━

  [HIGH]  A1: fal账号5 官方成本$99.92 vs 系统记录$34.40,偏差65.6%
  [MEDIUM] A7: 用户103 有3笔任务 money=0 但 cost_money>0
  [LOW]   A8: fal账号23 余额 $0.15,低于阈值

============================================================
  审计完成
  正常: 2 | 告警: 3 | 严重: 1
============================================================

数据关联关系图

FalAccount (ts_fal_account)
  │ api_key
  ├──────→ fal Usage API (官方账单, 按 api_key 查)
  │
  └──────→ FalTasks (ts_fal_tasks)
              │ api_key = FalAccount.api_key
              │ user_id → 关联到用户
              │
              └──→ User (ts_users)
                    │ id = FalTasks.user_id
                    │
                    ├──→ PointsDetail (ts_points_detail)
                    │     user_id = User.id
                    │     source_type = 'consume' / 'refund'
                    │
                    └──→ FinancialTransactions (ts_financial_transactions)
                          user_id = User.id
                          transaction_type = 1 (消耗)

脚本位置

实现脚本写在: translate_api/app/coze/fal_balance.py

已有的可复用函数:

  • query_fal_usage(api_key, start, end, timeframe) — 查询 fal 官方用量

运行方式

# 审计今天
python fal_balance.py audit

# 审计指定日期
python fal_balance.py audit --start 2026-02-01 --end 2026-02-06

# 只审计指定 fal 账号
python fal_balance.py audit --ids 5 12

# 只审计指定用户
python fal_balance.py audit --user-ids 101 102

补充资料