# 快速开始

XRToken 兼容 OpenAI 和 Anthropic 两种 API 格式，只需修改 `base_url` 和 `api_key` 即可接入。

## 接入地址

| 用途 | 完整请求地址 | 认证方式 |
| --- | --- | --- |
| 对话 (OpenAI) | `https://YOUR_API_BASE/v1/chat/completions` | `Authorization: Bearer YOUR_API_KEY` |
| 对话 (Anthropic) | `https://YOUR_API_BASE/v1/messages` | `x-api-key: YOUR_API_KEY` |
| 联网搜索 | `https://YOUR_API_BASE/v1/search` | `Authorization: Bearer YOUR_API_KEY` |
| 豆包智能体 | `https://YOUR_API_BASE/v1/agent/chat/completions` | `Authorization: Bearer YOUR_API_KEY` |
| 智能体开场/配置/埋点 | `https://YOUR_API_BASE/v1/agent/opening-questions` 等 | `Authorization: Bearer YOUR_API_KEY` |
| 模型列表 | `https://YOUR_API_BASE/v1/models` | 无需认证 |

风控智能体走 `POST /v1/agent/risk/chat/completions`，覆盖类型、卡片与错误码见 [风控智能体](/docs/agent-risk)。

SDK 配置时 `base_url` 的写法因 SDK 而异：

- **OpenAI SDK:** `base_url="https://YOUR_API_BASE/v1"` (SDK 自动拼接 `/chat/completions`)
- **Anthropic SDK:** `base_url="https://YOUR_API_BASE"` (SDK 自动拼接 `/v1/messages`)

## Python (OpenAI SDK)

```python
from openai import OpenAI

client = OpenAI(
    base_url="https://YOUR_API_BASE/v1",
    api_key="YOUR_API_KEY"
)

response = client.chat.completions.create(
    model="doubao-seed-2.0-pro",
    messages=[{"role": "user", "content": "你好"}]
)
print(response.choices[0].message.content)

# 流式
stream = client.chat.completions.create(
    model="doubao-seed-2.0-pro",
    messages=[{"role": "user", "content": "写一首诗"}],
    stream=True
)
for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
```

## Node.js (OpenAI SDK)

```javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://YOUR_API_BASE/v1',
  apiKey: 'YOUR_API_KEY',
});

const response = await client.chat.completions.create({
  model: 'doubao-seed-2.0-pro',
  messages: [{ role: 'user', content: '你好' }],
});
console.log(response.choices[0].message.content);

// 流式
const stream = await client.chat.completions.create({
  model: 'doubao-seed-2.0-pro',
  messages: [{ role: 'user', content: '写一首诗' }],
  stream: true,
});
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content || '');
}
```

## Python (Anthropic SDK)

```python
import anthropic

client = anthropic.Anthropic(
    base_url="https://YOUR_API_BASE",
    api_key="YOUR_API_KEY"
)

message = client.messages.create(
    model="MiniMax-M2.7",
    max_tokens=1024,
    messages=[{"role": "user", "content": "你好"}]
)
print(message.content[0].text)

# 流式
with client.messages.stream(
    model="MiniMax-M2.7",
    max_tokens=1024,
    messages=[{"role": "user", "content": "写一首诗"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="")
```

## cURL

**OpenAI 格式：**

```bash
curl -X POST https://YOUR_API_BASE/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seed-2.0-pro",
    "messages": [{"role": "user", "content": "你好"}],
    "stream": false
  }'
```

**Anthropic 格式：**

```bash
curl -X POST https://YOUR_API_BASE/v1/messages \
  -H "x-api-key: YOUR_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MiniMax-M2.7",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "你好"}]
  }'
```

## 给 Agent 用

不要把网页贴进对话。把下面这段发给 Agent，它会先读文档目录，再按需打开对应的 `.md`。任意文档页地址末尾加 `.md` 就是该页正文。

```
请先阅读 https://xrtoken.net/llms.txt，这是 XRToken 对外 API 文档目录。按需打开里面的 .md 链接来接入；不要假设未列出的接口存在。
```
