Claude Sonnet 4.6 对话接口(Anthropic):能力和速度均衡,擅长日常对话、代码和 Agent,上下文约 200K token,支持图片输入和工具调用。提供 OpenAI 兼容接口和原生 Anthropic 接口。
📥 上下文窗口(最大输入):约 200K tokens(20 万)。
在 Playground 试用 →快速开始
两步跑通:先发一个普通请求,再试流式输出。把 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-sonnet-4-6", "messages": [{"role": "user", "content": "用一句话解释什么是光合作用"}]}'返回(HTTP 200)
{
"id": "chatcmpl-7f3c9a1e2b4d6f8a",
"object": "chat.completion",
"created": 1791281400,
"model": "claude-sonnet-4-6",
"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-sonnet-4-6", "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-sonnet-4-6",
messages=[{"role": "user", "content": "用一句话解释什么是光合作用"}],
)
print(resp.choices[0].message.content)
# 2. 流式输出
stream = client.chat.completions.create(
model="claude-sonnet-4-6",
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-sonnet-4-6",
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
在控制台创建 API Key 后即可调用。
规格速览
| 上下文窗口 | ~200K token |
| 输入 | 文本、图片 |
| 思考 | 默认不思考;在原生接口上可以开启并返回摘要 |
| 工具调用 | 支持(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-sonnet-4-6。 |
| 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 | 否 | 采样参数,原样转给模型(temperature 取 0–2)。思考型模型可能不受它们影响。 |
| 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 |
|---|---|---|
| 输入 | $1.50 | 300 |
| 输出(含思考) | $7.50 | 1500 |
| 缓存命中 | $0.15 | 30 |
| 缓存写入 | $1.875 | 375 |
举例:输入 2,000 token、输出 1,000 token(含思考)的一次请求约 $0.0105。
思考
默认直接作答、不思考。要开启思考并拿到摘要,请用原生接口 /anthropic,在请求里带 "thinking": {"type": "adaptive", "display": "summarized"}。
思考 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-sonnet-4-6", "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-sonnet-4-6", "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-sonnet-4-6", "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"}(开启思考时temperature只能是 1)。 - 出错时按 Anthropic 的格式返回:
{"type": "error", "error": {"type": ..., "message": ...}};余额不足是 402billing_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-sonnet-4-6", "max_tokens": 1024, "messages": [{"role": "user", "content": "用一句话解释什么是光合作用"}]}'稳定性与自动重试
错误与退款
出错时返回一个 error 对象(message、type、code、param),请按 HTTP 状态码和 code 判断,不要匹配 message 的文字。失败的请求不计费,完整列表见 错误码。
| 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 手册 里的模型 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 | 型号维护中,暂停接单,期间不会改由其他模型作答。 | 维护结束后重试,进度见 服务状态。 |
流式请求开始输出后再出错,状态码不会改变:错误会以一条带 error 的数据出现在流里,或者流直接结束(没有 data: [DONE]),请按中断处理。