为何你的 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"}]
}'