# SDK 与框架

NezhaGate 同时提供 OpenAI 兼容接口和 Anthropic 接口，官方 SDK 只需要改 Base URL 和 Key。

> https://nezhagate.com/docs/integrations/sdks

## 两个地址

| 协议 | Base URL | 用于 |
| --- | --- | --- |
| OpenAI | `https://nezhagate.com/v1` | 全部对话模型，以及图片、视频接口 |
| Anthropic | `https://nezhagate.com/anthropic` | Claude 模型（Anthropic SDK 会自己加上 `/v1/messages`） |

示例从环境变量 `NEZHAGATE_API_KEY` 读取 Key，不要把 Key 写进代码。

## OpenAI SDK

```
import os
from openai import OpenAI

client = OpenAI(base_url="https://nezhagate.com/v1", api_key=os.environ["NEZHAGATE_API_KEY"])
r = client.chat.completions.create(
    model="gpt-5.5",
    messages=[{"role": "user", "content": "Hello"}],
)
print(r.choices[0].message.content)
```

```
import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://nezhagate.com/v1", apiKey: process.env.NEZHAGATE_API_KEY });
const r = await client.chat.completions.create({
  model: "gpt-5.5",
  messages: [{ role: "user", content: "Hello" }],
});
console.log(r.choices[0].message.content);
```

OpenAI SDK 也会读取环境变量 `OPENAI_BASE_URL` 和 `OPENAI_API_KEY`。`client.responses.create(...)` 调用的是 Responses 接口，只适用于 GPT 模型。

## Anthropic SDK

```
import os
from anthropic import Anthropic

client = Anthropic(base_url="https://nezhagate.com/anthropic", api_key=os.environ["NEZHAGATE_API_KEY"])
m = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)
print(next(b.text for b in m.content if b.type == "text"))
```

```
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({ baseURL: "https://nezhagate.com/anthropic", apiKey: process.env.NEZHAGATE_API_KEY });
const msg = await client.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }],
});
const first = msg.content[0];
if (first.type === "text") console.log(first.text);
```

`base_url` 写到 `/anthropic` 为止，不要带 `/v1`。也可以用环境变量 `ANTHROPIC_BASE_URL` 和 `ANTHROPIC_API_KEY`。

## LangChain

```
import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="gpt-5.5",
    base_url="https://nezhagate.com/v1",
    api_key=os.environ["NEZHAGATE_API_KEY"],
    use_responses_api=False,
    stream_usage=True,
)
print(llm.invoke("Hello").content)
```

```
import { ChatOpenAI } from "@langchain/openai";

const llm = new ChatOpenAI({
  model: "gpt-5.5",
  apiKey: process.env.NEZHAGATE_API_KEY,
  configuration: { baseURL: "https://nezhagate.com/v1" },
  useResponsesApi: false,
});
console.log((await llm.invoke("Hello")).content);
```

LangChain 遇到部分 GPT 模型或某些参数时，会自动改走 Responses 接口；`use_responses_api=False`（JavaScript 是 `useResponsesApi: false`）固定走对话接口。设置了自定义 `base_url` 时，流式默认不返回用量，用 `stream_usage=True` 打开。

## Vercel AI SDK

```
import { createOpenAI } from "@ai-sdk/openai";
import { generateText } from "ai";

const gw = createOpenAI({ baseURL: "https://nezhagate.com/v1", apiKey: process.env.NEZHAGATE_API_KEY });
const { text } = await generateText({ model: gw.chat("gpt-5.5"), prompt: "Hello" });
console.log(text);
```

AI SDK 5 起，`gw("model-id")` 默认走 Responses 接口；用 `gw.chat("model-id")` 走对话接口，所有模型都能用。使用 `@ai-sdk/anthropic` 时，baseURL 要写成 `https://nezhagate.com/anthropic/v1`（带 `/v1`）。

## 常见问题

**OpenAI SDK 返回 404**

`base_url` 少了 `/v1`，应为 `https://nezhagate.com/v1`。

**Anthropic SDK 返回 404**

`base_url` 多写了 `/v1`，请求变成了 `/anthropic/v1/v1/messages`。写到 `/anthropic` 为止。

**非 GPT 模型通过框架调用失败**

框架可能改走了 Responses 接口（只提供 GPT 模型）：LangChain 设 `use_responses_api=False`，Vercel AI SDK 用 `gw.chat(...)`。
