# Claude Opus 5 — /chat/completions

Claude Opus 5 对话接口（Anthropic）：自适应思考，擅长复杂推理、代码工程和 Agent 编排。思考强度 low 到 max 五档可调，支持图片输入、工具调用和提示缓存。同时提供 OpenAI 兼容接口和原生 Anthropic 接口，Claude Code 可以直连。

**端点:** `POST https://kovapi.com/v1/chat/completions`

## 快速开始

两步跑通：先发一个普通请求，再试流式输出。把 YOUR_API_KEY 换成你的 Key，下面的命令可以直接运行。接口和 OpenAI 的 Chat Completions 一致，已有的 OpenAI 代码只要改 `base_url` 和 `model`。

**第 1 步 · 发送请求**

```
curl https://kovapi.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "claude-opus-5", "messages": [{"role": "user", "content": "用一句话解释什么是光合作用"}]}'
```

返回（HTTP 200）

```
{
  "id": "chatcmpl-7f3c9a1e2b4d6f8a",
  "object": "chat.completion",
  "created": 1791281400,
  "model": "claude-opus-5",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "光合作用是植物利用阳光，把二氧化碳和水转化成糖并释放氧气的过程。"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 18,
    "completion_tokens": 42,
    "total_tokens": 60
  }
}
```

`message.content` 是回答，`usage` 是这一单计费用的 token 数；提示缓存怎么计费，见下文「提示缓存」。

**第 2 步 · 流式输出（推荐）**

```
curl -N https://kovapi.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "claude-opus-5", "stream": true, "messages": [{"role": "user", "content": "用一句话解释什么是光合作用"}]}'
```

流式返回标准的 SSE：每一块的正文在 `choices[0].delta.content`，最后一块带 `usage`，以 `data: [DONE]` 结束。回答长、或者模型要先思考时，请用流式：非流式请求最长约 10 分钟，超过会被断开。

**Python（OpenAI SDK）**

```
from openai import OpenAI

client = OpenAI(base_url="https://kovapi.com/v1", api_key="YOUR_API_KEY")

# 1. 一问一答
resp = client.chat.completions.create(
    model="claude-opus-5",
    messages=[{"role": "user", "content": "用一句话解释什么是光合作用"}],
)
print(resp.choices[0].message.content)

# 2. 流式输出
stream = client.chat.completions.create(
    model="claude-opus-5",
    messages=[{"role": "user", "content": "用一句话解释什么是光合作用"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
```

**也可以用 Anthropic SDK（原生接口）**

```
import anthropic

client = anthropic.Anthropic(base_url="https://kovapi.com/anthropic", api_key="YOUR_API_KEY")
msg = client.messages.create(
    model="claude-opus-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "用一句话解释什么是光合作用"}],
)
print(next(b.text for b in msg.content if b.type == "text"))
```

Anthropic SDK 的 `base_url` 写到 `/anthropic` 为止，SDK 会自己加上 `/v1/messages`；Key 和上面是同一把。

## 认证
```
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
```

## 规格速览

| 上下文窗口 | ~200K token |
| --- | --- |
| 输入 | 文本、图片 |
| 思考 | 自适应思考（默认开启），强度用 `reasoning_effort` 调 |
| 工具调用 | 支持（OpenAI `tools` 格式） |
| 联网搜索 | 支持（`web_search: true`，搜索本身不收费） |
| 接口 | /v1/chat/completions · /anthropic/v1/messages |
| 流式输出 | 支持（`stream: true`，SSE） |
| 计费方式 | 按 token：输入、输出（含思考）和缓存命中分别计价，失败不收费 |

## 请求参数

`POST /v1/chat/completions` 的请求体（JSON），和 OpenAI 的 Chat Completions 相同。下表是常用参数，以及它们在这个模型上的实际效果：

| 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| model | string | 是 | 模型 id：`claude-opus-5`。 |
| messages | array | 是 | 对话消息数组，每条有 `role`（`system` / `user` / `assistant` / `tool`）和 `content`。`content` 可以是字符串，也可以是 `text` 和 `image_url` 组成的数组（看图，见下文）。多轮对话把历史消息按顺序全部带上。 |
| stream | boolean | 否 | `true` 时以 SSE 流式返回，最后一块带 `usage`。默认 `false`。 |
| max_tokens | integer | 否 | 输出上限，思考 token 也算在里面。给得太小，模型可能在写出正文前就用完：网关会返回 400 `max_tokens_too_small`，不计费（建议 512 以上）。部分模型上，过小的值会被自动调高到能完整作答的下限，仍只按实际用量计费。 |
| temperature / top_p | number | 否 | 这一代 Claude 已经不支持采样参数：网关会去掉 `temperature`、`top_p`、`top_k`（不报错），模型按默认方式采样。 |
| reasoning_effort | string | 否 | 思考强度：low / medium / high / xhigh / max，网关会转成 Claude 的 `output_config.effort`；`minimal` 和 `none` 按 `low` 处理。也可以写成 `claude-opus-5-high`。 |
| thinking | object | 否 | `{"type": "disabled"}` 关闭思考。旧写法 `{"type": "enabled", "budget_tokens": N}` 会按预算换算成相近的思考强度。 |
| tools / tool_choice | array / string | 否 | 函数调用，OpenAI 标准格式。模型要调用时返回 `finish_reason: "tool_calls"` 和 `tool_calls`，见下文。 |
| web_search | boolean | 否 | `true` 时先联网搜索，把结果作为参考资料交给模型，见下文。 |

