中文 ▾

Qwen Abliterated API:调用托管模型,无需 GPU

插图:笔记本电脑通过线缆向托管模型服务器发送数据立方体

已更新

你可以使用已有的 OpenAI SDK 通过 HTTP 调用无审查聊天模型,无需下载权重或租用 GPU。本指南展示了设置方法、可用代码及精确成本。

要点

  • 将任何 OpenAI SDK 指向 base URL,并将模型设置为 uncensored。
  • 流式输出、工具调用和 JSON 模式通过标准参数工作。
  • 限制:完整密钥支持 8 个并发请求和每分钟 300 个请求。
  • 按 token 付费:输入每 1M token $0.15,输出每 1M token $0.50。

简短回答:更改 base URL

如果你正在寻找 Qwen Abliterated API,实用的方案是使用支持 OpenAI 协议的托管接口。你只需保留客户端代码,修改两个值,即可向运行该模型的服务器发送请求。无需下载 GGUF,无需选择量化,无需考虑显存预算。

关于命名的必要说明:这是一个独立服务,并非官方 Qwen API,托管模型的标识为 uncensored,而非 Qwen 检查点名称。这是一个开放权重模型,由独立提供商运行,经过调整可在合法成人用途中无内容拒绝地回答问题。如果你需要某个特定的去审查模型文件,请在本地运行该文件。如果你需要一个用于应用的可靠聊天接口,请继续阅读。

设置说明
Base URLhttps://api.qwenabliterated.top/v1
模型uncensored
Auth 头Authorization: Bearer YOUR_API_KEY
接口POST /v1/chat/completions,GET /v1/models
上下文窗口100,000 token,包含提示词和补全

获取密钥

使用 Google 或邮箱密码注册,然后打开 API 密钥页面。新用户可一键领取 $0.50 试用额度,每人限领一次,有效期 7 天,无需绑定银行卡。这足以让你多次运行下面的所有示例。

试用密钥的限制低于完整密钥:并发请求限制为 2,每分钟请求限制为 60,而完整密钥分别为 8 和 300。如果你使用并发工作线程进行测试,请牢记这一点。

将密钥存储在环境变量中,而不是源代码控制中:

export QWENABL_KEY="paste-your-key-here"

Python 中的首次请求

使用 pip install openai 安装官方 SDK,然后:

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.qwenabliterated.top/v1",
    api_key=os.environ["QWENABL_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a blunt technical assistant."},
        {"role": "user", "content": "Explain what a KV cache is in three sentences."},
    ],
    temperature=0.7,
)

print(resp.choices[0].message.content)
print(resp.usage)

响应包含标准的 usage 块,因此你可以记录提示词和补全 token 并自行计算支出。响应头包含 X-Request-Id 用于支持查询,以及 X-Balance-USD 以便你在不打开仪表板的情况下查看剩余额度。

为何使用 API 而非 GGUF 文件

通常获取无审查模型的路径是找到量化文件,在本地运行时加载它,并与本地服务器通信。这可行,对于实验来说,这是学习的好方法。但当从实验转向其他人使用的产品时,摩擦就会显现。

首先是硬件。适合你桌面显卡的短上下文文件,在长上下文时可能无法运行,因为注意力缓存随每个 token 增长。其次是并发。单个本地进程可以舒适地处理一到两个聊天,但十个用户同时使用会导致排队。第三是可用性。家庭电脑会休眠、断电或在错误的时间进行驱动更新。托管 API 将这些变成他人的工作,你只需为使用的 token 付费。

你放弃的是选择特定检查点的自由,以及保证字节不离开你网络的保证。在做出选择之前,决定哪一点对你的项目更重要。

Node.js 和 curl

Node SDK 采用相同的两个选项:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.qwenabliterated.top/v1",
  apiKey: process.env.QWENABL_KEY,
});

const resp = await client.chat.completions.create({
  model: "uncensored",
  messages: [{ role: "user", content: "Give me five names for a fantasy tavern." }],
});

console.log(resp.choices[0].message.content);

使用 curl 也是如此,这在连接任何内容之前检查密钥很方便:

curl -s https://api.qwenabliterated.top/v1/models \
  -H "Authorization: Bearer $QWENABL_KEY"

成功的调用返回包含 uncensored 的 JSON 列表。401 表示密钥错误或缺失。文档详细介绍了错误格式。

流式输出、JSON 模式和工具

流式输出

设置 stream: true 并读取服务器发送的事件。使用情况在流结束时报告。

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Write a short scene on a night train."}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

流式请求会占用其并发槽位,直到流结束,因此打开流后离开的客户端将阻塞容量。务必消费或关闭流。

JSON 模式

传递 response_format={"type": "json_object"} 并在提示词中提及 JSON。无论如何都要进行防御性解析;没有模型能每次都完美遵循模式。

函数调用

