> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ruapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenAI 格式还是 Anthropic 格式：Claude 该用哪个

> Claude 的 OpenAI 兼容格式和 Anthropic 原生格式有什么区别，编程工具和自己写的程序该选哪个，以及 RuAPI 比 Anthropic 官方的兼容接口多支持了什么：缓存、思考和 PDF。

调 Claude 有两种格式：Anthropic 原生格式（Messages API，地址是 `/v1/messages`）和 OpenAI 兼容格式（Chat Completions，地址是 `/v1/chat/completions`）。在 RuAPI，同一把密钥两种格式都能用，价格也一样；两者的区别在请求的写法和能用的功能上。这一页讲清楚有哪些区别、该选哪个。RuAPI 在俄罗斯不用 VPN 就能直接访问，余额用 USDT 充值。

## 一句话结论

* **工具里能选 Anthropic 提供商，或者程序只用 Claude：选 Anthropic 原生格式。** 请求的写法和 Anthropic 官方文档一样，缓存也和直连 Anthropic 一样，Claude Code 等工具会自己打缓存标记。Claude Code 只能用这种格式。
* **工具只支持 OpenAI 格式，或者同一段代码要换着用 Claude、GPT、DeepSeek、Gemini：选 OpenAI 兼容格式。** 在 RuAPI，这种格式下缓存、思考和 PDF 也都能用；缓存需要请求里带 `cache_control` 标记。

## 两种格式有什么区别

| | OpenAI 兼容格式 | Anthropic 原生格式 |
| - | - | - |
| 请求地址 | `https://www.ruapi.ai/v1/chat/completions` | `https://www.ruapi.ai/v1/messages` |
| SDK 里的 `base_url` | `https://www.ruapi.ai/v1` | `https://www.ruapi.ai`（不带 `/v1`） |
| 密钥放在哪 | `Authorization: Bearer sk-...` | `x-api-key: sk-...`，也可以用 `Authorization: Bearer sk-...` |
| 能调哪些模型 | Claude、GPT、DeepSeek、Gemini 等所有对话模型 | Claude；DeepSeek 也能用，见[在 Claude Code 里跑 DeepSeek](/zh/integrations/claude-code-deepseek) |
| 系统提示 | `messages` 里 `role: "system"` 的消息 | 请求最外层的 `system` 字段 |
| `max_tokens` | 可以不写 | 按 Anthropic 的规范要写 |
| 回复正文 | `choices[0].message.content` | `content` 列表里 `type: "text"` 的块 |
| 思考 | `reasoning_effort`：`low`、`medium`、`high`；思考内容在 `reasoning_content` 里 | `thinking` 参数；思考内容是 `type: "thinking"` 的块 |
| 工具调用 | `tools` 里写 `function`，结果用 `role: "tool"` 的消息发回 | `tools` 里写 `input_schema`，结果用 `tool_result` 块发回 |
| 图片和 PDF | `image_url` 块、`file` 块 | `image` 块、`document` 块 |
| 缓存 | 请求里带 `cache_control` 标记才缓存 | 和直连 Anthropic 一样；Claude Code 会自己打标记 |
| 用量 | `prompt_tokens` 已包含缓存部分；从缓存读取的在 `prompt_tokens_details.cached_tokens` | `input_tokens` 不含缓存部分；缓存单独记在 `cache_read_input_tokens`、`cache_creation_input_tokens` |
| 流式输出 | 每行 `data:` 里是 `choices[0].delta`，最后一行是 `data: [DONE]` | 带事件名：`message_start`、`content_block_delta`、`message_stop` 等 |
| 价格 | 一样，按模型计费 | 一样，按模型计费 |

## RuAPI 的 OpenAI 兼容格式比 Anthropic 官方的多了什么

Anthropic 自己也提供一个 OpenAI 兼容接口。官方文档写明，它主要用来测试和对比模型，对大多数用途来说不适合长期用在正式产品里，而且很多功能用不了。RuAPI 的 OpenAI 兼容格式由我们自己转换成 Claude 的原生请求，下面这些都能用：

