接入文档

一份文档,
三套协议。

LemonGir AI 同时兼容 OpenAI 与 Anthropic 两家的接口格式。已有代码无论用哪家 SDK,替换 base_url 和 api_key 即可直连全部模型。

概览

网关只做一件事:把多家上游模型收敛到一个入口、一套鉴权、一份账单。

Base URL

所有协议共用同一个根地址

https://ai.lemongir.shop

鉴权头

OpenAI 风格 Bearer,Anthropic 风格 x-api-key 均可

Authorization: Bearer sk-…

计费

按量计费,人民币结算,分组折扣低至官方价 1.8 折

¥0.001 / 次 · 逐条可查

限流

单用户每分钟成功请求上限,超出返回 429

200 req / min

模型名与实时价格请以 模型广场 为准,本页示例中的模型名(如 glm-5.3、claude-sonnet-5)均为当前已上线型号。

鉴权与端点

在 控制台 → 令牌 创建 API Key(以 sk- 开头)。Key 绑定分组与额度上限,建议每个应用单独一把。

端点一览

POST/v1/chat/completionsOpenAI Chat Completions · 文本对话主入口
POST/v1/responsesOpenAI Responses · 新一代有状态接口
POST/v1/messagesAnthropic Messages · Claude 原生格式
POST/v1/images/generations图像生成 · gpt-image-2
POST/v1/embeddings文本向量嵌入
GET/v1/models当前 Key 可用的模型列表

鉴权方式

两种写法等价,网关会自动识别。OpenAI 路径与 Anthropic 路径都接受任一种:

HTTP Headers
# 方式一 · OpenAI 风格(推荐)
Authorization: Bearer sk-你的令牌

# 方式二 · Anthropic 风格(/v1/messages 也接受方式一)
x-api-key: sk-你的令牌
anthropic-version: 2023-06-01

API Key 只在服务端使用。不要把它写进前端代码、公开仓库或客户端分发包;一旦泄露请立即在控制台删除并重建。

快速开始

用官方 SDK 时只需改两个参数。下面三种语言任选其一,30 秒跑通第一条请求。

Pythonpip install openai
from openai import OpenAI

client = OpenAI(
    api_key="sk-你的令牌",
    base_url="https://ai.lemongir.shop/v1",
)

resp = client.chat.completions.create(
    model="glm-5.3",
    messages=[
        {"role": "system", "content": "你是一个简洁的助手。"},
        {"role": "user",   "content": "用一句话介绍你自己"},
    ],
    temperature=0.7,
    max_tokens=512,
)
print(resp.choices[0].message.content)
print(resp.usage)  # prompt_tokens / completion_tokens / total_tokens
Node.jsnpm i openai
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-你的令牌",
  baseURL: "https://ai.lemongir.shop/v1",
});

const resp = await client.chat.completions.create({
  model: "kimi-k2.6",
  messages: [
    { role: "system", content: "你是一个简洁的助手。" },
    { role: "user",   content: "用一句话介绍你自己" },
  ],
  temperature: 0.7,
  max_tokens: 512,
});
console.log(resp.choices[0].message.content);
cURL
curl https://ai.lemongir.shop/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-你的令牌" \
  -d '{
    "model": "qwen3.8-max",
    "messages": [
      {"role": "system", "content": "你是一个简洁的助手。"},
      {"role": "user",   "content": "用一句话介绍你自己"}
    ],
    "temperature": 0.7,
    "max_tokens": 512
  }'

充值比例 1:1(人民币 = 美元),按分组享官方价 1.8 折起。每次调用的精确扣费在 调用日志 中逐条可查。

OpenAI Chat Completions

POST /v1/chat/completions — 生态最广的对话接口,几乎所有客户端和框架都原生支持。全部文本模型可用。

请求体

