快速回答
LLMwithCrypto API 会返回哪些错误,它们会收费吗?
API 用 HTTP 状态码和 OpenAI 风格的 body 返回错误:{"error": {"message", "type", "param", "code"}}。LLMwithCrypto 用 400 表示请求有误,401 表示 key 错误,402 表示积分无法支付,404 表示未知模型,429 表示速率限制,500 或 503 表示我们这边的问题。以错误结束的调用不产生费用,依据的是 2026 年 10 月 23 日的文档。
有哪些错误?
任何错误都不会消耗积分。code 是在代码中测试的稳定值;message 是给人看的,可能会变化。
| HTTP | code | 原因 | 重试? |
|---|---|---|---|
| 400 | invalid_parameter | 缺少必填字段,或值超出范围或类型错误 | 否:修正请求 |
| 400 | context_length_exceeded | messages 加上 max_tokens 无法容纳在模型的上下文窗口内 | 否:缩短输入或降低 max_tokens |
| 400 | unsupported_parameter | 此模型不支持的字段,例如在没有 JSON 模式的模型上使用 response_format | 否:移除它或更换模型 |
| 401 | invalid_api_key | key 缺失、拼写错误或被撤销 | 否:检查 API 密钥 |
| 402 | insufficient_balance | 剩余余额不足以支付此次调用 | 否:购买积分包 |
| 404 | model_not_found | model id 不在我们的列表中 | 否:请使用 GET /api/v1/models 中的 id |
| 429 | rate_limit_exceeded | 每分钟请求数或 token 数超出账户允许 | 是,暂停后再试 |
| 500 | server_error | 我们这边出了故障 | 是,使用退避重试 |
| 503 | model_overloaded | 模型 momentarily 达到容量上限 | 是,使用退避重试,或换一个模型 |
{
"error": {
"message": "The model `gpt-4o` does not exist or is not available to your key.",
"type": "invalid_request_error",
"param": "model",
"code": "model_not_found"
}
}
为什么 gpt-4o 或 claude 会返回 404?
因为这些模型不在这里出售。我们不出售 GPT、Claude、Gemini 或 Grok 的访问权限:其开发商禁止未经其批准转售 API 访问,而我们并未获得该批准。为 OpenAI API 编写的代码通常会在多处指定模型名;在你的项目中搜索旧名称,并替换为模型页面上的 id,例如 deepseek-v4-pro 或 gpt-oss-120b。
我的代码应该在什么时候重试?
重试 429、500 和 503,以及网络错误,例如超时或连接重置。绝不要重试 400、401、402 或 404:同样的请求会以同样的方式失败。
每次新的尝试前先等待。当响应带有 Retry-After 头时,等待该头指定的秒数;否则每次将暂停时间加倍(1、2、4、8 秒……)并加上一点随机时间,以免大量 worker 同步重试。尝试几次后放弃,并记录错误。OpenAI SDK 本身已会自动重试;下面的示例将其关闭,以完整展示逻辑。
import os
import random
import time
from openai import APIConnectionError, APIStatusError, OpenAI
client = OpenAI(
base_url="https://llmwithcrypto.com/api/v1",
api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
max_retries=0,
)
RETRY = {429, 500, 503}
def chat(messages, model="deepseek-v4-pro", attempts=5):
for attempt in range(attempts):
try:
return client.chat.completions.create(model=model, messages=messages, max_tokens=500)
except APIStatusError as err:
if err.status_code not in RETRY or attempt == attempts - 1:
raise
wait = err.response.headers.get("retry-after")
delay = float(wait) if wait else min(30, 2**attempt) + random.random()
except APIConnectionError:
if attempt == attempts - 1:
raise
delay = min(30, 2**attempt) + random.random()
time.sleep(delay)
收到 402 insufficient_balance 时该怎么办?
充值。此次调用未被计费,账户其他方面也不会变化:只要余额恢复,你的 API 密钥即可继续使用。加密货币充值确认、积分包购买完成后,你的 API 密钥就在 dashboard 里等着你。
为避免生产环境出现意外,请不时读取 GET https://llmwithcrypto.com/api/v1/credits,并在你选定的下限以下提醒自己;模型与积分类页面展示了此次调用。积分不会过期:这个月没花完的,明年还在,因此提前购买更大的积分包不会额外花费。
如何保持在 rate limit 之下?
每个账户都有每分钟请求数和 token 上限,显示在 dashboard 中;联系 support 可以调高。
- 限制并发。 并行运行固定数量的请求,而不是一次性发出整批请求。
- 限制输出。 Token 限制也会计算模型写入的内容,因此合理的
max_tokens能让更多请求保持在限制之内。 - 分散批次。 对于大型离线任务,将请求分散到一分钟内,而不是集中突发发送。
错误:常见问题
失败的调用会收费吗?
不会。按 token 从余额扣费:输入和输出 token 由模型自己的 tokenizer 计数,按该模型每 1M token 的价格计费。以错误结束的调用不收费。
在哪里可以查看是否发生故障?
在状态页面上。多个模型上连续出现 500 或 503 错误,通常意味着我们这边发生了故障;如果持续存在,请写信至 [email protected]。
我能看到失败的请求吗?
我们这边看不到。我们不保存你的提示词或模型的回答:响应一旦发出,其文本即消失。每次调用只留一行日志,记录时间、账户、模型和 token 数量,30 天后删除。请在你的应用中记录错误 code 和你自己的请求 id。