中文 ▾
领取试用密钥

排查 abliterated 模型的常见错误

排查 abliterated 模型通常归结为理解 uncensored LLM 如何处理结构、上下文和流式传输,这与标准商业 API 不同。通过解决 JSON 验证、令牌限制和参数调整,您可以确保 NSFW 角色扮演或编码的可靠性,避免意外的拒绝或格式损坏。

最后更新时间

摘要

为何你的 JSON 响应验证失败

当模型在代码块之外附加对话文本时,JSON 解析会失败。Uncensored 模型优先考虑自然语言流,因此它们经常在原始数据之前或之后添加“这是 JSON”。这会破坏期望仅包含对象的严格解析器。

使用 response_format 参数设置为 {"type": "json_object"}. 这强制模型仅输出有效的 JSON。它消除了代码中需要正则表达式清理脚本的需求。但请注意,由于模型受到约束,每次请求消耗的 token 更多。

  • 设置 response_format 到 json_object 在请求负载中。
  • 确保您的系统提示词明确要求 JSON 输出。
  • 如果模型出错,请优雅地处理尾随逗号或轻微的语法错误。
from openai import OpenAI

client = OpenAI(base_url="https://api.abliteratedllmonline.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)

正确处理上下文窗口限制

您的上下文窗口总计 100,000 个令牌,包括输入和输出。如果您发送长历史记录,则必须减少最大输出长度。默认最大输出为 2,048 个令牌,除非您另行指定。

通过从 100,000 中减去输入大小来计算剩余令牌。如果您在进行角色扮演,请保持系统提示简洁。仅在 API 请求中保留最近的对话轮次。较旧的上下文可以总结或截断。这可以防止在生成过程中达到硬性限制。

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://api.abliteratedllmonline.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);

无限制模型的函数调用错误

当模型忽略工具定义或返回无效参数时,函数调用会失败。无限制模型可能会优先考虑创造性响应而非严格使用工具。它们可能会产生模式中不存在的幻觉参数。

在 tools 数组。使用 tool_choice 以强制特定行为。如果模型拒绝调用工具,请检查您的系统提示中是否有冲突的指令。确保工具名称和描述清晰无歧义。首先使用简单查询进行测试以验证集成。

  • 提供清晰的工具名称和描述。
  • 使用 tool_choice 控制调用。
  • 执行前根据架构验证参数。
curl https://api.abliteratedllmonline.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "List the python dependencies for this flask app"}]
  }'

流式传输中断和 SSE 处理

通过服务器发送事件(SSE)进行流式传输时,如果客户端断开连接或网络出现波动,可能会丢失令牌。最后一个数据块包含令牌使用统计信息。您必须解析该数据块以获取输入和输出计数。

实现一个健壮 SSE 客户端,处理重连逻辑。不要假设每个块都包含数据。一些块可能是空的或仅包含空格。处理最后一个块以更新您的信用余额或分词计数器。这确保了计费和跟踪的准确性。

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)

影响 NSFW 输出的温度设置

温度控制模型输出的随机性。较高的值(如 0.8 或 0.9)会增加创造力和不可预测性。较低的值(如 0.2)使输出更具确定性和专注度。对于 NSFW 角色扮演,较高的温度会产生更多样化和强烈的响应。

实验不同值以找到最佳平衡。temperature 过高可能导致不连贯或重复的文本。temperature 过低可能导致机械或平淡的对话。根据你的期望语气和一致性进行调整。无审查模型对较高的创意设置响应良好。

  • 对于创意角色扮演,使用 0.7-0.9。
  • 对于事实或编码任务,使用 0.2-0.5。
  • 在调整时监控输出质量。

角色扮演生成中的 Top P 和多样性

Top P(核采样)限制模型仅考虑概率质量最高的前百分比。它与温度参数配合使用以控制多样性。较低的 Top P 值使输出更具可预测性。较高的值允许更多样化的词汇选择。

