了解按令牌付费模式
按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."}]
}'