Multi-Agent 系統的 API Key 管理:程式化核發、預算隔離與費用追蹤
Orchestrator + Research + Code + QA + Report 五個 agent 怎麼管理 API Key?用一把 Management API Key 呼叫 POST /v1/keys 批量核發,每個 agent 一把、各有獨立花費上限,費用清楚歸戶。
Multi-Agent 系統的 API Key 管理問題
當你從「一個 AI 功能」升級到「多個 Agent 協作」,API Key 管理會迅速失控。
典型的 Multi-Agent 系統可能有:
- Orchestrator Agent:分配任務、協調其他 agent
- Research Agent:搜尋資料、整理摘要
- Code Agent:撰寫和審查程式碼
- QA Agent:測試和驗證輸出
- Report Agent:產出最終報告
如果每個 Agent 用同一把 Key,你就無法追蹤哪個 Agent 在燒錢。如果每個 Agent 用不同的 Provider Key,你就要管理 5 個不同的 dashboard 和帳單。
更根本的問題是:Agent 怎麼取得 API Key?
在自動化程度高的系統裡,Agent 需要在執行時動態取得憑證——不是由人類複製貼上,而是透過程式自動完成。
Agent 取得 API Key 的兩種做法
做法 A:Agent 自己註冊。 註冊端點在網站主機 bazaarlink.ai 上,不需要登入:
curl -X POST https://bazaarlink.ai/api/v1/agents/register \
-H "Content-Type: application/json" \
-d '{"name": "ResearchAgent"}'
回應含 api_key(只出現一次)、claim_token(7 天內讓人類認領帳號)與 base_url。這樣註冊出來的是未付費帳戶,使用 auto:free,受一般速率與每日上限限制,同一個 IP 的註冊次數有上限(超過回 HTTP 429)。需要付費模型時,可改用 POST https://bazaarlink.ai/api/v1/agents/register/x402 以 OKX x402 付款註冊;平台收儲值手續費,入帳額度低於付款金額。
做法 B:管理金鑰核發。 要替每個 Agent 綁預算上限與到期時間,用這個做法。流程是「人類授權一次,程式核發無數次」:登入後到 /keys 建立一把 Management API Key,之後由 orchestrator 用它替每個 Agent 核發專屬金鑰。一般的 sk-bl- 金鑰打不了金鑰管理端點,這是刻意的權限分離。
import os
import httpx
MGMT_KEY = os.environ["BAZAARLINK_MANAGEMENT_KEY"] # 人類建立,只放在 orchestrator
BASE_URL = "https://api.bazaarlink.ai/v1"
def provision_agent_key(agent_name: str, monthly_budget_usd: float) -> str:
response = httpx.post(
f"{BASE_URL}/keys",
headers={"Authorization": f"Bearer {MGMT_KEY}"},
json={
"name": agent_name,
"limit": monthly_budget_usd,
"limit_reset": "monthly",
},
timeout=30,
)
response.raise_for_status()
return response.json()["key"] # 明文只會出現這一次
# 批量建立 agent keys,各自有獨立預算
orchestrator_key = provision_agent_key("Orchestrator", 50.0)
research_key = provision_agent_key("ResearchAgent", 30.0)
code_key = provision_agent_key("CodeAgent", 40.0)
qa_key = provision_agent_key("QAAgent", 20.0)
report_key = provision_agent_key("ReportAgent", 10.0)
這樣每個 Agent 有:
- 獨立 API Key(費用可分開追蹤)
- 獨立月預算上限,上限用盡回 HTTP 402(某個 Agent 失控不影響其他 Agent)
- 可選的
expires_at到期時間,適合 CI 的臨時金鑰
回應裡的 key 欄位是唯一一次看得到明文的機會,請當場交給 Agent 或寫入祕密管理系統。
Multi-Agent 費用監控
用 BazaarLink 的報表 API,隨時查詢每個 Agent 的消耗:
def get_agent_usage(org_id: str, mgmt_key: str, year: int, month: int) -> list[dict]:
response = httpx.get(
f"https://bazaarlink.ai/api/orgs/{org_id}/reports/by-member",
headers={"Authorization": f"Bearer {mgmt_key}"},
params={"year": year, "month": month},
)
return response.json()
# 輸出範例:
# [
# {"name": "Orchestrator", "spend": 12.50, "tokens": 450000},
# {"name": "ResearchAgent", "spend": 28.30, "tokens": 890000},
# {"name": "CodeAgent", "spend": 35.10, "tokens": 1100000},
# ]
與 LangChain / CrewAI 整合
無論你用什麼 Agent framework,只需要換掉 base_url 和 api_key:
# LangChain
from langchain_openai import ChatOpenAI
# 每個 Agent 用自己的 Key
research_llm = ChatOpenAI(
base_url="https://api.bazaarlink.ai/v1",
api_key=research_key,
model="openai/gpt-4o",
)
# CrewAI
from crewai import Agent
from langchain_openai import ChatOpenAI
research_agent = Agent(
role="Senior Researcher",
llm=ChatOpenAI(
base_url="https://api.bazaarlink.ai/v1",
api_key=research_key,
model="anthropic/claude-sonnet-4.6",
),
)
結論:Multi-Agent 需要 Multi-Key 管理
| 需求 | 解法 |
|---|---|
| Agent 動態取得 Key | Agent 自己 POST https://bazaarlink.ai/api/v1/agents/register,或管理金鑰呼叫 POST /v1/keys |
| 批量核發 + 預算 | 一把 Management Key,核發時帶 limit + limit_reset |
| 費用按 Agent 拆分 | 每個 Agent 獨立 Key |
| 某個 Agent 失控 | 個別預算上限,自動 429 |
| 月底成本報告 | By-member 報表匯出 CSV |
Multi-Agent 架構的複雜度在 Orchestration,不應該再被 API Key 管理拖累。BazaarLink 讓每個 Agent 有獨立的憑證和預算,同時在一個 dashboard 看到全局費用。
FAQ
AI Agent 可以自己取得 API Key 嗎?
可以。Agent 可以自己呼叫 POST https://bazaarlink.ai/api/v1/agents/register(在 bazaarlink.ai 主機上)領到 API Key,領到的是未付費帳戶,使用 auto:free;需要付費模型可改用 OKX x402 付款註冊(有平台儲值手續費)。如果要替每個 Agent 綁花費上限,則由人類建立一把 Management API Key,再用 POST /v1/keys 程式化核發。
為什麼每個 Agent 要用獨立的 Key?
獨立 Key 帶來三個好處:(1) 費用按 Agent 拆分,知道哪個 Agent 最耗錢;(2) 每個 Agent 有獨立月預算上限,某個 Agent 失控不影響其他;(3) 出問題時可單獨撤銷該 Key 而不中斷整個系統。
BazaarLink 支援 LangChain 和 CrewAI 嗎?
完全支援。LangChain 的 ChatOpenAI、CrewAI 的 Agent llm 參數都接受 base_url 與 api_key 設定,把 base_url 改成 https://bazaarlink.ai/api/v1 就能呼叫所有主流模型,不需要修改 framework 程式碼。