发送 tools 和可选的 tool_choice。当模型请求工具时,运行它并将输出作为带有 role: "tool" 的消息返回。工具调用也支持流式输出。采样参数 temperature、top_p、stop、seed 以及频率和存在惩罚会透传。

将其集成到实际应用中

单个脚本很容易。应用程序需要养成一些习惯,这些习惯与你使用任何 OpenAI 风格 API 时相同。

将密钥保留在服务器端

切勿将密钥发布到浏览器代码或移动应用中。从后端调用 API,并向前端暴露你自己的路由,以便添加认证和按用户限制。任何在包中找到密钥的人都可以消耗你的额度。

设置超时并限制输出

补全可以使用 100,000 token 窗口中剩余的任何部分,max_tokens 是可选的。对于聊天功能,设置与界面匹配的上限,以防止异常长的回答导致账单激增。将其与客户端超时结合使用,即可为每次调用设定时间和金钱的上限。

记录请求 ID

每个响应都包含 X-Request-Id。将其存储在您自己的调用记录旁边。当结果看起来错误或请求失败时,该标识符是支持人员找到确切请求的关键。X-Balance-USD 标头对于简单警报很有用:如果数字低于阈值,在任务耗尽前发送消息给自己。

在启动时检查模型列表

调用 GET /v1/models 的健康检查不消耗 token,并一步确认密钥、URL 和网络路径。在服务启动时运行它,如果返回错误则明确报错。

限制和错误处理

超过限制的请求返回 HTTP 429。错误代码告诉您触发了哪个限制:rate_limited 表示每分钟请求过多,concurrency 表示同时请求过多。在临时过载期间,API 还会返回带有 Retry-After: 5 标头的 429。最大主体为 8 MB。

尊重标头并退避:

import time
from openai import OpenAI, RateLimitError

def ask(client, messages, tries=5):
    for attempt in range(tries):
        try:
            return client.chat.completions.create(model="uncensored", messages=messages)
        except RateLimitError as e:
            wait = int(e.response.headers.get("Retry-After", 5))
            time.sleep(wait * (attempt + 1))
    raise RuntimeError("still rate limited")

如果你运行工作线程池,请将完整密钥的线程数限制为 8。超过此限制只会将工作转换为 429 错误。失败或被拒绝的请求不会收费,因此失败时的重试不会额外花费。

请求成本

输入 token 每 1M 为 $0.15,输出 token 每 1M 为 $0.50。一些精确计算的示例:

  • 一次包含 2,000 个提示词 token 和 500 个补全 token 的对话轮次:2,000 x $0.15 / 1M = $0.0003,加上 500 x $0.50 / 1M = $0.00025,总计 $0.00055。一千次轮次的费用为 $0.55。
  • 一个发送 10M 输入 token 并接收 2M 输出 token 的批处理作业:$1.50 加上 $1.00,总计 $2.50。
  • 一次长上下文调用,包含 90,000 个提示词 token 和 1,000 个输出 token:$0.0135 加上 $0.0005,总计 $0.014。

额度为预付制,永不过期,无订阅。充值任意整数金额,范围从 $20 到 $500;充值 $50 可获 5% 奖励,即充值 $50 获得 $52.50 额度。支持加密货币(TRC20 上的 USDT、Base 上的 USDC)支付。查看 定价页面 获取完整奖励表。

托管服务与本地文件:哪种更适合

本地 GGUF 通过隔离提供隐私,并让你完全控制精确权重。托管 API 无需硬件运维,支持长上下文,并提供其他服务可调用的 URL。大多数构建机器人、写作工具或游戏后端的团队发现托管更简单,因为备用 GPU 盒子是另一件需要维护的事物。

若要更广泛地了解按 token 付费与获取 Qwen 风格模型的其他方式的比较,请参阅 对比指南。发送给 API 的提示词不用于训练。该模型仅支持文本,且在任何情况下均不允许涉及未成年人的色情内容。

问答

我需要 GPU 才能使用它吗?

不需要。模型在提供商服务器上运行。你的代码仅发送 HTTP 请求,因此笔记本电脑或小型 VPS 即可满足需求。

我应该发送哪个模型名称?

将 uncensored 作为模型值发送。你可以通过向 /v1/models 发送 GET 请求来确认。

是否支持 OpenAI Python 和 Node SDK?

支持。将 Base URL 设置为站点的 /v1 地址并使用你的 API 密钥即可。通过正常参数即可使用聊天补全、流式输出、函数调用和 JSON 模式。

如果我发送的请求过多会发生什么?

你会收到 HTTP 429 响应,错误代码为 rate_limited 或 concurrency。请等待并重试,并在存在时遵守 Retry-After 头。

有免费测试的方法吗?

新用户可在 API 密钥页面一键领取 $0.50试用额度。有效期 7 天,无需绑定银行卡。

只差一张表单,即可获得密钥

创建账户,复制密钥,更改基础 URL。这就是全部设置。

获取 API 密钥