将 Top P 与温度结合使用以实现细粒度控制。例如,高温度配合低 Top P 可以产生有创意但专注的文本。这对于在允许自发行为的同时保持角色声音很有用。测试不同的组合以适应您的叙事风格。

from openai import OpenAI

client = OpenAI(base_url="https://api.abliteratedllmonline.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)

理解令牌限制和成本

Token 用量直接影响您的预付费额度。API 对每百万个输入 token 收取 $0.15,对每百万个输出 token 收取 $0.50。输出 token 更昂贵,因为它们代表模型的工作量。流式传输不会改变成本;您需为所有生成的 token 付费。

监控您的令牌使用情况以避免意外费用。最后一个 SSE 块提供确切的令牌计数。使用此数据更新您的本地余额或计费仪表板。错误和拒绝不收费,因此您只需为成功的完成付费。这种按量付费模式确保您不会多付。

  • 输入令牌每百万个成本为 $0.15。
  • 输出 token 每百万成本为 $0.50。
  • 拒绝和错误免费。

API 密钥替换与速率限制

每个账户同时只允许一个活动 API 密钥。如果您重新生成密钥,旧密钥将立即失效。这确保了安全性,但要求您及时更新客户端。速率限制设置为每分钟 300 次请求和每个密钥 8 个并发请求。

超出这些限制将导致 HTTP 429 错误。在重试逻辑中实现指数退避。监控您的请求量以保持在限制范围内。如果您需要更高的吞吐量,请考虑将工作负载拆分到多个账户或优化您的提示大小。密钥在注册后立即显示,请妥善保管。

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://api.abliteratedllmonline.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);

排查常见的 HTTP 错误

HTTP 错误表示您的请求或服务器响应存在问题。常见错误包括 400 Bad Request(错误请求)、401 Unauthorized(未授权)和 429 Too Many Requests(请求过多)。400 错误通常意味着 JSON 格式错误或参数无效。401 错误表示 API 密钥不正确或已过期。

检查您的请求头和负载中的语法错误。验证您的 API 密钥是否正确且有效。如果收到 429 错误,请等待并使用指数退避重试。使用官方 OpenAI SDK 自动处理这些错误。它们提供清晰的错误消息和重试逻辑。这减少了开发时间并提高了可靠性。

  • 400:检查 JSON 语法和参数。
  • 401:验证 API 密钥的有效性。
  • 429:实现带有退避的重试逻辑。
curl https://api.abliteratedllmonline.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "List the python dependencies for this flask app"}]
  }'

常见问题

我可以将 abliterated 模型与标准 OpenAI SDK 一起使用吗?

是的,我们的 API 完全与 OpenAI 兼容。您只需将基础 URL 更改为 HTTPS://api.abliteratedllmonline.com/v1 并提供 API 密钥即可使用官方 OpenAI SDK。要发送的模型 ID 为 "uncensored"。这确保了与您现有代码的无缝集成。

无限制模型会拒绝内容吗?

该模型旨在对合法成人内容无限制。它不会拒绝争议性、虚构或成人内容。然而,存在硬性内容限制:涉及未成年人的性内容始终会被拒绝。这是我们要务中唯一的严格拒绝规则。

如何结合令牌使用量处理流式传输?

使用服务器发送事件 (SSE) 时,最后一个块包含 token 使用统计信息。您必须解析最后一个块以获取输入和输出 token 计数。这使您可以准确跟踪额度使用情况并相应计费。错误和拒绝是免费的,因此您只为成功的完成付费。

上下文窗口大小是多少?

上下文窗口为 100,000 个 token,包含提示词和补全内容。每次请求的最大输出为 16,000 个 token,如果不指定 max_tokens 参数,则限制为 2,048 个 token。这个大窗口支持深度对话历史和长文档处理。

获取您的 API 密钥

注册,获取密钥,并更新基础 URL。就是这样。