概览
除兼容 OpenAI 的 API 外,GoModel 还在POST /v1/messages 上接收 Anthropic Messages API 请求格式。使用 Anthropic 格式的客户端和 SDK 无需修改即可指向 GoModel。
请求在入口处被转换为 GoModel 的规范聊天类型,并经过与 /v1/chat/completions 相同的处理流水线,因此虚拟模型、工作流策略、预算、故障转移、响应缓存、用量/成本追踪和审计日志都会生效。由于每个提供商都实现了聊天补全,Anthropic 格式的请求可以路由到任意已配置的提供商(OpenAI、Gemini、Bedrock 等),而不仅限于 Anthropic。
这与透传 API 不同:/p/anthropic/v1/messages 只会将字节原样转发给 Anthropic 上游,而托管的 /v1/messages 端点可以路由到任意提供商,并完全由网关管理。
原生转发到 Anthropic
当/v1/messages 请求解析到 Anthropic 提供商时,GoModel 会跳过往返转换,原样转发原始请求体(仅当别名解析为不同名称时才改写 model 字段),然后原样返回提供商的原生响应或 SSE 流。这样可以保留规范转换无法表示的所有内容,例如 cache_control 断点、thinking 块签名、anthropic-beta 请求头,而 Claude Code 等编码智能体依赖这些内容。无论流式还是非流式响应,速率限制、预算、审计日志和用量追踪仍然生效。
原生转发是自动进行的。当启用了作用于规范请求的功能时,请求会回退到转换流水线:护栏请求修补、响应缓存或故障转移路由。解析到任何非 Anthropic 提供商的请求始终会进行转换。
由于请求体被原样转发,此路径不受任何转换限制的影响:服务端工具历史(server_tool_use、web_search_tool_result 等)、容器上传,以及规范请求无法表示的任何其他块,都会原样到达 Anthropic。
支持的端点
Message Batches
/v1/messages/batches 与兼容 OpenAI 的 /v1/batches 路由共用网关的原生批处理流水线,两者是同一资源在不同请求格式下的视图。批处理 ID 在两种格式之间可以互换(此处为 msgbatch_<uuid>,彼处为 batch_<uuid>)。同一批处理中的所有请求必须解析到同一个提供商;每个条目的 custom_id 值为必填且必须唯一。
对于批处理 API 基于文件的提供商(兼容 OpenAI),内联请求会以自动上传的 JSONL 输入文件形式发送。request_counts 映射提供商的汇总计数:批处理运行期间,未完成的请求报告为 processing;结束后,剩余请求按批处理结果(canceled、expired 或 errored)归类。
认证
两种凭据方式都可用,因此官方 Anthropic SDK 可以直接替换使用:Authorization: Bearer <key>:GoModel 的主要认证方式。x-api-key: <key>:Anthropic 原生请求头,在没有Authorization请求头时作为回退方式被接受。
示例
type: "message"、content 块、stop_reason、usage)。错误使用 Anthropic 错误结构({"type": "error", "error": {...}})。与 Anthropic API 一样,max_tokens 为必填。提供商的内容过滤会报告为 stop_reason: "refusal"。如果提供商在流式传输中途失败,流会以携带提供商自身错误信息的 error 事件结束。
对于所有提供商,usage 都遵循 Anthropic 的语义:input_tokens 不包含缓存的 Token,缓存的 Token 会单独报告为 cache_read_input_tokens 和 cache_creation_input_tokens。对于兼容 OpenAI 的提供商,其 prompt_tokens 包含缓存的 Token,GoModel 会将 cached_tokens 和 cache_write_tokens 移入上述字段,使三项计数之和等于整个提示词。
流式响应会发出 Anthropic SSE 事件序列(message_start、content_block_start/content_block_delta/content_block_stop、message_delta、message_stop)。
成本追踪与审计日志
/v1/messages 请求的追踪和审计方式与兼容 OpenAI 的路由完全相同。成本根据实际处理请求的提供商计算,用量记录在 /v1/messages 端点下,以便在控制台中筛选。
限制
以下限制适用于转换流水线,即路由到非 Anthropic 提供商的请求,或启用了护栏、响应缓存或故障转移的 Anthropic 请求。原生转发到 Anthropic 的请求会逐字节保留(仅当别名解析为不同名称时改写model 值),以下限制均不适用。
/v1/messages 通过 GoModel 的规范聊天类型进行转换。没有规范等价物的 Anthropic 特有功能无法端到端保留:
cache_control:路由到 Anthropic 时,会保留在请求、system/content 块、自定义工具以及 tool-use/tool-result 历史上。messages中的{"role": "system"}消息:路由到 Claude 4.8+/5 系列模型时,会保留其位置和cache_control断点(Claude Code 以这种方式追加系统提醒,其提示词缓存依赖这些消息保持原位)。对于不接受该角色的较旧 Claude 模型,其文本会被提升到顶层系统提示词中。thinking和redacted_thinking块:双向原样传递,包括签名。响应会携带 Anthropic 签发的signature(流式传输时为signature_delta),回传的助手轮次会原样重放,因此启用思考的对话和工具调用循环可以正确继续。其他提供商不会看到这些块。- 来自不签名推理内容的提供商的推理(DeepSeek、Fireworks 等):以
signature: ""的thinking块返回。Anthropic 的 schema 要求该成员必须存在,空值表示推理内容未签名。请原样回传该轮次:该块会像其他块一样重放给该提供商。Anthropic 只接受其自身签发的签名,因此携带未签名块的轮次在发送给 Claude 前会去除该块(轮次的其余部分原样发送)。 tool_result.is_error:路由到 Anthropic 时会保留。其他提供商没有等价的标志,只会收到结果内容。tool_use.extra_content:将其他提供商的重放状态(例如 Gemini 3 的 thought signature)带回该提供商。GoModel 会在其返回的tool_use块上设置该字段;请原样回传。参阅 Extra content、thinking 块与 thought signature。- 服务端/内置工具(网页搜索、代码执行等)及其历史块(
server_tool_use、web_search_tool_result等)会被拒绝,并返回明确的400;只有自定义工具(type缺失或为"custom")会被转换。工具搜索是例外(参阅下文的延迟工具加载)。 top_k:会被丢弃。它没有可移植的兼容 OpenAI 等价字段,且 OpenAI 系列提供商会拒绝未知的请求字段。temperature和top_p会被转发。tool_result块中的图片和文档(截图、工具读取的图片和 PDF 文件,Claude Code 以这种方式返回它们):路由到 Anthropic 时,以原生image和document块转发。OpenAI 通过其 Responses API 接收它们,模型可以看到这些内容(参阅通过 Responses 处理的 OpenAI 请求)。其他提供商只会收到工具结果的文本部分。document块(PDF、纯文本、URL 或 Files APIfile_id来源):转换为 OpenAI 风格的file内容部分(内联内容使用file_data,远程 URL 使用file_url,上传文件使用file_id)。Anthropic 会以原生方式收到带有title的文档;Gemini 只接收内联数据;兼容 OpenAI 的提供商按原样接收file部分。在 OpenAI 上,未命名的 PDF 会获得一个文件名(document.pdf),URL 文档会通过 Responses API 发送。对于仍走 Chat Completions 的请求,纯文本文档会以文本形式发送(以其title作为标题),因为该接口只接受 PDF 文件数据;对于通过 Responses API 处理的请求(例如tool_result中包含文本文档的请求),它仍保持为文件。引用设置和context会被丢弃。自定义内容变体(source.type: "content")会降级为文本。search_result块:降级为文本(标题、来源 URL 和内容);引用元数据会被丢弃。- 延迟工具加载:可以接受。标记为
defer_loading: true的工具是一个普通的自定义工具,其 schema 由 API 按需加载;该标记没有规范等价物,会被丢弃,因此该工具会像其他工具一样被发送。tool_reference(工具搜索的匹配结果)会降级为以文本表示的工具名称,因为转换流水线后面的提供商都不支持通过引用加载工具 schema。运行过 Anthropic 服务端工具搜索的对话可以在其他模型上继续:工具搜索工具会被丢弃(因为每个延迟加载的工具都已完整发送),其历史(server_tool_use和tool_search_tool_result)会降级为说明该搜索及其找到的工具的文本。这正是 Claude Code 能够通过网关、在启用ENABLE_TOOL_SEARCH的情况下使用非 Anthropic 模型运行的原因。 - 其他内容块(
container_upload等):会被拒绝并返回明确的400错误,而不是被静默丢弃。 stop_sequences:所有提供商都支持。原生报告所匹配序列的提供商(Anthropic)会返回完整约定:stop_reason: "stop_sequence"加上stop_sequence值。OpenAI 推理模型(GPT-5 及更高版本、o 系列)也是如此,因为 OpenAI 对这些模型拒绝stop参数,GoModel 会自行截断输出。其他 OpenAI 系列模型在finish_reason中不区分命中停止参数和自然停止,因此这些模型的补全会报告stop_reason: "end_turn"(输出仍会被正确截断)。output_config:effort用于设置推理强度(优先于根据thinking推导出的值),format(或较旧的顶层output_format)会转换为 JSON schema 结构化输出。当 schema 满足 OpenAI 严格模式规则(additionalProperties: false、所有属性都是必填项、不使用allOf、not或条件关键字)时为严格模式。其他 schema 以strict: false发送:它们会引导输出,但不保证输出符合 schema。json_schema以外的格式会被拒绝并返回400。thinking:在非 Anthropic 模型上会转换为推理强度(预算低于 10000 Token 为low,低于 20000 为medium,否则为high;adaptive 为medium),并以各提供商自己的字段发送:在 OpenAI、Groq、Fireworks 和 xAI 上为reasoning_effort。对于拒绝该字段的模型(OpenAIgpt-4*、除 gpt-oss 和 qwen3 以外的 Groq 模型、xAI 的-non-reasoning、grok-build、grok-2以及除grok-3-mini以外的grok-3),请求会去掉该字段后发送,而不是返回错误。无论提供商使用哪个成员(reasoning_content或reasoning)返回推理内容,都会以thinking块返回。count_tokens:当模型的提供商能自行计数时,结果是精确的。Anthropic 模型由 Anthropic 自己的count_tokens端点计数。转发的请求携带解析后的模型(别名会先被解析),且只包含该端点接受的成员:messages、system、tools、tool_choice、thinking、cache_control和output_config;max_tokens、stream、metadata和采样控制参数会被省略,因为 Anthropic 在该端点会拒绝它们。OpenAI 模型由 OpenAI 的/v1/responses/input_tokens端点按 GoModel 实际将发送的请求进行计数。在 GPT-5 及更高版本上,计数与计费输入一致(误差在一个 Token 以内):对于由 Chat Completions 处理且带有工具的请求,会加上其计费的固定工具前导内容。在较旧的模型系列上,这类请求的计数可能比计费输入少几个 Token(gpt-4o-mini上为 6 个)。计数时不会运行护栏,因此当请求的工作流配置了提示词护栏时,提示词绝不会被发送给提供商计数,而是由估算值作答(仅作用于响应和流的护栏仍保持精确计数)。对于其他所有提供商,以及上述调用失败时,网关会返回一个估算值:它根据文本的 Token 化密度对文本加权(普通文本、代码和 JSON、CJK、emoji),加上每条消息和每个工具的框架开销以及工具调用系统提示词,并按像素面积为图片计价。在普通的智能体流量上,估算值与分词器精确计数的偏差约在百分之十以内;文本中的原始 base64 仍会被低估,无法读取尺寸的图片会按提供商保留的最大尺寸计费。同一估算值会作为流式message_start事件中usage.input_tokens的初始值;权威计数在最终的message_delta事件中到达,SDK 累加器会优先采用它。
/p/anthropic/v1/messages 透传路由。
有关设计原理和取舍,请参阅 ADR-0007。