| 功能 | Anthropic 官方的 OpenAI 兼容接口 | RuAPI 的 OpenAI 兼容格式 |
| - | - | - |
| 提示缓存 | 不支持 | 支持：内容块上和请求最外层的 `cache_control` 标记，见[提示缓存](/zh/prompt-caching) |
| 思考强度 `reasoning_effort` | 忽略 | 转成 Claude 的思考强度 |
| 返回思考内容 | 不返回 | 带了 `reasoning_effort` 时，在 `reasoning_content` 里返回 |
| PDF 文件（`file` 块） | 忽略 | 转成 Claude 的文档块 |
| 缓存用量 `prompt_tokens_details` | 一直是空的 | 写明多少 token 从缓存读取、多少写入缓存 |
| 新模型上的 `temperature`、`top_p` | Claude 4.7 及更新的模型上，写了非默认值就报 400 | 自动去掉，不报错 |

Anthropic 一栏来自 Anthropic 官方文档 [OpenAI SDK compatibility](https://platform.claude.com/docs/en/cli-sdks-libraries/libraries/openai-sdk)（2026 年 10 月 19 日核对）。

## 怎么选

### 编程工具

| 工具 | Claude 用哪种格式 | 地址 |
| - | - | - |
| [Claude Code](/zh/integrations/claude-code) | 只能用 Anthropic 原生格式 | `ANTHROPIC_BASE_URL` 填 `https://www.ruapi.ai` |
| [Cline](/zh/integrations/cline)、[Roo Code](/zh/integrations/roo-code) | 选 **Anthropic** 提供商，勾选 **Use custom base URL** | `https://www.ruapi.ai` |
| [Kilo Code](/zh/integrations/kilo-code) | 自定义提供商，**Provider API** 选 **Anthropic Messages** | `https://www.ruapi.ai/v1` |
| [Continue](/zh/integrations/continue) | `provider: anthropic` | `https://www.ruapi.ai/v1` |
| [OpenCode](/zh/integrations/opencode) | 内置的 `anthropic` 提供商 | `https://www.ruapi.ai/v1` |
| [OpenClaw](/zh/integrations/openclaw) | 环境变量 `ANTHROPIC_BASE_URL` | `https://www.ruapi.ai` |

<Warning>
  Anthropic 原生格式的地址带不带 `/v1`，要看工具：Claude Code、Cline、Roo Code、OpenClaw 和 Anthropic SDK 不带，Kilo Code、Continue、OpenCode 带。照上表填，填错就连不上。OpenAI 兼容格式的地址一律带 `/v1`。
</Warning>

其他工具（[JetBrains AI Assistant](/zh/integrations/jetbrains-ai-assistant)、[n8n](/zh/integrations/n8n)、[Cherry Studio](/zh/integrations/cherry-studio) 等）按各自的教程用 OpenAI 兼容格式接，地址是 `https://www.ruapi.ai/v1`。这样接 Claude 照样能用，只是工具没打缓存标记时不会缓存，长对话会贵一些。

### 自己写的程序

* **只用 Claude**：用 Anthropic SDK（`pip install anthropic`），`base_url="https://www.ruapi.ai"`。功能最全，缓存、思考、PDF 的写法和 Anthropic 官方文档一样。
* **要换着用不同厂商的模型**：用 OpenAI SDK，`base_url="https://www.ruapi.ai/v1"`，换模型只改 `model`。Claude 要缓存，就在请求里带 `cache_control` 标记，写法见[提示缓存](/zh/prompt-caching)。

## 同一个请求的两种写法

下面两段代码做的是同一件事：带系统提示问 Claude 一个问题，并让它返回思考内容。

<CodeGroup>
  ```python OpenAI SDK theme={null}
  from openai import OpenAI

  client = OpenAI(base_url="https://www.ruapi.ai/v1", api_key="sk-...")

  response = client.chat.completions.create(
      model="claude-sonnet-5-5",
      reasoning_effort="low",
      messages=[
          {"role": "system", "content": "你是一位资深 Python 开发者，回答要简短。"},
          {"role": "user", "content": "怎么把列表倒过来？"},
      ],
  )
  message = response.choices[0].message
  print(getattr(message, "reasoning_content", None))  # 思考内容
  print(message.content)  # 回答
  ```

  ```python Anthropic SDK theme={null}
  import anthropic

  client = anthropic.Anthropic(base_url="https://www.ruapi.ai", api_key="sk-...")

  response = client.messages.create(
      model="claude-sonnet-5-5",
      max_tokens=2048,
      thinking={"type": "adaptive", "display": "summarized"},
      system="你是一位资深 Python 开发者，回答要简短。",
      messages=[{"role": "user", "content": "怎么把列表倒过来？"}],
  )
  for block in response.content:
      if block.type == "thinking":
          print(block.thinking)  # 思考内容
      elif block.type == "text":
          print(block.text)  # 回答
  ```
</CodeGroup>

用 curl 发最简单的请求：

<CodeGroup>
  ```bash OpenAI 兼容格式 theme={null}
  curl https://www.ruapi.ai/v1/chat/completions \
    -H "Authorization: Bearer sk-..." \
    -H "Content-Type: application/json" \
    -d '{"model": "claude-sonnet-5-5", "messages": [{"role": "user", "content": "你好"}]}'
  ```

  ```bash Anthropic 原生格式 theme={null}
  curl https://www.ruapi.ai/v1/messages \
    -H "x-api-key: sk-..." \
    -H "anthropic-version: 2023-06-01" \
    -H "Content-Type: application/json" \
    -d '{"model": "claude-sonnet-5-5", "max_tokens": 1024, "messages": [{"role": "user", "content": "你好"}]}'
  ```
</CodeGroup>

## 怎么知道自己用的是哪种格式

在控制台 **使用日志** 里打开一条 Claude 的记录，看「请求路径」：`/v1/chat/completions` 是 OpenAI 兼容格式，`/v1/messages` 是 Anthropic 原生格式。其他判断办法见[提示缓存](/zh/prompt-caching)页的「先看用的是哪种格式」。

## 常见问题

<AccordionGroup>
  <Accordion title="两种格式价格一样吗？">
    一样。RuAPI 按模型计费，和用哪种格式无关。同一把密钥两种格式都能用，不用另建密钥。
  </Accordion>

  <Accordion title="用 OpenAI 兼容格式调 Claude，余额为什么掉得快？">
    多半是缓存没有生效，重复的上下文每次都按全价计费。在工具里改选 Anthropic 提供商，或者在请求里带上 `cache_control` 标记。怎么一步步排查，见[提示缓存](/zh/prompt-caching)页的常见问题。
  </Accordion>

  <Accordion title="回复为什么写到一半就停了？">
    看 `finish_reason`（OpenAI 兼容格式）或 `stop_reason`（Anthropic 原生格式）：是 `length` 或 `max_tokens`，就是到了长度上限。请求里没写 `max_tokens` 时，RuAPI 按 8192 个 token 补上；要更长的回复，就在请求里写一个更大的 `max_tokens`。思考用掉的 token 也算在 `max_tokens` 里。
  </Accordion>

  <Accordion title="思考内容为什么是空的？">
    Claude 5 系列模型（例如 Sonnet 5.5、Opus 5.5、Haiku 5.5）默认会思考，但不返回思考的文字。Anthropic 原生格式里要写 `thinking: {"type": "adaptive", "display": "summarized"}` 才会返回；OpenAI 兼容格式里带上 `reasoning_effort`，RuAPI 会替你打开。问题很简单时，Claude 可能直接回答，这时没有思考内容是正常的。
  </Accordion>

  <Accordion title="指定调用某个工具，为什么报 400？">
    Claude Opus 5.5、Claude Sonnet 5.5、Claude Fable 5.1 不支持强制调用工具：OpenAI 兼容格式里的 `tool_choice: "required"` 或指定函数名，Anthropic 原生格式里的 `{"type": "any"}` 或 `{"type": "tool"}`，都会报 400，两种格式一样。改成 `auto`，并在提示里说清楚什么时候该用这个工具。依据是 Anthropic 官方文档 [Thinking](https://platform.claude.com/docs/en/build-with-claude/thinking)（2026 年 10 月 19 日核对）。
  </Accordion>

  <Accordion title="在别家网关用 OpenAI 格式，Claude 为什么没有缓存？">
    不是每家都支持：Anthropic 官方自己的 OpenAI 兼容接口就不支持缓存，也有网关在文档里写明，只有原生 Anthropic 格式才有缓存折扣。在 RuAPI，两种格式下 Claude 都能缓存。
  </Accordion>
</AccordionGroup>

## 接下来

* [提示缓存](/zh/prompt-caching)：两种格式下 Claude 的缓存怎么开，怎么确认命中了缓存。
* [Claude API](/zh/claude-api)：各档模型有什么区别，该选哪个。
* [Claude Code](/zh/integrations/claude-code)：把 Claude Code 接到 RuAPI。
* [函数调用](/zh/function-calling)：工具调用的完整示例。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.