Python / 原生 HTTP
当前仓库没有可安装的 web-agent-sdk Python 包。Python 集成应直接调用 WebAgent REST API;字段和路径以 OpenAPI spec 为准。
安装 HTTP 客户端
pip install httpx服务端 API key 只放在服务端环境变量中:
import os
import httpx
BASE = "https://webagent.qoni.ai"
PROJECT_ID = os.environ["WEBAGENT_PROJECT_ID"]
API_KEY = os.environ["WEBAGENT_API_KEY"] # wa_...
HEADERS = {"Authorization": f"Bearer {API_KEY}"}创建 DoAnything run
当前推荐的 run 资源路径是 /api/v1/projects/{pid}/do_anything/runs。它会在没有 session_id 时创建新的 session;需要复用 session 时在请求体中传 session_id。
async with httpx.AsyncClient(base_url=BASE, headers=HEADERS, timeout=None) as client:
response = await client.post(
f"/api/v1/projects/{PROJECT_ID}/do_anything/runs",
json={
"instructions": "打开 Hacker News,列出首页前五条故事的标题和链接。",
"max_duration_minutes": 10,
},
)
response.raise_for_status()
run = response.json()
run_id = run["run_id"]
async with client.stream(
"GET",
f"/api/v1/projects/{PROJECT_ID}/do_anything/runs/{run_id}/events",
) as stream:
async for line in stream.aiter_lines():
if line.startswith("data:"):
print(line[5:].strip())DoAnything 的单 run 路径还提供 GET、POST .../cancel、POST .../intervene、POST .../messages、GET .../screenshots 和 SSE .../events。旧的 session-scoped 路径仍被 Console 使用,但新集成优先使用 run-id 路径。
DeepResearch 与 WebSearch
research = await client.post(
f"/api/v1/projects/{PROJECT_ID}/deep_research/runs",
json={"topic": "2026 年浏览器自动化的主要趋势", "depth": "standard"},
)
research.raise_for_status()
search = await client.post(
f"/api/v1/projects/{PROJECT_ID}/web_search/runs",
json={
"queries": ["browser automation 2026"],
"max_results_per_query": 5,
"summarize": True,
},
)
search.raise_for_status()两个创建接口都会返回 202 和 run envelope;用 GET .../runs/{run_id} 轮询,或订阅 .../events。WebSearch 当前没有 refine、follow-up 或 messages 端点。
Track
monitor = await client.post(
f"/api/v1/projects/{PROJECT_ID}/track/tracks",
json={
"instructions": "每天上午九点检查这个页面是否有变化。",
"schedule": {"daily_at": "09:00", "tz": "Asia/Singapore"},
},
)
monitor.raise_for_status()
monitor_id = monitor.json()["id"]
checks = await client.get(
f"/api/v1/projects/{PROJECT_ID}/track/tracks/{monitor_id}/checks",
)
checks.raise_for_status()
print(checks.json())每日调度提前 0–30 分钟;间隔调度用整数 every_seconds(600–2592000)。run_now 只受理并返回任务引用,需查询最近 50 次 checks 确认终态。创建立即启动 first_look,checks 成功状态是 done;当前检查未结束时 run_now 返回 409 task_in_progress,先等终态,不自动重试。pause/delete 不取消在途检查。Track PATCH 直接传 title/instructions/schedule/status;无旧 DSL、通知或 SSE。完整契约见 Track。
认证边界
上面的原生 HTTP 示例使用 wa_... API key。Node SDK 的高层方法不是这样调用:它使用 AK/SK 初始化,再通过 delegateToken() 得到代表终端用户的短期 token。不要把 SDK 内部的 token exchange 路由写进业务代码。