参数类型必填说明
modelstring是模型 ID,如 glm-5.3。传 auto 由网关按可用性自动路由。
messagesarray是对话历史。每项含 role(system / user / assistant / tool)与 content(字符串或多模态数组)。
streamboolean否默认 false。true 时以 SSE 增量返回,见 流式输出。
temperaturenumber否0 – 2,默认 1。越低越确定,越高越发散。与 top_p 二选一调整。
top_pnumber否0 – 1,核采样阈值。默认 1。
max_tokensinteger否输出 token 上限。不传由模型默认;建议显式设置以控制成本。
max_completion_tokensinteger否新版字段,含推理 token。与 max_tokens 二选一。
stopstring | array否最多 4 个停止序列,命中即截断。
presence_penaltynumber否-2 – 2。正值抑制已出现过的话题重复。
frequency_penaltynumber否-2 – 2。正值按出现频次抑制重复用词。
ninteger否生成候选数,默认 1。按 n 倍计费。
seedinteger否尽力复现的随机种子(不保证严格确定)。
response_formatobject否{"type":"json_object"} 强制 JSON;{"type":"json_schema","json_schema":{…}} 按 schema 约束。需模型支持。
toolsarray否函数定义列表,见 工具调用。
tool_choicestring | object否auto(默认)/ none / required / 指定某个函数。
parallel_tool_callsboolean否是否允许一次返回多个工具调用,默认 true。
reasoning_effortstring否推理模型专用:low / medium / high。控制思考深度与耗时。
stream_optionsobject否{"include_usage": true} 让流式最后一帧带 usage。
userstring否终端用户标识,便于你自己按用户归集日志。

多模态输入

content 传数组即可混合文本与图片。图片支持公网 URL 或 base64 data URL:

JSON
{
  "model": "qwen3.8-max",
  "messages": [{
    "role": "user",
    "content": [
      { "type": "text", "text": "这张图里有什么?" },
      { "type": "image_url",
        "image_url": { "url": "https://example.com/photo.jpg", "detail": "auto" } }
    ]
  }]
}

响应体

JSON · 非流式
{
  "id": "chatcmpl-9f3a…",
  "object": "chat.completion",
  "created": 1756900000,
  "model": "glm-5.3",
  "choices": [{
    "index": 0,
    "message": { "role": "assistant", "content": "我是一个简洁的 AI 助手。" },
    "finish_reason": "stop"   // stop | length | tool_calls | content_filter
  }],
  "usage": {
    "prompt_tokens": 28,
    "completion_tokens": 12,
    "total_tokens": 40
  }
}

OpenAI Responses

POST /v1/responses — OpenAI 新一代接口,用 input 取代 messages,输出为结构化 output 数组,天然支持多轮工具编排。GPT 系列与部分国产模型可用。

Python
resp = client.responses.create(
    model="gpt-5.6-luna",
    instructions="你是一个简洁的助手。",      # 等价于 system prompt
    input="用一句话介绍你自己",             # 字符串或 message 数组
    max_output_tokens=512,
    reasoning={"effort": "medium"},        # 推理模型可选
)
print(resp.output_text)                   # SDK 便捷字段, 拼接全部文本输出

与 Chat Completions 的字段对照

Chat CompletionsResponses说明
messagesinput可直接传字符串,也可传 role/content 数组
messages[role=system]instructions顶层字段,不再塞进消息数组
max_tokensmax_output_tokens含推理 token
reasoning_effortreasoning.effort嵌套对象
response_formattext.format结构化输出改到 text 下
tools[].functiontools[](扁平)name / parameters 直接位于 tool 对象上
choices[0].messageoutput[]数组,元素类型为 message / function_call / reasoning 等
usage.prompt_tokensusage.input_tokens命名变化
usage.completion_tokensusage.output_tokens命名变化

Responses 的 previous_response_id(服务端状态续接)依赖上游支持,网关不保证所有模型可用。跨轮对话建议仍由客户端自行维护 input 数组。

Anthropic Messages

POST /v1/messages — Claude 原生格式。用 Anthropic 官方 SDK 或 Claude Code 等工具时走这条路径,网关会把它透明转发或翻译到非 Claude 模型。

Pythonpip install anthropic
from anthropic import Anthropic

