/~learn/s/ec80267a
通过「火山引擎费用中心 API 直接拉历史账单 + DeepSeek 每日快照余额」的混合方案,可以实现双平台余额监控与趋势图展示。火山引擎有完整的按天成本 API(最多 24 个月历史),DeepSeek 没有公开用量 API,通过每日余额快照差值推算消耗。
可用 API(费用中心 OpenAPI):
QueryBalanceAcct — 查询当前账户余额ListAmortizedCostBillDaily — 查询按天成本账单(核心!)ListBillDetail — 分页查询账单明细ListBillOverviewByProd — 按产品汇总账单数据能力:
限制:
可用 API:
GET https://api.deepseek.com/user/balance — 查询当前余额数据能力:
限制:
应对方案:
记录每个平台每日的余额快照,用于绘制余额趋势图。
| 字段 | 类型 | 说明 |
| ------ | ------ | ------ |
| date | TEXT (PK) | 日期,YYYY-MM-DD |
| platform | TEXT (PK) | 平台:deepseek / volcengine |
| total_balance | REAL | 总余额(元) |
| cash_balance | REAL | 现金余额(元) |
| gift_balance | REAL | 赠送/代金券余额(元) |
| frozen_amount | REAL | 冻结金额(元) |
| arrears | REAL | 欠费金额(元) |
| credit_limit | REAL | 信控额度(元) |
| raw_data | TEXT | 原始 API 返回 JSON(用于调试) |
| created_at | TEXT | 记录创建时间 |
> 联合主键:(date, platform)
记录每日消费明细(主要来自火山引擎)。
| 字段 | 类型 | 说明 |
| ------ | ------ | ------ |
| id | INTEGER (PK) | 自增 ID |
| date | TEXT | 日期,YYYY-MM-DD |
| platform | TEXT | 平台:deepseek / volcengine |
| product | TEXT | 产品名称(如"方舟"、"ECS") |
| product_zh | TEXT | 产品中文名 |
| billing_mode | TEXT | 计费模式:包年包月 / 按量计费 |
| bill_category | TEXT | 账单类型:消费-使用 / 退款-退订 等 |
| instance_id | TEXT | 实例 ID |
| instance_name | TEXT | 实例名称 |
| region | TEXT | 地域 |
| original_amount | REAL | 原价 |
| discount_amount | REAL | 优惠金额 |
| payable_amount | REAL | 应付金额 |
| paid_amount | REAL | 实付金额 |
| coupon_amount | REAL | 代金券抵扣 |
| currency | TEXT | 币种:CNY / USD |
| raw_data | TEXT | 原始 API 返回 JSON |
| created_at | TEXT | 记录创建时间 |
> 索引:(date, platform)、(date, platform, product)
api_、使用 INSERT OR REPLACE 幂等写入quant.db 中,不新建数据库
现有功能(已实现):
get_deepseek_balance() — DeepSeek 当前余额查询get_volcengine_balance() — 火山引擎当前余额查询get_all_balances() — 全部余额汇总(带 1 小时内存缓存)新增功能:
get_volcengine_daily_cost(date) — 获取指定日期的按天成本账单get_volcengine_cost_range(start_date, end_date) — 获取日期范围内的按天成本backfill_volcengine_cost(days=90) — 回填历史账单数据(默认最近 90 天)
save_daily_snapshot(date=None) — 保存当前余额为日快照get_balance_history(days=30, platform=None) — 查询余额历史get_daily_cost_history(days=30, platform=None) — 查询日消耗历史get_cost_by_product(days=30, platform=None) — 按产品汇总消费
start_scheduler() — 启动后台定时任务线程1. 拉取前一天火山引擎账单并存入 DB 2. 对 DeepSeek 和火山引擎做余额快照
按照项目现有 DB 规范,新建 api_balance.py 管理余额相关表:
init_api_balance_tables() — 初始化表save_balance_snapshot(data) — 保存余额快照get_balance_history(days, platform) — 查询余额历史save_daily_cost(data_list) — 批量保存日消费数据get_cost_history(days, platform) — 查询消费历史get_cost_by_product(days, platform) — 按产品汇总消费
新增路由:
| 路由 | 说明 |
| ------ | ------ |
/balance | 余额详情页(已存在,增加图表) |
/api/balance | 当前余额 JSON(已存在) |
/api/balance/history?days=30 | 余额历史数据 JSON |
/api/cost/history?days=30 | 消费历史数据 JSON |
/api/cost/by_product?days=30 | 按产品消费汇总 JSON |
新增图表(Plotly):
db/api_balance.py,定义两张表的 DDL 和 CRUD 函数db/core.py 的 init_all_tables() 中注册
api_balance_monitor.py 中新增火山引擎按天成本查询
unified_server.py 中新增历史数据 API 路由
/balance 页面嵌入 Plotly 图表
get() 方法返回的是 JSON 字符串,不是 dict,需要 json.loads()open.volcengineapi.com,scheme 设为 httpsListAmortizedCostBillDaily 的 Version 也是 2022-01-01
threading.Thread + while True + time.sleep 实现
/balance 页面中