Skip to main content
快速入门

快速入门

5 步跑通你的第一个 Qoder Cloud Agent:获取 PAT 或 SAT、选择环境、创建 Agent、创建 Session、收发消息。全程只需 curl,无需安装任何 SDK。

前置条件

  • 一个 Qoder 账号
  • 终端环境(macOS / Linux / WSL)
  • curljq
Windows 用户:本文档中的命令基于 bash 语法。Windows 用户推荐使用 Git Bash(安装 Git for Windows 自带)或 WSL(通过 wsl --install 安装)。如果使用 PowerShell,需注意:环境变量设置用 $env:QODER_ACCESS_TOKEN="your-token",调用真实 curl 用 curl.exejq 需额外安装(winget install jqlang.jq)。

第 1 步:获取访问令牌

根据调用身份选择 PAT 或 SAT。后续步骤统一使用 QODER_ACCESS_TOKEN 环境变量。 先设置服务地址。置换 SAT 和调用业务 API 必须使用同一区域的地址:
export QODER_OPENAPI_BASE_URL="https://openapi.qoder.com.cn"
export QODER_API_BASE_URL="https://api.qoder.com.cn"

方式一:PAT(个人用户)

  1. 登录 Qoder 控制台
  2. 进入「设置 → 个人访问令牌」
  3. 点击「创建令牌」,设置名称和有效期
  4. 复制令牌并设置环境变量:
export QODER_PAT="your-personal-access-token"
export QODER_ACCESS_TOKEN="$QODER_PAT"
PAT 只在创建时显示一次,请立即安全保存。

方式二:SAT(Service Account Token)

  1. 使用组织管理员账号登录 Qoder 控制台
  2. 在组织管理中创建或选择 Service Account
  3. 在 Service Account 详情页创建 API Key。创建时无需选择 scope;所需 scope 在置换 SAT 时指定
  4. 复制 SA Key,然后置换 SAT:
export QODER_SA_KEY="sa-key"

SAT_RESPONSE=$(curl --silent --show-error --location "$QODER_OPENAPI_BASE_URL/api/v1/serviceToken/exchange" \
  --header "Authorization: Bearer $QODER_SA_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
    "grant_type": "client_credentials",
    "audience": "qoder",
    "scope": "qca.access",
    "ttl_seconds": 43200
  }')

export QODER_SAT="$(printf '%s' "$SAT_RESPONSE" | jq -r '.access_token')"
export QODER_ACCESS_TOKEN="$QODER_SAT"
SA Key 只用于置换 SAT,不要直接用它调用 Cloud Agents API。SAT 最长有效 12 小时;过期后需要使用 SA Key 重新置换。
如果同一个服务端集成还需要调用 Forward API,请在置换请求中传入 "scope": "qca.access forward.access"。该 SAT 在 Forward 中具有当前 Service Account 所属账号下的管理员权限,只能在受信任的服务端使用。详见认证说明

第 2 步:选择环境

查询可用环境列表,获取环境 ID:
curl -s "$QODER_API_BASE_URL/api/v1/cloud/environments" \
  -H "Authorization: Bearer $QODER_ACCESS_TOKEN" | jq .
如果返回 "data": [](空数组),说明账号下还没有环境,请先创建一个:
curl -s -X POST "$QODER_API_BASE_URL/api/v1/cloud/environments" \
  -H "Authorization: Bearer $QODER_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "default"}' | jq .

第 3 步:创建 Agent

定义一个具备 shell 工具的通用 Agent:
curl -s -X POST "$QODER_API_BASE_URL/api/v1/cloud/agents" \
  -H "Authorization: Bearer $QODER_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "quickstart-agent",
    "model": "ultimate",
    "instructions": "You are a helpful coding assistant.",
    "tools": [
      {
        "type": "agent_toolset_20260401",
        "enabled_tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "WebFetch", "WebSearch"]
      }
    ]
  }' | jq .
记下响应中的 id 字段(如 agent_019e...),后续创建 Session 需要使用。

第 4 步:创建 Session

创建 Session 需要两个必填参数:agent(Agent ID 或对象)和 environment_id(Environment ID)。 将 Agent 绑定到环境,创建运行实例:
curl -s -X POST "$QODER_API_BASE_URL/api/v1/cloud/sessions" \
  -H "Authorization: Bearer $QODER_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "agent": "agent_YOUR_AGENT_ID",
    "environment_id": "env_YOUR_ENV_ID"
  }' | jq .
Session 创建后处于 idle 状态,需要在下一步发送消息后 Agent 才会开始执行。

第 5 步:发消息 + 收事件

向 Session 发送用户消息,然后通过 SSE 流实时接收 Agent 响应:
# 发送消息
curl -s -X POST "$QODER_API_BASE_URL/api/v1/cloud/sessions/sess_YOUR_SESSION_ID/events" \
  -H "Authorization: Bearer $QODER_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "user.message",
    "content": [{"type": "text", "text": "Write a Python function that calculates fibonacci numbers"}]
  }'
# 接收 SSE 事件流
curl -sN "$QODER_API_BASE_URL/api/v1/cloud/sessions/sess_YOUR_SESSION_ID/events/stream" \
  -H "Authorization: Bearer $QODER_ACCESS_TOKEN"
heartbeat 事件约每 15 秒发送一次,用于保持连接活跃。agent.messagecontent 字段使用 [{"type":"text","text":"..."}] 数组格式。

常见问题

Q: 提示 401 Unauthorized 怎么办? A: 检查 $QODER_ACCESS_TOKEN 是否已正确设置,令牌是否过期。PAT 用户请重新创建令牌;Service Account 用户请使用 SA Key 重新置换 SAT。 Q: 创建 Agent 返回 400 Bad Request? A: 检查请求体 JSON 格式是否正确,model 字段是否为有效值(如 "ultimate"),tools 是否为数组。 Q: Session 一直处于 idle 状态,收不到事件? A: Session 创建后默认为 idle,必须向其发送 user.message 事件才会触发 Agent 执行。请确认第 5 步已正确执行。 Q: SSE 流连接中断了怎么办? A: 推荐保留断线前最后一个事件的 id 字段(如 evt_...),重连时带 ?after_id=<last_event_id> 查询参数,服务端会从该事件之后继续推送。 Q:GET /environments返回空数组? A: 新账号可能没有预置环境,请参照第 2 步中的提示手动创建一个。

下一步