client = Anthropic(
    api_key="sk-你的令牌",
    base_url="https://ai.lemongir.shop",   # 注意: 不带 /v1, SDK 会自动补
)

msg = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,                        # Anthropic 协议中为必填
    system="你是一个简洁的助手。",           # 顶层字段, 不放进 messages
    messages=[{"role": "user", "content": "用一句话介绍你自己"}],
)
print(msg.content[0].text)
print(msg.usage)  # input_tokens / output_tokens
TypeScriptnpm i @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: "sk-你的令牌",
  baseURL: "https://ai.lemongir.shop",
});

const msg = await client.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  system: "你是一个简洁的助手。",
  messages: [{ role: "user", content: "用一句话介绍你自己" }],
});
console.log(msg.content[0].type === "text" ? msg.content[0].text : msg.content);
cURL
curl https://ai.lemongir.shop/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk-你的令牌" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-sonnet-5",
    "max_tokens": 1024,
    "system": "你是一个简洁的助手。",
    "messages": [{"role": "user", "content": "用一句话介绍你自己"}]
  }'

请求体

参数类型必填说明
modelstring是模型 ID。可填 Claude 系列,也可填其他模型由网关翻译。
max_tokensinteger是输出上限。Anthropic 协议要求必填,漏传会 400。
messagesarray是仅 user / assistant 两种 role,须交替出现,首条为 user。content 为字符串或 content block 数组。
systemstring | array否系统提示,顶层字段。数组形式可给单块加 cache_control。
streamboolean否SSE 流式,事件类型见 流式输出。
temperaturenumber否0 – 1(注意上限是 1,不是 2)。默认 1。
top_pnumber否核采样。与 temperature 建议只调一个。
top_kinteger否仅从概率最高的 k 个 token 采样。
stop_sequencesarray否停止序列,命中时 stop_reason 为 stop_sequence。
toolsarray否每项含 name / description / input_schema(JSON Schema)。
tool_choiceobject否{"type":"auto"} / {"type":"any"} / {"type":"tool","name":"…"}。
thinkingobject否{"type":"enabled","budget_tokens":4096} 开启扩展思考,思考内容以 thinking block 返回。
metadataobject否{"user_id":"…"} 终端用户标识。

响应体

JSON · 非流式
{
  "id": "msg_01Xa…",
  "type": "message",
  "role": "assistant",
  "model": "claude-sonnet-5",
  "content": [
    { "type": "text", "text": "我是一个简洁的 AI 助手。" }
  ],
  "stop_reason": "end_turn",   // end_turn | max_tokens | stop_sequence | tool_use
  "stop_sequence": null,
  "usage": { "input_tokens": 31, "output_tokens": 14 }
}

两套协议关键差异

维度OpenAI Chat CompletionsAnthropic Messages
系统提示messages 里 role=system顶层 system 字段
max_tokens可选必填
temperature 范围0 – 20 – 1
消息顺序无强约束user / assistant 严格交替
输出结构choices[].message.content 字符串content[] block 数组
结束原因finish_reason: stop / length / tool_callsstop_reason: end_turn / max_tokens / tool_use
工具结果回传role=tool 消息user 消息内 tool_result block
用量字段prompt_tokens / completion_tokensinput_tokens / output_tokens

图像生成

POST /v1/images/generations — 当前接入 gpt-image-2,按张计费 ¥0.03 / 张。需使用「生图」分组的令牌。

Python
img = client.images.generate(
    model="gpt-image-2",
    prompt="极简风格的红色柠檬 logo,白底,矢量感",
    size="1024x1024",        # 1024x1024 | 1536x1024 | 1024x1536
    quality="medium",        # low | medium | high
    n=1,
)
print(img.data[0].url or img.data[0].b64_json)
参数类型说明
promptstring必填。描述越具体越好,支持中文。
sizestring默认 1024x1024。横竖版 1536x1024 / 1024x1536。
qualitystringlow / medium / high,影响耗时与细节。
ninteger张数,默认 1。按张计费。
response_formatstringurl(默认)或 b64_json。

