大模型 API 使用指南
概述
NextAI Code 提供与 OpenAI 和 Anthropic SDK 完全兼容的大模型 API,支持文本对话、多模态输入、工具调用、流式输出等功能。
使用场景
| 场景 | 说明 |
|---|---|
| 开发自己的应用 | 构建聊天机器人、AI 助手、智能客服等产品 |
| 集成到现有系统 | 将 AI 能力嵌入 ERP、CRM、内部工具等 |
| 批量自动化处理 | 脚本批量翻译、摘要生成、数据处理等 |
| 配置第三方工具 | 支持 OpenAI/Anthropic API 的其他工具 |
兼容格式
| 兼容格式 | 端点 | 适用场景 |
|---|---|---|
| OpenAI SDK | /v1/chat/completions |
GPT 系列、通用对话 |
| Anthropic SDK | /v1/messages |
Claude 系列、扩展思考 |
提示:两种格式可以混用,根据你的 SDK 偏好和模型需求选择。
认证
所有请求需携带 API Key。访问 令牌管理页面 创建新令牌(以 sk- 开头)。
OpenAI 格式
Authorization: Bearer sk-xxxxx
Anthropic 格式
x-api-key: sk-xxxxx
anthropic-version: 2023-06-01
注意:Anthropic 格式也支持
Authorization: Bearer方式。
支持的模型
获取模型列表
GET https://www.nextai-code.com/v1/models
响应示例:
{
"object": "list",
"data": [
{"id": "gpt-4o", "object": "model", "owned_by": "openai"},
{"id": "claude-sonnet-4-20250514", "object": "model", "owned_by": "anthropic"}
]
}
获取单个模型
GET https://www.nextai-code.com/v1/models/{model_id}
OpenAI 格式 API
端点信息
| 属性 | 值 |
|---|---|
| URL | POST https://www.nextai-code.com/v1/chat/completions |
| 认证 | Bearer Token |
| Content-Type | application/json |
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model |
string | ✅ | 模型名称 |
messages |
array | ✅ | 消息列表 |
stream |
boolean | 流式输出 | |
max_tokens |
integer | 最大输出 token | |
max_completion_tokens |
integer | 最大输出 token(优先级高于 max_tokens) | |
temperature |
float | 温度 (0-2) | |
top_p |
float | 核采样 (0-1) | |
top_k |
integer | Top-K 采样 | |
n |
integer | 生成数量 | |
stop |
string/array | 停止序列(最多 4 个) | |
frequency_penalty |
float | 频率惩罚 (-2 到 2) | |
presence_penalty |
float | 存在惩罚 (-2 到 2) | |
seed |
integer | 随机种子 | |
logprobs |
boolean | 返回对数概率 | |
top_logprobs |
integer | 返回 top N 对数概率 (0-20) | |
tools |
array | 工具定义 | |
tool_choice |
string/object | 工具选择策略 | |
parallel_tool_calls |
boolean | 允许并行工具调用 | |
response_format |
object | 响应格式 | |
stream_options |
object | 流式选项 | |
reasoning_effort |
string | 推理强度(推理模型专用) |
消息格式
文本消息
{"role": "system", "content": "You are a helpful assistant."}
{"role": "user", "content": "Hello!"}
{"role": "assistant", "content": "Hi there!"}
多模态消息
{
"role": "user",
"content": [
{"type": "text", "text": "描述这张图片"},
{"type": "image_url", "image_url": {"url": "https://...", "detail": "high"}}
]
}
支持的内容类型:
| type | 说明 |
|---|---|
text |
文本 |
image_url |
图片 URL 或 Base64 |
input_audio |
音频 Base64 |
video_url |
视频 URL |
file |
文件 |
工具调用
定义工具
{
"model": "gpt-4o",
"messages": [{"role": "user", "content": "北京天气如何?"}],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取天气信息",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "城市名"}
},
"required": ["location"]
}
}
}]
}
模型返回工具调用
{
"choices": [{
"message": {
"role": "assistant",
"tool_calls": [{
"id": "call_xxx",
"type": "function",
"function": {"name": "get_weather", "arguments": "{\"location\":\"北京\"}"}
}]
},
"finish_reason": "tool_calls"
}]
}
传回工具结果
收到 finish_reason: "tool_calls" 后,调用工具并传回结果:
{
"model": "gpt-4o",
"messages": [
{"role": "user", "content": "北京天气如何?"},
{"role": "assistant", "content": null, "tool_calls": [
{"id": "call_xxx", "type": "function", "function": {"name": "get_weather", "arguments": "{\"location\":\"北京\"}"}}
]},
{"role": "tool", "tool_call_id": "call_xxx", "content": "北京今天晴,25°C"}
]
}
响应格式
非流式响应
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1734567890,
"model": "gpt-4o",
"choices": [{
"index": 0,
"message": {"role": "assistant", "content": "你好!"},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 5,
"total_tokens": 15
}
}
流式响应
设置 stream: true:
data: {"id":"chatcmpl-xxx","choices":[{"index":0,"delta":{"role":"assistant"}}]}
data: {"id":"chatcmpl-xxx","choices":[{"index":0,"delta":{"content":"你"}}]}
data: {"id":"chatcmpl-xxx","choices":[{"index":0,"delta":{"content":"好"}}]}
data: {"id":"chatcmpl-xxx","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]
提示:设置
stream_options: {"include_usage": true}可在流式响应最后获取 usage 信息。
推理模型
以下模型支持深度推理功能:
| 模型系列 | 模型示例 |
|---|---|
| o 系列 | o1, o1-mini, o3, o3-mini, o4-mini |
| GPT-5 系列 | gpt-5, gpt-5.1, gpt-5.2 |
reasoning_effort 参数
| 值 | 说明 | 适用场景 |
|---|---|---|
none |
不使用推理 | 简单问答 |
minimal |
极少推理 | 延迟敏感场景 |
low |
轻度推理 | 简单问题 |
medium |
中度推理 | 一般问题 |
high |
深度推理 | 复杂推理、数学证明 |
xhigh |
最深度推理 | 极复杂问题(GPT-5.2+) |
请求示例:
{
"model": "gpt-5.2",
"messages": [{"role": "user", "content": "证明根号2是无理数"}],
"reasoning_effort": "high"
}
响应示例:
{
"choices": [{
"message": {
"role": "assistant",
"content": "我来证明根号2是无理数...(最终答案)",
"reasoning_content": "让我思考这个问题...(推理过程)"
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 500,
"completion_tokens_details": {"reasoning_tokens": 400}
}
}
推理模型限制
推理模型不支持以下参数:
| 不支持的参数 | 替代方案 |
|---|---|
temperature |
使用 reasoning_effort |
top_p |
不适用 |
presence_penalty |
不适用 |
frequency_penalty |
不适用 |
logprobs / top_logprobs |
不适用 |
max_tokens |
使用 max_completion_tokens |
注意:传入不支持的参数会返回错误。
Anthropic 格式 API
端点信息
| 属性 | 值 |
|---|---|
| URL | POST https://www.nextai-code.com/v1/messages |
| 认证 | x-api-key 或 Bearer Token |
| Content-Type | application/json |
与 OpenAI 格式的差异
| 特性 | OpenAI 格式 | Anthropic 格式 |
|---|---|---|
| 系统提示词 | messages 中 role: "system" |
独立的 system 参数 |
| max_tokens | 可选参数 | 必填参数 |
| 温度范围 | 0-2 | 0-1 |
| 图片格式 | image_url.url |
source.data 或 source.url |
| 工具定义 | parameters |
input_schema |
| 停止原因 | finish_reason: "stop" |
stop_reason: "end_turn" |
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model |
string | ✅ | 模型名称 |
max_tokens |
integer | ✅ | 最大输出 token |
messages |
array | ✅ | 消息列表 |
system |
string/array | 系统提示词 | |
temperature |
float | 温度 (0-1) | |
top_p |
float | 核采样 | |
top_k |
integer | Top-K 采样 | |
stream |
boolean | 流式输出 | |
stop_sequences |
array | 停止序列 | |
tools |
array | 工具定义 | |
tool_choice |
object | 工具选择策略 | |
thinking |
object | 扩展思考配置 | |
metadata |
object | 元数据 |
消息格式
文本消息
{"role": "user", "content": "Hello!"}
{"role": "assistant", "content": "Hi!"}
多模态消息
Base64 格式:
{
"role": "user",
"content": [
{"type": "text", "text": "描述这张图片"},
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "/9j/4AAQ..."
}
}
]
}
URL 格式:
{
"type": "image",
"source": {
"type": "url",
"url": "https://example.com/image.jpg"
}
}
提示缓存 (Prompt Caching)
提示缓存允许缓存大量上下文,在后续请求中复用,节省约 90% 的输入成本。
缓存配置
| TTL | 说明 | 写入成本 | 读取成本 |
|---|---|---|---|
5m |
5 分钟(默认) | 125% | 10% |
1h |
1 小时 | 200% | 10% |
提示:每次缓存命中会重置计时器。请求频率高于 5 分钟一次推荐使用默认 5 分钟缓存。
最小缓存长度
| 模型 | 最小 token 数 |
|---|---|
| Claude Opus 4/4.1, Sonnet 4/4.5 | 1024 tokens |
| Claude Haiku 4.5 | 4096 tokens |
| Claude Haiku 3/3.5 | 2048 tokens |
使用示例
{
"role": "user",
"content": [
{
"type": "text",
"text": "这是一段很长的参考文档...",
"cache_control": {"type": "ephemeral", "ttl": "1h"}
},
{
"type": "text",
"text": "请根据上述文档回答:xxx"
}
]
}
响应中的缓存统计
{
"usage": {
"input_tokens": 100,
"output_tokens": 50,
"cache_creation_input_tokens": 2048,
"cache_read_input_tokens": 0
}
}
扩展思考 (Extended Thinking)
扩展思考让模型在回答前进行深度推理,适合复杂数学、代码分析、策略规划等任务。
请求示例
{
"model": "claude-sonnet-4-20250514",
"max_tokens": 16000,
"thinking": {
"type": "enabled",
"budget_tokens": 10000
},
"messages": [{"role": "user", "content": "分析这段代码的时间复杂度并优化"}]
}
提示:
budget_tokens最小 1024,最大 128000。从 1024 开始测试,根据任务复杂度逐步增加。
响应示例
{
"content": [
{
"type": "thinking",
"thinking": "让我分析这段代码...时间复杂度是O(n²)..."
},
{
"type": "text",
"text": "这段代码的时间复杂度是 O(n²),建议使用哈希表优化..."
}
],
"stop_reason": "end_turn"
}
扩展思考限制
| 限制 | 说明 |
|---|---|
不兼容 temperature |
扩展思考时不能设置 |
不兼容 top_k |
扩展思考时不能使用 |
top_p 受限 |
只能设置为 0.95-1.0 |
| 工具调用限制 | 仅支持 auto 或 none |
工具调用
定义工具
{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"tools": [{
"name": "get_weather",
"description": "获取天气信息",
"input_schema": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "城市名称"}
},
"required": ["location"]
}
}],
"messages": [{"role": "user", "content": "北京天气如何?"}]
}
模型返回工具调用
{
"content": [{
"type": "tool_use",
"id": "toolu_xxx",
"name": "get_weather",
"input": {"location": "北京"}
}],
"stop_reason": "tool_use"
}
传回工具结果
{
"messages": [
{"role": "user", "content": "北京天气如何?"},
{"role": "assistant", "content": [
{"type": "tool_use", "id": "toolu_xxx", "name": "get_weather", "input": {"location": "北京"}}
]},
{"role": "user", "content": [
{"type": "tool_result", "tool_use_id": "toolu_xxx", "content": "北京今天晴,25°C"}
]}
]
}
工具选择策略
| tool_choice | 说明 |
|---|---|
{"type": "auto"} |
模型自动决定(默认) |
{"type": "any"} |
强制调用任意工具 |
{"type": "tool", "name": "xxx"} |
强制调用指定工具 |
{"type": "none"} |
禁止调用工具 |
响应格式
非流式响应
{
"id": "msg_xxx",
"type": "message",
"role": "assistant",
"content": [{"type": "text", "text": "你好!"}],
"model": "claude-sonnet-4-20250514",
"stop_reason": "end_turn",
"usage": {
"input_tokens": 10,
"output_tokens": 5
}
}
流式响应
event: message_start
data: {"type":"message_start","message":{"id":"msg_xxx","role":"assistant"}}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"你好"}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":5}}
event: message_stop
data: {"type":"message_stop"}
示例代码
Python - OpenAI SDK
from openai import OpenAI
client = OpenAI(
api_key="sk-xxxxx",
base_url="https://www.nextai-code.com/v1"
)
# 基础对话
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "你好"}]
)
print(response.choices[0].message.content)
# 流式输出
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "讲个故事"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
Python - Anthropic SDK
import anthropic
client = anthropic.Anthropic(
api_key="sk-xxxxx",
base_url="https://www.nextai-code.com"
)
# 基础对话
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": "你好"}]
)
print(message.content[0].text)
# 带缓存的对话
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system=[{
"type": "text",
"text": "你是专业助手...",
"cache_control": {"type": "ephemeral"}
}],
messages=[{"role": "user", "content": "问题"}]
)
print(f"缓存创建: {message.usage.cache_creation_input_tokens}")
print(f"缓存命中: {message.usage.cache_read_input_tokens}")
cURL
OpenAI 格式:
curl https://www.nextai-code.com/v1/chat/completions \
-H "Authorization: Bearer sk-xxxxx" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4o","messages":[{"role":"user","content":"你好"}]}'
Anthropic 格式:
curl https://www.nextai-code.com/v1/messages \
-H "x-api-key: sk-xxxxx" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{"model":"claude-sonnet-4-20250514","max_tokens":1024,"messages":[{"role":"user","content":"你好"}]}'
JavaScript
const response = await fetch('https://www.nextai-code.com/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk-xxxxx',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'gpt-4o',
messages: [{role: 'user', content: '你好'}]
})
});
const data = await response.json();
console.log(data.choices[0].message.content);
错误处理
HTTP 状态码
| 状态码 | 说明 | 处理建议 |
|---|---|---|
| 400 | 请求参数错误 | 检查请求体格式 |
| 401 | 认证失败 | 检查 API Key |
| 403 | 权限不足 | 确认账户权限 |
| 429 | 请求频率超限 | 降低请求频率 |
| 500 | 服务器错误 | 稍后重试 |
OpenAI 格式错误响应
{
"error": {
"message": "错误描述",
"type": "invalid_request_error",
"param": "model",
"code": "model_not_found"
}
}
Anthropic 格式错误响应
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "错误描述"
}
}