中文 ▾
获取 API 密钥

LLM api 无订阅:常见集成错误

开发者在切换到 LLM API 时,由于假设标准 API 行为普遍适用,常常花费数小时调试集成错误,且没有订阅模式。本指南澄清了按 token 付费端点、流式传输限制和加密货币计费的具体技术细微差别,帮助您可靠地构建。

最后更新时间

摘要

  • 如果您未正确解析最后一个 SSE 数据块,流式响应会过早截断。
  • 100k 上下文窗口包含提示词和补全 token,需要谨慎的截断策略。
  • 加密充值是即时的,但需要精确匹配网络(TRC20 与 Base)才能在您的余额中反映。
  • 无审查模型中的函数调用可能会因温度过高而返回非标准 JSON。

了解按令牌付费模式

按Token计费意味着您只为消耗的部分付费,而不是为服务器的空闲访问付费。与传统月度订阅不同,此模型将成本与用量直接挂钩。您根据端点处理的实际输入和输出Token数量付费。

大多数提供商对输入和输出令牌收取不同的费率。例如,一些无审查 LLM 服务将输入定价为每百万令牌 $0.15,输出为每百万令牌 $0.50。这种差异存在是因为生成文本比阅读它需要显著更多的计算资源。

你应该密切关注你的令牌计数。如果你不估算输出长度,单个长响应可能会超过你的输入成本。始终检查响应标头或正文中返回的使用元数据,以准确跟踪你的支出。

为何你的流式响应过早截断

流式响应因客户端通常在接收前几个数据块后停止监听而过早截断。服务器实时发送数据,但如果您的应用程序未正确处理流,可能会过早断开连接。

每个块包含部分文本。您必须拼接这些块以形成完整响应。如果您丢弃中间块,将会丢失数据。最后一个块通常包含完整的使用统计。

检查您的超时设置。某些网络会在几秒无活动后断开连接。确保您的客户端能处理流式传输中的间歇性暂停。这在生成长文本的大型语言模型中很常见。

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Tell the story in second person."}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

正确处理 100k 上下文窗口

上下文窗口限制包括提示词和生成的补全内容。你不能在提示词中发送 100k token 并期望在响应中再获得 100k token。总长度必须保持在限制范围内。

如果您发送较大的提示词,回复的可用空间就会减少。例如,90k token 的提示词仅留下 10k token 用于输出。这可能会导致长回复被突然截断。

在您的端实现令牌计数。使用与模型编码匹配的标记器。这可以确保您在请求期间不会超出限制。如果超出,服务器将返回错误。

考虑在聊天记录中截断较旧的消息。这可以保留最近的上下文,同时保持在限制范围内。这对于在长会话中保持对话连贯性至关重要。

充值:为什么您的余额未更新

当您向错误的网络发送令牌时,加密充值无法更新。我们的 API 接受 TRC20 上的 USDT 和 Base 上的 USDC。将 Ethereum 上的 USDT 发送到 TRC20 地址将导致资金丢失。

发送前始终验证网络前缀。存款页面显示了每种货币特定的地址和网络。不要假设所有 USDT 地址都是可互换的。

等待所需的确认数。交易不是即时的。只有在区块链确认转账后,系统才会将资金记入您的账户。这防止了双重支付问题。

在区块浏览器上检查交易哈希。如果余额未更新,请将哈希提供给支持团队。他们可以手动验证转账。这是解决差异的最快方法。

修复无审查模型中的函数调用错误

函数调用错误通常源于无限制模型中的非标准 JSON 格式。这些模型优先考虑创造性而非严格的结构,这可能会破坏严格的解析器。

将响应格式设置为 json_object 用于强制执行更严格的输出。这降低了 JSON 格式错误的几率。但是,它可能会略微降低创造性。

在解析之前验证响应。使用 try-catch 块处理 JSON 解码错误。如果解析失败,请使用较低的温度重试。这鼓励更确定性的输出。

from openai import OpenAI

client = OpenAI(base_url="https://api.aiapisubscription.com/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)

速率限制:处理 300 RPM 突发

速率限制限制您每分钟可发送的请求数量。我们的 API 允许每个密钥每分钟 300 个请求。超出此限制将返回 429 状态码。

达到限制时实现指数退避。在短暂延迟后重试请求。这可以防止在高峰使用期间过度冲击服务器。

监控您的请求频率。如果您发送请求太快,可能会触发限制。均匀地间隔您的请求。这确保一致的性能。

如果需要更高的吞吐量,请使用多个密钥。每个密钥都有各自的限制。这使您能够在不遇到单一瓶颈的情况下扩展应用程序。

JSON 模式失败及响应格式问题

当模型返回无效语法时,JSON 模式会失败。这在优先考虑自然语言而非结构化数据的 uncensored 模型中很常见。

使用 response_format 用于强制 JSON 输出。这告诉模型将其响应结构化为有效的 JSON。但是,它不保证正确性。

使用 JSON 架构验证输出。这确保数据符合您的预期结构。如果验证失败,请求重试或调整提示。

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://api.aiapisubscription.com/v1", apiKey: process.env.API_KEY });

const resp = await client.chat.completions.create({
  model: "uncensored",
  messages: [{ role: "user", content: "Draft a villain monologue for my game." }],
});
console.log(resp.choices[0].message.content);

调试 token 计数差异

当您的客户端使用的分词器与模型不同时,会产生 Token 计数差异。这会导致成本估算不准确。

使用模型供应商提供的官方分词器。这确保您的计数与实际使用情况匹配。第三方分词器可能对特殊字符的处理方式不同。

检查响应中的使用元数据。这提供了确切的 token 计数。将其与您的本地计数进行比较以识别差异。

考虑特殊 token。这些包括系统提示词和功能定义。它们会消耗 token,但在原始文本中可能不可见。

何时从本地部署切换到 API

当本地硬件无法满足您的延迟或规模要求时,切换到 API。在本地运行大型模型需要昂贵的 GPU 和大量的电力。

API 提供无需硬件维护的可扩展性。您可以轻松处理突发的流量高峰。这非常适合生产环境。

考虑成本。如果你全天候运行本地模型,电力和硬件成本可能会超过 API 使用成本。按 token 计费仅在 usage 可变时才具有成本效益。

curl https://api.aiapisubscription.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "Summarize the technical specs of the new GPU."}]
  }'

常见问题解答

100k 上下文窗口包括响应令牌吗?

是的,100k 上下文窗口包括输入提示词和输出补全部分。在设计应用程序时,您必须同时考虑这两部分。如果您的提示词为 90k token,则响应仅剩 10k token 的空间。

我可以将此无审查 LLM 与标准 OpenAI SDK 一起使用吗?

是的,API 与 OpenAI 兼容。您可以通过更改 base URL 和 API 密钥来使用官方 OpenAI SDK。这使您能够以最小的代码更改将其集成到现有项目中。

为什么我的加密货币充值显示为待处理?

加密货币交易需要区块链确认后才能计入余额。系统会等待网络验证转账。根据网络拥堵情况,此过程可能需要几分钟。

如果我超出 300 RPM 限制会怎样?

您将收到 429 请求过多错误。在速率窗口重置之前,您的请求将被拒绝。实现指数退避以优雅地处理此情况,并在短暂延迟后重试。

获取您的 API 密钥

注册,获取密钥,并更新基础 URL。完成。

获取 API 密钥https://api.aiapisubscription.com/v1