其余 OpenAI 参数（如 `stop`、`seed`、`user`）原样转给模型，是否生效由模型决定。

## 价格

按 token 计费，价格实时读取计费表（每百万 token）。写入提示缓存的 token 按缓存写入价，命中缓存的按缓存命中价。只按成功请求的实际用量收费，1 积分 = $0.005。

| 类型 | 美元 / 百万 token | 积分 / 百万 token |
| --- | --- | --- |
| 输入 | $4.00 | 800 |
| 输出（含思考） | $20.00 | 4000 |
| 缓存命中 | $0.40 | 80 |
| 缓存写入 | $5.00 | 1000 |

举例：输入 2,000 token、输出 1,000 token（含思考）的一次请求约 $0.028。

## 思考

自适应思考，默认开启：模型按问题难度决定想多少。`reasoning_effort` 可选 low / medium / high / xhigh / max，网关会转成 Claude 的 `output_config.effort`；也可以把档位写进型号名，例如 `claude-opus-5-high`，按 `claude-opus-5` 计费。

要拿到思考摘要，请用原生接口 `/anthropic`，在请求里带 `"thinking": {"type": "adaptive", "display": "summarized"}`；思考强度写成 `"output_config": {"effort": "high"}`。

这个型号可以关闭思考：传 `"thinking": {"type": "disabled"}`。

思考 token 计入输出 token，按输出价计费。

## 提示缓存

长提示词即使不做标记，也可能被自动写入缓存（按缓存写入价计费），之后重复的前缀按缓存命中价计费。用原生接口 `/anthropic` 时，可以在 system 或消息块上加 `"cache_control": {"type": "ephemeral"}` 自己指定缓存位置；Claude Code 会自动这样做。

原生接口在 `usage.cache_creation_input_tokens`（写入）和 `usage.cache_read_input_tokens`（命中）里返回缓存的 token 数，账单按返回的数字计算。

## 看图（图片输入）

在 `content` 数组里放 `image_url`。推荐用 base64 的 data URI（`data:image/png;base64,...`），总能被读到；公网图片链接要先下载，偶尔会取不到或超时。图片按模型方的规则折算成输入 token。

```
curl https://kovapi.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "claude-opus-5", "messages": [{"role": "user", "content": [{"type": "text", "text": "这张图里有什么"}, {"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBORw0KGgo..."}}]}]}'
```

## 工具调用（Function Calling）

在 `tools` 里用 JSON Schema 描述函数。模型决定调用时返回 `finish_reason: "tool_calls"`，`message.tool_calls` 里是函数名和参数（JSON 字符串）。

```
curl https://kovapi.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "claude-opus-5", "messages": [{"role": "user", "content": "上海现在天气怎么样"}], "tools": [{"type": "function", "function": {"name": "get_weather", "description": "Current weather of a city", "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]}}}]}'
```

执行函数后，把结果作为一条 `role: "tool"` 的消息（带上对应的 `tool_call_id`）追加到对话里再请求一次，模型会据此给出最终回答。`tool_choice` 可以是 `auto`、`none`、`required`，或指定某个函数。

## 联网搜索

请求里加 `"web_search": true`（或在 `tools` 里放 `{"type": "web_search"}`）：网关先根据对话实时搜索，把最多 5 条结果和链接作为参考资料交给模型，模型再作答并标注来源。搜索本身不收费，参考资料按输入 token 计费。

```
curl https://kovapi.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "claude-opus-5", "web_search": true, "messages": [{"role": "user", "content": "今天有哪些重要的科技新闻"}]}'
```

## 原生 Anthropic 接口（/anthropic）

- 地址 `https://kovapi.com/anthropic/v1/messages`，请求和返回都是 Anthropic Messages 格式：流式事件、工具调用（`tool_use` / `tool_result`）、图片块都和 Anthropic 官方一致，Anthropic SDK 和 Claude Code 可以直接用。

- 认证用 `x-api-key: YOUR_API_KEY`（也接受 `Authorization: Bearer`），Key 和 `/v1` 是同一把。`anthropic-version`、`anthropic-beta` 请求头会原样转发；`max_tokens` 必填。

