なぜ JSON 応答がバリデーションに失敗するのか
モデルがコードブロックの外に会話テキストを追加すると、JSONパーシングに失敗します。Uncensoredモデルは自然な言語の流れを優先するため、生データの前または後に「Here is the JSON」などのテキストを追加することがよくあります。これはオブジェクトのみを期待する厳格なパーサーを壊します。
を使用 response_format パラメータが {"type": "json_object"}これはモデルに有効なJSONのみを出力させることを強制します。これにより、コード内の正規表現クリーンアップスクリプトの必要性がなくなります。ただし、モデルが制約されるため、リクエストあたりのトークン消費量が増加することに注意してください。
- 設定
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);
Uncensored モデルにおける関数呼び出しのエラー
関数呼び出しは、モデルがツール定義を無視するか無効な引数を返す場合に失敗します。Uncensored モデルは厳密なツール使用よりも創造的な応答を優先することがあります。スキーマに存在しないパラメータを幻視するかもしれません。
ツールを明確に定義する 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処理
Server-Sent Events (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出力に影響を与えるTemperature設定
Temperatureはモデルの出力のランダム性を制御します。0.8や0.9のような高い値は創造性と予測不可能性を高めます。0.2のような低い値は、出力をより決定論的で集中させます。NSFWロールプレイでは、高いTemperatureはより多様で激しい応答を生成します。
適切なバランスを見つけるために異なる値を試してください。温度が高すぎると一貫性のないまたは反復的なテキストになる可能性があります。温度が低すぎるとロボット的または単調な会話になる可能性があります。望ましいトーンと一貫性に基づいて調整してください。Uncensoredモデルは高い創造性設定に良く反応します。
- クリエイティブなロールプレイには0.7-0.9を使用します。
- 事実やコーディングタスクには0.2-0.5を使用します。
- 調整しながら出力品質を監視します。
ロールプレイ生成におけるTop Pと多様性
Top P(核サンプリング)は、モデルが確率質量の上位パーセントのみを考慮するように制限します。これは温度と組み合わせて多様性を制御します。低いTop P値は出力をより予測可能にします。高い値はより多様な語彙選択を可能にします。
Top PとTemperatureを組み合わせることで、きめ細かい制御が可能です。例えば、高いTemperatureと低い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)
トークン制限とコストの理解
トークン使用量はプリペイド残高に直接影響します。APIは入力トークン100万トークンあたり$0.15、出力トークン100万トークンあたり$0.50を課金します。出力トークンはモデルの作業を表すため、より高価です。ストリーミングはコストを変更せず、生成されたすべてのトークンに対して課金されます。
予期せぬ課金を避けるためにトークン使用量を監視してください。最終的なSSEチャンクには正確なトークン数が含まれます。これを使用して、ローカルの残高や請求ダッシュボードを更新してください。エラーや拒否は無料なので、成功した完了に対してのみ課金されます。この従量制モデルにより、過剰な課金を防ぐことができます。
- 入力トークンは100万トークンあたり$0.15です。
- 出力トークンは百万トークンあたり$0.50です。
- 拒否とエラーは無料です。
APIキーの置換とレートリミット
各アカウントでは一度に1つのアクティブなAPIキーのみが許可されます。キーを再生成すると、古いキーはすぐに無効になります。これによりセキュリティが確保されますが、クライアントを迅速に更新する必要があります。レート制限は、1分あたり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を使用してこれらのエラーを自動的に処理してください。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"}]
}'