向量嵌入

POST /v1/embeddings — 把文本转成向量用于检索、聚类与 RAG。可用的嵌入模型以模型广场「嵌入」分类为准。

Python
emb = client.embeddings.create(
    model="你的嵌入模型",
    input=["第一段文本", "第二段文本"],   # 字符串或字符串数组, 批量更省
    encoding_format="float",             # float | base64
)
vec = emb.data[0].embedding                 # list[float]
print(len(vec), emb.usage.total_tokens)

通用参数详解

这几个参数决定了输出的"性格"。理解它们比换模型更能改善效果。

temperature — 随机性

控制采样时对低概率 token 的宽容度。0 接近贪心解码,同样输入几乎总得同样输出,适合抽取、分类、代码补全;0.7 – 1.0 是对话与写作的常用区间;> 1.2 用于头脑风暴,但容易失控。OpenAI 协议上限 2,Anthropic 协议上限 1。

top_p — 核采样

只从累计概率达到 p 的最小 token 集合里采样。top_p=0.1 意味着只考虑最可能的那 10% 概率质量。与 temperature 效果部分重叠,官方建议二者只调一个,另一个保持默认。

max_tokens — 输出上限

触顶时 finish_reason 为 length(Anthropic 为 max_tokens),内容被硬截断。这是控制单次调用最大成本的直接手段。注意它不是"期望长度"——模型不会因为上限大就写得长。需要短回答请在提示词里说。

presence_penalty / frequency_penalty — 去重复

都在 -2 到 2 之间,默认 0。presence 对"出现过"一刀切扣分,鼓励换话题;frequency 按出现次数累积扣分,抑制口水词。长文生成出现循环时,先把 frequency 调到 0.3 – 0.6 试试。负值反而鼓励重复,几乎不用。

stop — 停止序列

模型生成到任一序列时立即停止,且序列本身不会出现在输出里。典型用法:多轮模拟时用 ["\nUser:"] 防止模型替用户说话;生成列表时用 ["\n\n"] 只取一段。

response_format — 结构化输出

json_object 模式保证返回合法 JSON,但结构由提示词约束;json_schema 模式按你给的 schema 严格约束字段与类型。用 JSON 模式时提示词里必须提到 "JSON",否则部分模型会报错。

JSON · json_schema
"response_format": {
  "type": "json_schema",
  "json_schema": {
    "name": "sentiment",
    "strict": true,
    "schema": {
      "type": "object",
      "properties": {
        "label": { "type": "string", "enum": ["positive", "neutral", "negative"] },
        "score": { "type": "number" }
      },
      "required": ["label", "score"],
      "additionalProperties": false
    }
  }
}

reasoning_effort / thinking — 推理深度

推理模型(DeepSeek V4 Pro、MiniMax M2.x、Claude 等)会在回答前"思考"。OpenAI 协议用 reasoning_effort: low | medium | high;Anthropic 协议用 thinking: {type:"enabled", budget_tokens: N} 直接给思考预算。思考 token 也计费,简单任务请用 low 或关闭。

流式输出

传 "stream": true 后,响应变为 text/event-stream,每帧一个 data: 行。首 token 延迟通常从数秒降到几百毫秒。

OpenAI 协议帧格式

SSE
data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}

data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"我是"},"finish_reason":null}]}

data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"一个助手。"},"finish_reason":null}]}

data: {"id":"chatcmpl-…","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: {"id":"chatcmpl-…","choices":[],"usage":{"prompt_tokens":28,"completion_tokens":12,"total_tokens":40}}   ← 需 stream_options.include_usage

data: [DONE]
Python
stream = client.chat.completions.create(
    model="deepseek-v4-flash-0731",
    messages=[{"role": "user", "content": "写一首关于柠檬的短诗"}],
    stream=True,
    stream_options={"include_usage": True},
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage)
Node.js
const stream = await client.chat.completions.create({
  model: "deepseek-v4-flash-0731",
  messages: [{ role: "user", content: "写一首关于柠檬的短诗" }],
  stream: true,
  stream_options: { include_usage: true },
});
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
  if (chunk.usage) console.log("\n", chunk.usage);
}