- 只收 Claude 型号，其他型号返回 404 `not_found_error`。另有 `POST /anthropic/v1/messages/count_tokens`（计算 token 数，不收费）和 `GET /anthropic/v1/models`。

- 思考摘要：`"thinking": {"type": "adaptive", "display": "summarized"}`；思考强度：`"output_config": {"effort": "high"}`（low 到 max）。`temperature`、`top_p`、`top_k` 会被去掉。

- 出错时按 Anthropic 的格式返回：`{"type": "error", "error": {"type": ..., "message": ...}}`；余额不足是 402 `billing_error`。

- 联网搜索在这个接口上默认关闭（以免改动 Claude Code 每一轮相同的前缀、影响缓存），加请求头 `x-web-search: 1` 开启。

```
curl https://kovapi.com/anthropic/v1/messages \
  -H "x-api-key: YOUR_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{"model": "claude-opus-5", "max_tokens": 1024, "messages": [{"role": "user", "content": "用一句话解释什么是光合作用"}]}'
```

[在 Claude Code 里使用 →](https://docs.kovapi.com/integrations/claude-code)

## 稳定性与自动重试

- 请求出错、超时或满载时，网关会在开始返回内容之前自动重试，不需要你重试，也不会重复收费。

- 流式请求一旦开始输出就不再自动重试：中途断开时，按断开前已经产生的用量计费（见 [计费与退款](https://docs.kovapi.com/guide/billing)）。

- 模型满载时返回 429 并带 `Retry-After`，按它的秒数等待后重试；失败的请求不计费。各模型的状态见 [服务状态](https://kovapi.com/status)。

## 错误与退款

出错时返回一个 `error` 对象（`message`、`type`、`code`、`param`），请按 HTTP 状态码和 `code` 判断，不要匹配 `message` 的文字。失败的请求不计费，完整列表见 [错误码](https://docs.kovapi.com/guide/errors)。

| HTTP | code | 原因 | 怎么办 |
| --- | --- | --- | --- |
| 400 | invalid_messages / invalid_role / invalid_max_tokens | 对话请求的 `messages` 缺失、为空或格式不对，`role` 不在允许的范围，或 `max_tokens` 不是正整数。`param` 指出是哪个字段。 | 修正 `param` 指出的字段。 |
| 400 | model_not_found | 型号写错、没有传 `model`，或这个型号不能用在这个接口上（例如拿对话模型调生图接口）。 | 以 `GET /v1/models` 或 [API 手册](https://docs.kovapi.com/api) 里的模型 id 为准。 |
| 400 | max_tokens_too_small | 思考型模型把 `max_tokens` 全部用在了思考上，没有写出正文（非流式对话）。 | 调大 `max_tokens` 后重试。 |
| 4xx | invalid_request | 模型方拒绝了请求（例如上下文超长、参数不支持），状态码和 `message` 按模型方的原样返回，`code` 是模型方给出的值。 | 按 `message` 修改请求。 |
| 401 | invalid_api_key | Key 不存在、已删除或已停用，或者账号已停用。 | 到控制台「API Keys」页面检查这把 Key。 |
| 402 | insufficient_quota | 余额不够预扣这一单。网关先按这一单可能的最高费用预扣，同时发很多请求时也可能出现。 | 如果是并发突发，稍等几秒重试；否则充值。 |
| 403 | permission_denied | 这个模型不在这把 Key 的模型白名单里。 | 换成白名单里的模型，或在控制台修改白名单。 |
| 429 | rate_limit_exceeded | 超过了这把 Key 设置的每分钟请求数（按最近 60 秒计）。不带 `Retry-After`。 | 等几秒再试，或在控制台调高这把 Key 的上限。 |
| 429 | rate_limit_exceeded | 这个模型暂时满载，请求没有发出。只出现在对话类接口：图片和视频任务不会被拒，而是排队。OpenAI 兼容接口带 `Retry-After`。 | 按 `Retry-After` 的秒数等待后重试。 |
| 502 | upstream_timeout | 上游超时，包括迟迟没有返回第一个字。 | 重试；长回答建议用 `stream: true`。 |
| 502 | upstream_unavailable | 上游出错或暂时不可用。 | 稍后重试。 |
| 502 | upstream_busy | 模型方限流。模型方的 429 不会原样返回给你，而是换成这个 502。 | 稍后重试。 |
| 502 | empty_completion | 模型方返回了空内容。这不是对你的内容的判定。 | 重试。 |
| 503 | model_maintenance | 型号维护中，暂停接单，期间不会改由其他模型作答。 | 维护结束后重试，进度见 [服务状态](https://kovapi.com/status)。 |

流式请求开始输出后再出错，状态码不会改变：错误会以一条带 `error` 的数据出现在流里，或者流直接结束（没有 `data: [DONE]`），请按中断处理。
