跳转到主要内容

OpenClaw 里用 apiyi 的 Claude(Anthropic Messages)— 已验证可用配置

这份文档记录我们实测跑通的 apiyi Claude 配置形态:能多轮对话、能工具调用(tool loop),并且避开 Bedrock 的 400 ValidationException: Operation not allowed

结论(最重要的几条)

  • apiyi 的 Claude 要想工具稳定,优先走 api: "anthropic-messages"(也就是 POST /v1/messages)。
  • 必须带请求头:anthropic-version: 2023-06-01
  • 强制禁用 beta 头:anthropic-beta: ""
  • Claude 4.6 在 apiyi/Bedrock 上,只要请求里出现 thinking 相关字段(thinking / output_config)就可能直接 400
    • 所以我们把模型条目设置为 reasoning: false,让 OpenClaw/pi-ai 不去发 thinking 字段。

为什么要这么配

  • openai-completions 时:纯聊天能通,但一旦进入工具多轮(tool_calls / tool_result / tool loop),会被 Bedrock 400 拒绝。
  • 改走 anthropic-messages 后:tool_use + tool_result 这套格式能被 apiyi 接受;但 thinking 字段仍然会触发 400,所以要关。

Provider 配置(必须)

把下面这段放进 openclaw.jsonmodels.providers.apiyi 注意:
  • baseUrl 必须https://api.apiyi.com(不要带 /v1),否则有机会拼成 .../v1/v1/messages
  • 别在公频贴真实 key。
{
  "models": {
    "providers": {
      "apiyi": {
        "baseUrl": "https://api.apiyi.com",
        "apiKey": "sk-REPLACE_ME",
        "api": "anthropic-messages",
        "headers": {
          "anthropic-version": "2023-06-01",
          "anthropic-beta": ""
        },
        "models": [
          {
            "id": "claude-opus-4-6",
            "name": "claude-opus-4-6",
            "reasoning": false,
            "input": ["text"],
            "contextWindow": 200000,
            "maxTokens": 16384
          },
          {
            "id": "claude-sonnet-4-6-thinking",
            "name": "claude-sonnet-4-6-thinking",
            "reasoning": false,
            "input": ["text"],
            "contextWindow": 200000,
            "maxTokens": 16384
          }
        ]
      }
    }
  }
}

allowlist(必须,不然会 fallback)

把模型加入 agents.defaults.models,否则 OpenClaw 可能提示 provider/model “未登记/未允许”,然后悄悄 fallback 到别的模型。
{
  "agents": {
    "defaults": {
      "models": {
        "apiyi/claude-opus-4-6": { "streaming": false },
        "apiyi/claude-sonnet-4-6-thinking": { "streaming": false }
      }
    }
  }
}

Agent 示例(以 tasks 为例)

{
  "agents": {
    "list": [
      {
        "id": "tasks",
        "model": "apiyi/claude-opus-4-6",
        "tools": {
          "profile": "coding",
          "alsoAllow": ["group:web"]
        }
      }
    ]
  }
}

常见坑:Session 覆盖(非常常见)

就算你改了 config,已有频道 session 可能还保存着旧的 modelProvider/model 覆盖,导致“看起来没生效”。 两种修法:
  • 直接 patch session model:
openclaw gateway call sessions.patch --params '{"key":"agent:tasks:discord:channel:<CHANNEL_ID>","model":"apiyi/claude-opus-4-6"}'
  • 或者 reset session(清 transcript):
openclaw gateway call sessions.reset --params '{"key":"agent:tasks:discord:channel:<CHANNEL_ID>","reason":"reset"}'

怎么验证

  • openclaw models status --agent tasks
  • openclaw agent --agent tasks --message "只回 pong" --json
    • meta.agentMeta.provider/model 是否符合预期。

已知报错与含义

  • 400 ... ValidationException: Operation not allowed
    • 基本就是请求里出现了 thinking 字段(thinking / output_config)或某些 beta 功能。
    • 处理:确保 reasoning:false + anthropic-beta:""

安全提醒

  • 如果你曾在 Discord 公频贴过 apiyi key,按“已泄露”处理,立刻去轮换。
  • openclaw.json 和 agent 的 models.json 都会明文存 key(本机文件层面)。