熔岩AI发布MCP多 Agent 共用一把 Key:分工、限流与费用归属
摘要
团队里常见的配置是:一把熔岩(Lava)API Key 同时给研究 Agent、盯盘 Agent、写周报的 Agent 和几位同事的 Cursor / Claude 使用。共用 Key 省事,但会带来三个问题:互相抢限流、费用说不清是谁花的、一个 Agent 出错拖垮全队。本文给出共用 Key 的分工表、本地配额划分、统一出口代理和费用归属方法。只读监测用途。
一、共用 Key 的事实前提
| 事实 | 来源 | 影响 |
|---|---|---|
| 每次成功调用计费,非 2xx 不计费 | OpenAPI info.description |
失败多不花钱,但浪费限流额度 |
429 分 RATE_LIMITED 与 DAILY_QUOTA_EXCEEDED |
文档错误码表 | 一个 Agent 打满,所有 Agent 一起受影响 |
| 限流范围(按 Key / 按 IP / 按会话) | 文档未细化 | 以 OpenAPI 为准,按「按 Key」保守设计 |
/account 返回余额、单价、今日调用数 |
OpenAPI | 只能看到合计,看不到分 Agent |
响应头 X-Billing-Charged-Yuan、X-Balance-Yuan |
文档 | 分 Agent 归属要靠本地记录 |
二、分工表:让每个 Agent 只碰自己的板块
| Agent 角色 | 允许的熔岩数据板块 | 主要工具 | 日配额(示例) |
|---|---|---|---|
| 盯盘 Agent | 全市场热榜、首提流、加速榜 | get_market_hot_stocks、get_first_mention_stocks、get_accelerating_hot_stocks |
200 |
| 研究 Agent | 单股多时间窗、个股消息面、关联概念、覆盖度 | get_stock_heat_windows、get_stock_news_heat、get_stock_concept_heat、get_agency_coverage |
300 |
| 周报 Agent | 日频面板、加权热榜、机构/大V榜 | get_stock_heat_panel、get_weighted_hot_stocks、get_agency_ranking |
80 |
| 人工 IDE 会话 | 任意只读工具 | 按需 | 100 |
| 健康检查 | 账户 | get_account(不计费) |
不限 |
分工的好处:出问题时按工具名就能定位是哪个 Agent;也能在 MCP 客户端里只暴露该角色需要的工具,减少误调。
三、统一出口:一个本地代理挂所有 Agent
lava-mcp 提供本地代理,默认监听 127.0.0.1:8787/mcp,上游超时 LAVA_PROXY_TIMEOUT 默认 180 秒,/health 不访问上游。代理本身只转发、不限流。共用 Key 时建议在它前面再加一层轻量网关,或在 REST 脚本侧用同一个调用库:
# shared_gate.py —— 示例:按 Agent 名分配本地配额
import threading, time, collections
QUOTA = {"watch": 200, "research": 300, "weekly": 80, "ide": 100}
used = collections.Counter()
lock = threading.Lock()
paused_until = 0.0
def acquire(agent: str) -> bool:
with lock:
if time.monotonic() < paused_until:
return False
if used[agent] >= QUOTA.get(agent, 0):
return False
used[agent] += 1
return True
def on_429(code: str, retry_after: float):
global paused_until
with lock:
if code == "RATE_LIMITED":
paused_until = max(paused_until, time.monotonic() + retry_after)
elif code == "DAILY_QUOTA_EXCEEDED":
paused_until = float("inf") # 全队当天停
关键:限流暂停是全队共享的。一个 Agent 收到 RATE_LIMITED,其他 Agent 也应停,否则会继续消耗同一份额度。
四、费用归属
服务端只给合计,归属靠本地日志:
| 字段 | 来源 |
|---|---|
agent |
调用方自报(请求头或调用库参数,仅本地记录) |
tool / path |
本地 |
request_id |
响应头 X-Request-Id 或 meta.request_id |
charged_yuan |
响应头 X-Billing-Charged-Yuan 或 meta.billing |
ts |
meta.server_time |
每日按 agent 汇总 charged_yuan(用 Decimal),再与 /account 的今日调用数对账。差额来自未经网关的调用,例如某位同事直接把 Key 填进了自己的 IDE。
五、Key 轮换与泄露面
- Key 只放在网关或代理所在机器的环境变量,Agent 配置里写本地代理地址,不写 Key。
- 轮换 Key 时只改一处。
- 任一 Agent 日志打印到 Key 前缀以外的内容,视为泄露,立即轮换。
- 需要按人区分权限时,考虑 OAuth 授权(远程 MCP 支持),或为不同团队申请不同 Key;scope 细节以文档为准。
六、冲突场景与处理
| 场景 | 症状 | 处理 |
|---|---|---|
研究 Agent 循环调 /heat/windows |
429 频发,盯盘延迟 | 研究 Agent 降到串行,改用 /panel/daily 的 codes 合并 |
| 周报 Agent 和盯盘同时整点触发 | 整点 429 | 加随机抖动 |
| IDE 会话反复试错参数 | 400 堆积 | 不计费,但占额度;先读 OpenAPI 再调 |
| 余额耗尽 402 | 全队失败 | /account 每小时巡检,低于阈值告警 |
七、熔岩数据板块速查
全市场热榜(个股/概念/加速/首提/加权)、单股多时间窗、概念板块热度(成分与个股关联概念)、个股消息面记录与关键词搜索、新闻命中、机构/大V评分(当前榜、PIT、历史)、机构/大V覆盖度、日频面板、账户。分工表按这九类切分最自然。
FAQ
Q:共用 Key 会不会被判定滥用? A:只要总频率在限流内即可;具体策略以文档为准。
Q:能给每个 Agent 不同的 scope 吗? A:同一把 Key 的 scope 相同;需要隔离请用不同 Key 或 OAuth。
Q:示例配额怎么定? A:先跑一周记录各 Agent 实际用量,再按 120% 设上限。
结论
共用 Key 要做三件事:按板块分工、全队共享限流暂停、本地记账归属费用。把 Key 收口到一个出口,问题就能定位、费用就能对清。
数据来自熔岩消息面热度监测,仅用于只读监测与统计研究,不构成投资建议。
只读监测与字段说明见:https://lava.ai-dolphin.com/subscribe/docs
Comments
Join the discussionNo comments yet. Be the first to comment.