Skip to content

REST 介面 ​

除特別說明外,所有介面都需要在請求頭帶上租戶 API Key:

Authorization: Bearer <租戶API Key>

預設地址 http://localhost:8787,演示租戶 demo(apiKey 首次啟動隨機生成並列印在日誌中)。本頁供整合開發參考, 普通使用者無需關心。

啟動服務端 ​

bash
# 無模型 Key 也能啟動(認證/會話/介面都能測,只是對話會報錯)
pnpm run server

# 帶真實模型(推薦)
OPENAI_API_KEY=sk-... OPENAI_MODEL=gpt-4o-mini pnpm run server

主要環境變數:PORT(預設 8787)、DATA_DIR(預設 ./.zqagent_data)、 APPROVAL_TIMEOUT_SECONDS(審核/提問掛起超時,預設 900)、 TENANT_ID / TENANT_API_KEY / MODEL(演示租戶)。

認證 ​

bash
export BASE=http://localhost:8787
export TOKEN=zk_xxxx   # 取啟動日誌「已建立演示租戶」那一行的 apiKey

# 健康檢查(公開)
curl -s $BASE/healthz                 # => {"status":"ok"}

# 無 Key → 401
curl -s -o /dev/null -w "%{http_code}\n" $BASE/api/v1/sessions   # => 401

# 正確 Key → 200
curl -s -o /dev/null -w "%{http_code}\n" -H "Authorization: Bearer $TOKEN" $BASE/api/v1/sessions

核心端點速查 ​

會話 ​

方法路徑說明
GET/healthz健康檢查(公開)
POST/api/v1/sessions建立會話
GET/api/v1/sessions列出會話
GET/api/v1/sessions/{id}獲取會話
PATCH/api/v1/sessions/{id}重新命名會話
DELETE/api/v1/sessions/{id}刪除會話
GET/api/v1/sessions/{id}/state會話狀態(含掛起中的審核/提問)
PATCH/api/v1/sessions/{id}/model切換會話模型
PATCH/api/v1/sessions/{id}/mode切換許可權模式(plan / interactive / auto / discuss)
PATCH/api/v1/sessions/{id}/draft儲存輸入框草稿(傳空串即清空)
POST/api/v1/sessions/{id}/turns提交任務
POST/api/v1/sessions/{id}/steer執行中補充資訊
POST/api/v1/sessions/{id}/interrupt中斷當前任務
POST/api/v1/sessions/{id}/resume恢復會話
GET/api/v1/sessions/{id}/events事件流(輪詢或 SSE,支援 ?since= 增量)
GET/api/v1/sessions/{id}/approvals待審核列表
POST/api/v1/sessions/{id}/approvals/{aid}回答審核
GET/api/v1/sessions/{id}/questions待回答列表
POST/api/v1/sessions/{id}/questions/{qid}回答問題

專案與節點 ​

方法路徑說明
GET / POST/api/v1/projects列出 / 建立專案(建立時指定工作目錄)
DELETE/api/v1/projects/{id}刪除專案
GET/api/v1/models可用模型列表
GET / PUT/api/v1/config檢視 / 更新節點設定
GET / PUT/api/v1/node/llm檢視 / 設定節點級預設模型
GET/api/v1/node/host節點主機資訊
GET/api/v1/tools工具列表
GET/api/v1/mcpMCP 伺服器列表
PUT/api/v1/mcp整體替換 MCP 設定(寫入專案 .agent/mcp.json;平臺下發時 409)
POST/api/v1/mcp/test連線測試單個 MCP 伺服器(不落盤)

用量與成本 ​

方法路徑說明
GET/api/v1/usage/summary用量彙總(按時間範圍 / 模型)
GET/api/v1/usage/records明細記錄
GET/api/v1/usage/export匯出 CSV
GET / PUT/api/v1/usage/pricing檢視 / 修改價格表
POST/api/v1/usage/rebuild重建彙總
POST/api/v1/usage/verify校驗賬本

遠端接入與配對 ​

方法路徑說明
GET/api/v1/fleet/status節點接入狀態
POST/api/v1/fleet/enroll憑接入碼接入(zqagent link 呼叫)
POST/api/v1/fleet/unlink解除接入
GET/api/v1/fleet/pairing獲取雲端接入配對資訊(閘道器地址 + 名稱空間/金鑰 + nodeId)
GET / POST/api/v1/notifications檢視 / 新增通知渠道
DELETE/api/v1/notifications/{id}刪除通知渠道

快速上手 ​

bash
# 建立會話
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"model":"gpt-4o-mini"}' $BASE/api/v1/sessions
# => {"data":{"sessionId":"e4df66d6...","status":"idle",...}}

export SID=e4df66d6...   # 替換為返回的 sessionId

# 提交任務(立即返回,後臺非同步執行)
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"input":"你好,請介紹一下自己"}' $BASE/api/v1/sessions/$SID/turns
# => {"data":{"accepted":true,"status":"running"}}

# 輪詢事件(since 游標增量拉取)
curl -s "$BASE/api/v1/sessions/$SID/events?since=0"

# 即時訂閱(SSE)
curl -N -H "Authorization: Bearer $TOKEN" -H "Accept: text/event-stream" \
  $BASE/api/v1/sessions/$SID/events

若會話正在執行任務,POST /turns 會自動轉為補充資訊注入當前任務 (返回 {"data":{"accepted":true,"status":"steering"}}),而不是報錯。

審核與提問 ​

模型請求有副作用的操作(寫檔案、執行命令等)時會掛起等待審核;呼叫 ask_user 等工具時 會掛起等待回答。

bash
# 檢視待審核列表(id 就是工具呼叫 ID)
curl -s -H "Authorization: Bearer $TOKEN" $BASE/api/v1/sessions/$SID/approvals

# 回答審核:once | always_tool | always_command | deny
#   always_command 僅對 run_shell 有效
export AID=call_xxx
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"decision":"once"}' $BASE/api/v1/sessions/$SID/approvals/$AID

# 回答問題
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"answer":"繼續"}' $BASE/api/v1/sessions/$SID/questions/qid_xxx

多租戶隔離 ​

每個租戶用自己的 API Key 訪問自己的會話;用租戶 A 的 Key 訪問租戶 B 的會話會返回 404。

錯誤碼速查 ​

HTTPcode場景
401unauthorized無 Key / Key 無效
404not_found會話不存在 / 未知路由 / 跨租戶訪問
409not_running顯式 steer 時會話未在執行中
409has_pending_interaction存在未決審核/提問,不能提交新任務
400bad_requestbody 非法 JSON / input 為空
400invalid_decisiondecision 非法,或對非 run_shell 提交 always_command