Anthropic 协议事件类型

Anthropic 的流用命名事件而非统一 chunk,顺序固定:

event说明
message_start整体消息骨架,含 id / model / 初始 usage(input_tokens)
content_block_start一个 content block 开始,带 index 与 type(text / tool_use / thinking)
content_block_delta增量。text 为 text_delta;工具参数为 input_json_delta(partial_json 需拼接)
content_block_stop该 block 结束
message_delta顶层字段变化:stop_reason 与 usage.output_tokens
message_stop流结束
ping心跳,可忽略
error中途出错,body 含 error.type / error.message
Python · Anthropic SDK
with client.messages.stream(
    model="claude-sonnet-5", max_tokens=1024,
    messages=[{"role": "user", "content": "写一首关于柠檬的短诗"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
final = stream.get_final_message()
print(final.usage)

工具调用

让模型决定"该调哪个函数、传什么参数",你执行后把结果回填,模型再组织最终回答。这是 Agent 的基本回路。

OpenAI 协议

Python · 完整回路
import json

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "查询指定城市的实时天气",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string", "description": "城市名"}},
            "required": ["city"],
        },
    },
}]
messages = [{"role": "user", "content": "上海现在多少度?"}]

# 第一轮: 模型决定调用工具
r1 = client.chat.completions.create(model="glm-5.3", messages=messages, tools=tools)
call = r1.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)        # {"city": "上海"}

# 你执行真正的函数
result = get_weather(**args)                       # 例: {"temp": 27, "desc": "多云"}

