搜索文档

浏览 Awaken Agents 文档
Docs/Awaken Agentsv1.0.0-dev/开发指南/构建 Agent通过 API 选择模型与 ACP runtime
提示·你正在阅读发布前文档(v1.0.0-dev)。接口与行为在稳定发布前仍可能变化。

开发指南 · 构建 Agent

通过 API 选择模型与 ACP runtime

本页内容

为 Agent 或单个 Session 选择模型、provider route,以及 Native 或 ACP executor。

当 API request 需要指定模型与执行 runtime 时,使用本指南。先连接 provider 并导入模型, 再选择一个 selector 并发布。Agent 或 Session 创建成功,且 publication 包含精确 model route 与 backend_ref 时,这项任务完成。

Selector 包含三个独立选择:

选择例子必须已经存在的位置
模型claude-sonnet-5Active Workspace model offering;ACP runtime 自有模型除外
Provider routeproviderapiendpoint qualifierProvider Connection
ExecutorNative 或 executor=acp:codexWorker runtime capability

Sandbox placement 是另一项选择。acp:codex 可以使用 namespace、container 或 Kubernetes Pod;selector 不负责选择这个边界。

选择 model.id

需要model.id
使用唯一匹配的 Native offering<model-id>
固定 Native provider route<model-id>;provider=<provider>;api=<dialect>;endpoint=<endpoint>
通过 ACP runtime 使用 provider 模型<model-id>;provider=<provider>;api=<dialect>;endpoint=<endpoint>;executor=acp:<runtime>
让 ACP runtime 使用自己的默认模型与登录状态executor=acp:<runtime>
使用已配置 inference profileprofile=<profile-id>

api qualifier 需要 providerendpoint 同时需要 providerapi。Runtime id 必须 精确匹配。近似名称会被拒绝,不会路由到另一个 CLI。

claude-sonnet-5;provider=anthropic;api=anthropic_messages;endpoint=primary
claude-sonnet-5;provider=anthropic;api=anthropic_messages;endpoint=primary;executor=acp:claude
executor=acp:codex

静态所有权

flowchart LR
  API[Managed API、Config API<br/>或 Session override] --> P[唯一 model selector parser]
  P --> I[ModelSelection]
  C[(Provider Connection catalog)] --> R[Publication resolver]
  W[(Worker runtime capabilities)] --> R
  I --> R
  R --> S[ExecutableAgentSnapshot<br/>route、credential revision、backend_ref]
  S --> X[AttemptExecutorRegistry]
  X --> N[Native executor]
  X --> A[精确 ACP executor]

Provider Connection 是 provider、endpoint、credential 与 imported offering 的唯一写入者。 Selector 只引用这些配置,不会创建第二条 route。Agent write 与 Session override 复用同一个 parser 和 publication resolver。

Runtime id、版本、credential、模型交付和持久化由 ACP runtime 矩阵维护;backend 与 Sandbox 边界由 执行模式概念页维护。

Model selector 不选择应用 ingress。同一份 publication 可以由受支持协议访问;方向与 endpoint 应在协议接入矩阵中选择。

通过官方 SDK 发布

官方 SDK 仍把 model.id 作为字符串。Awaken 在处理 POST /v1/agents 时解析它:

import Anthropic from '@anthropic-ai/sdk';

const client = new Anthropic({
  baseURL: process.env.AWAKEN_BASE_URL ?? 'http://127.0.0.1:8080',
  apiKey: process.env.AWAKEN_API_KEY ?? 'local',
});

const agent = await client.beta.agents.create({
  name: 'Repository assistant',
  model: {
    id: 'claude-sonnet-5;provider=anthropic;api=anthropic_messages;endpoint=primary;executor=acp:claude',
  },
});

删除 executor qualifier 后,同一 provider route 会通过 Native loop 执行。模型可以相同, 但 Agent 行为仍可能不同,因为 ACP runtime 还拥有自己的 loop、上下文约定与工具协议。

Override 一个 Session

只有一个 Session 需要不同选择,且不希望修改 Agent publication 时,使用 agent_with_overrides

const session = await client.beta.sessions.create({
  agent: {
    type: 'agent_with_overrides',
    id: agent.id,
    model: {
      id: 'qwen/qwen3-235b;provider=anyrouter;api=open_ai_responses;endpoint=primary;executor=acp:codex',
    },
  },
  environment_id: process.env.AWAKEN_ENVIRONMENT_ID,
});

Awaken 会重新解析完整 override,不会只替换旧 snapshot 中的一个字符串,也不会保存新旧事实 混合的状态。

使用 backend 自有配置

需要 draft、validate、publish 三阶段,或 ACP runtime 自己拥有模型与 options 时,使用 /v1/config/agents/*

{
  "name": "Codex workspace agent",
  "model": {
    "mode": "backend_exact",
    "backend_ref": "acp:codex",
    "model_ref": "gpt-5",
    "configuration": {
      "mode": "read-only",
      "options": { "model": "gpt-5" }
    }
  }
}

backend_default 只提供 backend_refbackend_exact 还提供 model_ref。Runtime 必须通过 negotiated capability 接受指定 mode 与 options。带自定义 ACP configuration 的 Awaken-managed provider target 应使用 model.id

动态校验与执行

sequenceDiagram
  participant C as API client
  participant A as Authoring API
  participant R as Publication resolver
  participant S as Snapshot store
  participant W as Worker

  C->>A: 携带 model.id 的 Agent write 或 Session override
  A->>A: 解析唯一 selector
  A->>R: 解析 offering、route、credential 与 backend
  alt 所需事实均可用
    R-->>A: 精确 secret-free candidates
    A->>S: 提交不可变 snapshot
    W->>S: 读取 snapshot,精确匹配 backend_ref
  else 无效、缺失、歧义或不支持
    R-->>A: 字段化错误
    A-->>C: 拒绝请求,不保存 partial snapshot
  end

读取结果

结果含义要做什么
Agent 或 Session 创建成功一套完整选择已经解析并保存运行 Session,观察已提交 event
Selector syntax 被拒绝Qualifier 依赖或 runtime id 无效修正错误中指出的字段;没有 partial state 需要清理
Offering、credential 或 provider route 不可用Publication 无法生成 executable candidate完成已有 Provider Connection,或选择 available offering
精确 ACP capability 不可用请求的 runtime 无法 placement注册具备该精确 capability 的 Worker,或选择另一已发布 backend
Dispatch 后 Worker lease expiryClaim fencing 与 reclaim 负责恢复执行所有权除非 terminal placement 结果明确说明 backend 不可用,否则不要修改 selector
Partial commit 前允许的 model candidate 失败Candidate policy 可以尝试下一个模型无需修改 selector;backend identity 保持不变

/v1/config/executable-models 用于查看 Native readiness,/v1/models 是 Managed compatibility projection。两者都不是完整 ACP runtime 目录;ACP capability 会在 validate 与 publish 时检查。

模型供应商、Managed wire 兼容性与托管责任是不同的选择。使用 Anthropic 模型不会把 Awaken deployment 变成 Anthropic hosted service。Wire resource 与 beta header 差异见 Managed Agents 兼容性页面