Ctrl+Shift+J(Windows)/
Cmd+Shift+J(macOS)打开 Cursor Settings。
ap-xxxxxxxxxxxx(你的 API Key)
https://api.apolloinn.site/v1
Kiro-Sonnet-4-6,点击 ADD 按钮确认。
| 情况 | 配置方式 |
|---|---|
| ✅ 自有 Cursor Pro 账户 | 按上方步骤填写 API Key、添加模型即可,无需额外操作 |
| ❌ 无 Cursor Pro 账户 | 下载 Apollo Agent,双击运行,按提示一键完成配置 |
https://api.apolloinn.site/v1
ap-xxxxxxxxxxxx(你的 API Key)
claude-sonnet-4.6
| 配置项 | 值 |
|---|---|
| API Provider | OpenAI Compatible |
| Base URL | https://api.apolloinn.site/v1 |
| API Key | ap-xxx(你的 Key) |
| 推荐模型 | claude-sonnet-4.6 |
~/.continue/config.yaml
name: Apollo Gateway
version: 1.0.0
schema: v1
models:
- name: Claude Sonnet 4.6
provider: openai
model: claude-sonnet-4.6
apiKey: ap-你的apikey
apiBase: https://api.apolloinn.site/standard/v1
- name: Claude Opus 4.6
provider: openai
model: claude-opus-4.6
apiKey: ap-你的apikey
apiBase: https://api.apolloinn.site/standard/v1
- name: Claude Haiku 4.5
provider: openai
model: claude-haiku-4.5
apiKey: ap-你的apikey
apiBase: https://api.apolloinn.site/standard/v1
/standard/v1 端点(标准 OpenAI
兼容),而非 Cursor 专用的 /v1 端点。
npm install -g @openai/codex
~/.codex/config.yaml 中写入以下配置:
model: claude-sonnet-4.6
provider: openai
apiKey: ap-你的apikey
apiBase: https://api.apolloinn.site/standard/v1
export OPENAI_API_KEY="ap-你的apikey"
export OPENAI_BASE_URL="https://api.apolloinn.site/standard/v1"
$env:OPENAI_API_KEY="ap-你的apikey"
$env:OPENAI_BASE_URL="https://api.apolloinn.site/standard/v1"
# 指定模型启动
codex --model claude-sonnet-4.6
# 或直接启动(使用配置文件中的默认模型)
codex
| 配置项 | 值 |
|---|---|
| apiBase / OPENAI_BASE_URL | https://api.apolloinn.site/standard/v1 |
| apiKey / OPENAI_API_KEY | ap-xxx(你的 Key) |
| 推荐模型 | claude-sonnet-4.6 |
npm install -g opencode-ai
~/.config/opencode/config.json 中写入:
{
"provider": {
"openai": {
"apiKey": "ap-你的apikey",
"baseURL": "https://api.apolloinn.site/standard/v1"
}
},
"model": "openai/claude-sonnet-4.6"
}
export OPENAI_API_KEY="ap-你的apikey"
export OPENAI_BASE_URL="https://api.apolloinn.site/standard/v1"
opencode
| 配置项 | 值 |
|---|---|
| baseURL / OPENAI_BASE_URL | https://api.apolloinn.site/standard/v1 |
| apiKey / OPENAI_API_KEY | ap-xxx(你的 Key) |
| 推荐模型 | openai/claude-sonnet-4.6 |
返回当前所有可用模型列表。
curl https://api.apolloinn.site/v1/models \
-H "Authorization: Bearer your-api-key"
from openai import OpenAI
client = OpenAI(api_key="your-api-key", base_url="https://api.apolloinn.site/v1")
for m in client.models.list().data:
print(m.id)
reasoning_content 转为
<think> 标签格式。
from openai import OpenAI
client = OpenAI(api_key="your-api-key", base_url="https://api.apolloinn.site/v1")
response = client.chat.completions.create(
model="claude-sonnet-4.6",
messages=[{"role": "user", "content": "你好!"}],
stream=True
)
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
from openai import OpenAI
client = OpenAI(api_key="your-api-key", base_url="https://api.apolloinn.site/v1")
tools = [{"type":"function","function":{"name":"get_weather",
"description":"获取城市天气",
"parameters":{"type":"object","properties":{"city":{"type":"string"}},"required":["city"]}}}]
resp = client.chat.completions.create(
model="claude-sonnet-4.6",
messages=[{"role":"user","content":"北京天气怎么样?"}],
tools=tools
)
if resp.choices[0].message.tool_calls:
tc = resp.choices[0].message.tool_calls[0]
print(tc.function.name, tc.function.arguments)
reasoning_mode 参数控制思考内容。
| reasoning_mode | 行为 |
|---|---|
"drop" |
默认,丢弃思考过程,只返回最终回答 |
"reasoning_content" |
思考内容放在 reasoning_content 字段,与 OpenAI
o1 格式一致
|
"content" |
思考内容用
<think>...</think> 包裹,拼接到
content
|
curl -X POST https://api.apolloinn.site/standard/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{"model":"claude-sonnet-4.6","messages":[{"role":"user","content":"你好!"}],"stream":false}'
from openai import OpenAI
client = OpenAI(api_key="your-api-key", base_url="https://api.apolloinn.site/standard/v1")
response = client.chat.completions.create(
model="claude-sonnet-4.6",
messages=[{"role":"user","content":"25 * 37 等于多少?"}],
stream=False,
extra_body={"reasoning_mode": "reasoning_content"}
)
msg = response.choices[0].message
print("思考过程:", getattr(msg, "reasoning_content", ""))
print("最终答案:", msg.content)
from openai import OpenAI
client = OpenAI(api_key="your-api-key", base_url="https://api.apolloinn.site/standard/v1")
response = client.chat.completions.create(
model="claude-sonnet-4.6",
messages=[{"role":"user","content":"解释量子纠缠"}],
stream=True,
extra_body={"reasoning_mode": "reasoning_content"}
)
for chunk in response:
delta = chunk.choices[0].delta
if hasattr(delta,"reasoning_content") and delta.reasoning_content:
print(delta.reasoning_content, end="", flush=True)
if delta.content:
print(delta.content, end="", flush=True)
import OpenAI from "openai";
const client = new OpenAI({ apiKey:"your-api-key", baseURL:"https://api.apolloinn.site/standard/v1" });
const response = await client.chat.completions.create({
model: "claude-sonnet-4.6",
messages: [{ role:"user", content:"Hello!" }],
stream: true,
});
for await (const chunk of response) {
const c = chunk.choices[0]?.delta?.content;
if (c) process.stdout.write(c);
}
from openai import OpenAI
client = OpenAI(api_key="your-api-key", base_url="https://api.apolloinn.site/standard/v1")
response = client.chat.completions.create(
model="claude-sonnet-4.6",
messages=[{"role":"user","content":"你好!"}]
)
print(response.choices[0].message.content)
from openai import OpenAI
client = OpenAI(api_key="your-api-key", base_url="https://api.apolloinn.site/standard/v1")
response = client.chat.completions.create(
model="claude-sonnet-4.6",
messages=[{"role":"user","content":"写一首关于春天的诗"}],
stream=True
)
for chunk in response:
c = chunk.choices[0].delta.content
if c: print(c, end="", flush=True)
import OpenAI from "openai";
const client = new OpenAI({ apiKey:"your-api-key", baseURL:"https://api.apolloinn.site/standard/v1" });
const response = await client.chat.completions.create({
model: "claude-sonnet-4.6",
messages: [{ role:"user", content:"Hello!" }]
});
console.log(response.choices[0].message.content);
curl -X POST https://api.apolloinn.site/v1/messages \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{"model":"claude-sonnet-4.6","max_tokens":1024,"messages":[{"role":"user","content":"你好!"}]}'
import anthropic
client = anthropic.Anthropic(api_key="your-api-key", base_url="https://api.apolloinn.site")
msg = client.messages.create(
model="claude-sonnet-4.6", max_tokens=1024,
system="你是一个有帮助的助手。",
messages=[{"role":"user","content":"你好!"}]
)
print(msg.content[0].text)
import anthropic
client = anthropic.Anthropic(api_key="your-api-key", base_url="https://api.apolloinn.site")
with client.messages.stream(
model="claude-sonnet-4.6", max_tokens=1024,
messages=[{"role":"user","content":"写一首关于春天的诗"}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({ apiKey:"your-api-key", baseURL:"https://api.apolloinn.site" });
const msg = await client.messages.create({
model:"claude-sonnet-4.6", max_tokens:1024,
messages:[{ role:"user", content:"Hello!" }]
});
console.log(msg.content[0].text);
| 标准名称(其他工具可选) | Kiro 别名(Cursor 必用) | 级别 |
|---|---|---|
Claude-Opus-4.6 |
Kiro-Opus-4-6 |
旗舰 |
Claude-Opus-4.5 |
Kiro-Opus-4-5 |
旗舰 |
Claude-Sonnet-4.6 |
Kiro-Sonnet-4-6 |
均衡 |
Claude-Sonnet-4.5 |
Kiro-Sonnet-4-5 |
均衡 |
Claude-Sonnet-4 |
Kiro-Sonnet-4 |
均衡 |
Claude-Haiku-4.5 |
Kiro-Haiku-4-5 |
快速 |
| — | Kiro-Haiku |
快速 |
| — | Kiro-Auto |
自动 |
| 使用场景 | 推荐接口 |
|---|---|
| Cursor IDE 接入 | POST /v1/chat/completions |
| 自建应用(OpenAI SDK) | POST /standard/v1/chat/completions |
| 需要获取思考过程 |
标准接口 + reasoning_mode: "reasoning_content"
|
| 已有 Anthropic SDK 项目 | POST /v1/messages |
| 查询可用模型 | GET /v1/models |
| 状态码 | 说明 | 处理建议 |
|---|---|---|
| 401 | API Key 无效或缺失 | 检查 Authorization Header 是否正确 |
| 403 | 账户已禁用或无权限 | 联系管理员 |
| 422 | 请求参数格式错误 | 检查请求体格式是否符合规范 |
| 429 | 请求频率超限 | 降低请求频率,加入重试逻辑 |
| 503 | 服务暂时不可用(无可用 token) | 稍后重试 |
import httpx, time
def chat_with_retry(messages, max_retries=3):
for attempt in range(max_retries):
try:
resp = httpx.post(
"https://api.apolloinn.site/standard/v1/chat/completions",
headers={"Authorization": "Bearer your-api-key"},
json={"model":"claude-sonnet-4.6","messages":messages,"stream":False},
timeout=60
)
if resp.status_code == 429:
wait = 2 ** attempt # 指数退避
print(f"频率限制,{wait}s 后重试...")
time.sleep(wait)
continue
if resp.status_code == 503:
print("服务暂时不可用,5s 后重试...")
time.sleep(5)
continue
resp.raise_for_status()
return resp.json()
except httpx.HTTPStatusError as e:
print(f"HTTP 错误: {e.response.status_code}")
raise
raise Exception("超过最大重试次数")