身份验证
认证通过单个 API 密钥处理。你可以在 获取 API 密钥 页面使用 Google 或电子邮件密码注册。密钥会立即显示,并与你的预付额度绑定。与主要供应商不同,试用期间无需月度订阅或信用卡。对所有请求使用标头 Authorization: Bearer YOUR_API_KEY。你的密钥是每个账户唯一的活跃凭证;生成新密钥将使旧密钥失效。
基本补全
向 OpenAI 兼容的接口发送标准的聊天完成请求。模型标识符为 uncensored。该模型是开放权重模型,经过调整,可在合法成人使用中无内容拒绝地回答问题。它不是 GPT、Claude 或其他任何供应商的模型。该服务的基础 URL 如下提供。
curl https://api.ornith.top/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Write a blunt product review of a cheap VPN."}]
}'将 YOUR_API_KEY 替换为你从控制面板获取的密钥。响应中包含生成的文本,位于 choices[0].message.content。401 错误表示密钥无效,而 402 表示你的预付额度已用完。
Python SDK
使用官方的openai Python 包。将其指向 Ornith 基础 URL 并提供您的 API 密钥。这确保了与标准 OpenAI 客户端结构的兼容性。您可以将消息作为包含role和content的字典列表传递。客户端会自动处理 HTTP 请求。这种方法适用于简单的文本生成以及使用工具或 JSON 模式的更复杂交互。
from openai import OpenAI
client = OpenAI(base_url="https://api.ornith.top/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)响应对象镜像了标准的 OpenAI 结构。你可以直接从响应对象中访问生成的文本。这种方法非常适合需要以编程方式访问模型输出的后端服务或脚本。
Node SDK
安装openai npm 包。使用 Ornith 基础 URL 和您的 API 密钥初始化客户端。请求结构与 Python SDK 相同。使用chat.completions.create方法。这适用于 JavaScript 环境,无论您是构建 Web 后端还是 CLI 工具。客户端处理响应的序列化和反序列化。
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.ornith.top/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);适当处理错误。网络错误或 API 错误将引发异常。检查状态码以区分身份验证失败、速率限制或服务器错误。响应以与 Python SDK 相同的格式包含补全详情。
流式响应
通过在请求中设置stream: true启用流式输出。这将返回生成中的 token 流。用于实时 UI 更新或渐进式文本显示。流以包含总 token 使用量的最后一个块结束。这允许您实时跟踪成本,而无需等待完整响应。对于您希望显示进度的长上下文,这非常高效。
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)迭代处理流以处理每个块。最后一个块包含usage字段。这对于计费透明度很有用。确保您的客户端正确处理流,以避免大响应导致的内存问题。
限制、错误与上下文
上下文窗口为 100,000 token,包含提示词和补全的总和。每次请求的最大输出为 32,000 token(若未设置 max_tokens,则为 2,048)。每分钟限制 300 次请求,每个密钥限制 8 个并发请求。请求体必须小于 8 MB。如果超出速率限制,你将收到 429 错误。针对未成年人相关内容的拒绝是硬编码的,始终生效。错误不会消耗额度。额度为预付制,且永不失效。