# 第二轮: 回填结果, 模型组织答案
messages += [
    r1.choices[0].message,                          # 含 tool_calls 的 assistant 消息
    {"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)},
]
r2 = client.chat.completions.create(model="glm-5.3", messages=messages, tools=tools)
print(r2.choices[0].message.content)           # "上海现在 27℃,多云。"

Anthropic 协议

工具定义用 input_schema,模型返回 tool_use block,结果以 tool_result block 放在下一条 user 消息里回传:

Python · Anthropic SDK
tools = [{
    "name": "get_weather",
    "description": "查询指定城市的实时天气",
    "input_schema": {"type": "object",
                     "properties": {"city": {"type": "string"}},
                     "required": ["city"]},
}]
messages = [{"role": "user", "content": "上海现在多少度?"}]

r1 = client.messages.create(model="claude-sonnet-5", max_tokens=1024,
                            tools=tools, messages=messages)
use = next(b for b in r1.content if b.type == "tool_use")
result = get_weather(**use.input)

messages += [
    {"role": "assistant", "content": r1.content},
    {"role": "user", "content": [{
        "type": "tool_result",
        "tool_use_id": use.id,
        "content": json.dumps(result),
    }]},
]
r2 = client.messages.create(model="claude-sonnet-5", max_tokens=1024,
                            tools=tools, messages=messages)
print(r2.content[0].text)

写好 description 比调参更重要——模型完全靠它判断何时调用。参数描述里写清单位、格式与取值范围,能显著减少幻觉参数。

流式 + 工具调用时,参数 JSON 会被拆成碎片逐帧到达,务必拼接完整后再 parse。

模型参数矩阵

上下文与最大输出取自各厂商官方文档(2026-09 核对)。网关不裁剪上游限制,但单次请求耗时受 300 秒读超时约束。分组与价格见 模型广场。

模型厂商上下文最大输出推理模式多模态输入来源
glm-5.3智谱1M128K始终开启 · effort low/high/max文本Z.ai 文档
glm-5.3-flash智谱1M128K始终开启文本 / 图片 / 视频 / 文件Z.ai 文档
glm-5.1 · glm-5智谱200K128K可选 thinking文本智谱开放文档
kimi-k2.6Moonshot256K≤ 256K(含推理)Thinking 默认 / Instant 可选文本 / 图片模型卡
kimi-k2.5Moonshot256K64K可选 thinking文本 / 图片模型卡
kimi-k2.7-codeMoonshot256K≤ 256K(含推理)始终开启 · temperature 锁定 1.0文本Kimi 平台
qwen3.8-max阿里1M128K可选 enable_thinking文本 / 图片 / 视频百炼文档
qwen3.7-max阿里1M64K可选 enable_thinking文本(6 月快照起支持图片)百炼文档
Qwen3.8-27B阿里256K 原生(可扩至 1M)128K 建议值可选 thinking文本 / 图片模型卡
deepseek-v4-pro-0813DeepSeek1M384Kthinking 默认 · effort low/high/max文本DeepSeek 文档
deepseek-v4-flash-0731DeepSeek1M384Kthinking / non-thinking文本DeepSeek 文档
minimax-m2.7 · m2.5MiniMax200K(输入 + 输出共用)建议 64K · 上限 200K始终开启,不可关闭文本MiniMax 文档
seed-2.1-pro · turbo字节256K256K(默认 4K,需显式设 max_tokens)深度思考文本 / 图片火山方舟
mimo-v2.5-pro小米1M128K可选 thinking文本小米官网
claude-sonnet-5Anthropic · 福利1M128KAdaptive thinking文本 / 图片 / PDFAnthropic 文档
gpt-5.6-lunaOpenAI · 福利1.05M(>272K 输入部分上游加价)128Keffort none → max文本 / 图片OpenAI 文档
gpt-image-2OpenAI · 生图—1024² / 1536×1024 / 1024×1536—文本 → 图片—
auto网关路由随所选模型随所选模型随所选模型文本—

表中数值为厂商官方 API 的公开上限。网关接入的具体渠道可能低于此值(例如第三方托管版本常将输出压到 128K 以内),实际以响应中的 finish_reason / usage 为准。发现不一致请反馈,我们会同步修正。

计费与限流

全部以人民币计价。当前所有模型都是按次计费:一次请求扣一次固定费用,与 token 数无关。

文本模型

default 分组全部文本模型统一价,不区分输入输出、不区分推理 token。

¥0.001 / 次请求

福利分组

海外旗舰按次单价略高,仍远低于按 token 直采。

claude-sonnet-5 ¥0.02 / 次
gpt-5.6-luna ¥0.01 / 次

图像模型

按张计费,与 prompt 长度、尺寸无关。

gpt-image-2 ¥0.03 / 张

速率限制

单用户每分钟 200 次成功请求。超出返回 429,等待下一分钟窗口即恢复。

200 req / min · 按用户计

按次计费意味着:一次塞满上下文的长请求和一次"你好"扣费相同。流式请求同样只算一次。失败(4xx / 5xx)的请求不扣费。响应里的 usage 字段仍会如实返回 token 用量,方便你自己做统计。

分组折扣(default / 国模 / 腾讯限量 / 生图)低至官方价 1.8 折,不在单价之上再加价。每次调用的模型、耗时、扣费在 调用日志 逐条可查。建议给每把令牌设额度上限;额度不足时可在 钱包 充值,实时到账。

错误码

错误响应统一为 {"error": {"message", "type", "code"}}。HTTP 状态码决定重试策略。

HTTP常见 type / code原因处理
400invalid_request_error参数缺失或格式错误;Anthropic 协议漏传 max_tokens;messages 顺序不合法检查请求体,不要重试
401authentication_errorKey 缺失、格式错误、已删除或被禁用确认 Authorization: Bearer sk-…,到控制台核对令牌状态
403permission_denied令牌所属分组无权使用该模型(如 default 分组调 claude-sonnet-5)切换到有权限的分组或申请福利分组
404model_not_found模型名拼写错误或已下线到模型广场复制准确 ID,注意大小写
413context_length_exceeded输入超出模型上下文窗口裁剪历史、摘要压缩,或换大上下文模型
429rate_limit_exceeded超过 200 req/min;或额度用尽(insufficient_quota)指数退避重试;额度问题去充值
500api_error网关内部错误重试一次,持续失败请联系管理员
502 / 503upstream_error上游渠道超时或不可用重试或临时切换模型;auto 会自动绕开故障渠道
529overloaded_error上游过载(Anthropic 特有)退避 5 – 30 秒后重试
Python · 带退避的重试
import time
from openai import OpenAI, RateLimitError, APIStatusError

def ask(messages, retries=4):
    for i in range(retries):
        try:
            return client.chat.completions.create(model="glm-5.3", messages=messages)
        except RateLimitError:
            time.sleep(2 ** i)                       # 1s, 2s, 4s, 8s
        except APIStatusError as e:
            if e.status_code in (502, 503, 529):
                time.sleep(2 ** i)
            else:
                raise                                # 4xx 参数问题不重试
    raise RuntimeError("retries exhausted")

客户端配置

任何支持"自定义 OpenAI 兼容端点"的工具都能直接用。填下面两个值即可。

OpenAI 兼容类

Cherry Studio · Lobe Chat · NextChat · Open WebUI · DeepChat · 沉浸式翻译 · 流畅阅读 · Cursor · Continue

API 地址 = https://ai.lemongir.shop/v1
API Key = sk-…

Anthropic 兼容类

Claude Code · Cline · Roo Code 等选择 Anthropic 供应商时

ANTHROPIC_BASE_URL = https://ai.lemongir.shop
ANTHROPIC_API_KEY = sk-…

Claude Code

Shell
export ANTHROPIC_BASE_URL="https://ai.lemongir.shop"
export ANTHROPIC_API_KEY="sk-你的令牌"
export ANTHROPIC_MODEL="claude-sonnet-5"          # 或任何文本模型, 如 kimi-k2.7-code
claude

Cursor / Continue / Cline

选择 OpenAI Compatible 供应商,Base URL 填 https://ai.lemongir.shop/v1,模型名手动填写(如 kimi-k2.7-code)。部分工具会先请求 /v1/models 拉列表,若为空请直接手填模型名。

LangChain / LlamaIndex

Python · LangChain
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="glm-5.3",
    api_key="sk-你的令牌",
    base_url="https://ai.lemongir.shop/v1",
    temperature=0.3,
)
print(llm.invoke("你好").content)

在 令牌页 点击「聊天」可一键跳转到已填好参数的在线客户端。

常见问题

遇到问题先看这里,多数情况 30 秒内能解决。

用 Anthropic SDK 时 base_url 到底带不带 /v1?

不带。Anthropic SDK 会自动在 base_url 后拼 /v1/messages,填 https://ai.lemongir.shop 即可。OpenAI SDK 则相反,要填到 /v1。

能用 Anthropic 格式调国产模型吗?

可以。/v1/messages 路径下 model 填 glm-5.3 等任意文本模型,网关会做协议翻译。反过来用 Chat Completions 调 claude-sonnet-5 也行。

为什么同样的请求两次结果不一样?

temperature > 0 时采样有随机性。要复现请把 temperature 设为 0,并传固定 seed;即便如此上游也只承诺"尽力"确定。

返回被截断了怎么办?

看 finish_reason:为 length 说明撞到 max_tokens 上限,调大即可;为 content_filter 说明触发上游安全策略,需调整提示词。

流式请求中途断开?

网关对流式连接的读超时为 300 秒。长任务请确保客户端不设更短超时,并处理 [DONE] 之前的异常断连(记录已收到的内容后重试)。

token 用量会影响扣费吗?

不会。当前所有模型按次计费,一次请求固定扣一次费用(文本模型 ¥0.001)。响应里的 usage 只是上游如实回报的 token 数,供你自己统计,不参与扣费。

如何申请福利分组?

福利分组包含 Claude Sonnet 5、GPT-5.6 Luna 等,倍率同样为 1.0。目前需联系管理员开通,开通后在创建令牌时选择「福利分组」。

数据会被存储吗?

网关只记录计费与排障所需的元数据(时间、模型、token 数、状态码、耗时),不存储请求与响应正文。传输全程 HTTPS。