Warum deine JSON-Antwort die Validierung fehlschlägt
Das JSON-Parsing schlägt fehl, wenn das Modell konversationellen Text außerhalb des Code-Blocks anhängt. Uncensored-Modelle priorisieren den natürlichen Sprachfluss, daher fügen sie oft "Hier ist das JSON" vor oder nach den Rohdaten hinzu. Dies bricht strenge Parser, die nur das Objekt erwarten.
Nutzen Sie die response_format Parameter auf {"type": "json_object"}. Dies zwingt das Modell, nur gültiges JSON auszugeben. Es eliminiert die Notwendigkeit von Regex-Bereinigungsskripten in Ihrem Code. Beachten Sie jedoch, dass dies mehr Tokens pro Anfrage verbraucht, da das Modell eingeschränkt ist.
- Festlegen
response_formatzujson_objectin Ihrem Anfrage-Payload. - Stellen Sie sicher, dass Ihr System-Prompt explizit JSON-Ausgabe anfordert.
- Verarbeiten Sie nachgestellte Kommas oder kleinere Syntaxfehler gracefully, wenn das Modell ausrutscht.
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)
Context-Fenster-Limits korrekt handhaben
Ihr Kontextfenster fasst 100.000 Tokens insgesamt zusammen, sowohl Eingabe als auch Ausgabe. Wenn Sie einen langen Verlauf senden, müssen Sie die maximale Ausgabelänge reduzieren. Die Standard-Ausgabe ist auf 2.048 Tokens begrenzt, es sei denn, Sie geben etwas anderes an.
Berechnen Sie Ihre verbleibenden Tokens, indem Sie Ihre Eingabegröße von 100.000 abziehen. Wenn Sie Rollenspiel machen, halten Sie den Systemprompt kompakt. Speichern Sie nur aktuelle Gesprächsabschnitte in der API-Anfrage. Älterer Kontext kann zusammengefasst oder abgeschnitten werden. Dies verhindert, dass Sie während der Generierung das harte Limit erreichen.
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);
Fehler beim Funktionsaufruf mit Uncensored-Modellen
Funktionsaufrufe schlagen fehl, wenn das Modell die Tool-Definitionen ignoriert oder ungültige Argumente zurückgibt. Uncensored-Modelle priorisieren möglicherweise kreative Antworten vor der strikten Tool-Nutzung. Sie könnten Parameter hallucinieren, die nicht in Ihrem Schema existieren.
Definieren Sie Ihre Tools klar in der tools array. Verwenden Sie tool_choice spezifisches Verhalten zu erzwingen. Wenn das Modell sich weigert, ein Tool aufzurufen, überprüfen Sie Ihre System-Prompt auf widersprüchliche Anweisungen. Stellen Sie sicher, dass die Tool-Namen und -Beschreibungen eindeutig sind. Testen Sie zunächst mit einfachen Abfragen, um die Integration zu überprüfen.
- Geben Sie klare Tool-Namen und Beschreibungen an.
- Verwenden
tool_choiceden Aufruf zu steuern. - Argumente vor der Ausführung gegen Ihr Schema validieren.
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"}]
}'
Streaming-Unterbrechungen und SSE-Handhabung
Beim Streaming über Server-Sent Events (SSE) können Tokens verloren gehen, wenn der Client die Verbindung unterbricht oder es zu Netzwerkproblemen kommt. Das letzte Chunk enthält die Token-Nutzungsstatistiken. Sie müssen dieses Chunk parsen, um die Eingabe- und Ausgabemengen zu erhalten.
Implementieren Sie einen robusten SSE-Client, der Logik für Wiederherbindungen behandelt. Gehen Sie nicht davon aus, dass jedes Segment Daten enthält. Einige Segmente könnten leer sein oder nur Leerzeichen enthalten. Verarbeiten Sie das letzte Segment, um Ihren Guthabenstand oder Token-Zähler zu aktualisieren. Dies gewährleistet eine genaue Abrechnung und Nutzungsverfolgung.
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)
Temperatureinstellungen, die NSFW-Ausgaben beeinflussen
Temperatur steuert die Zufälligkeit der Modellausgabe. Höhere Werte wie 0,8 oder 0,9 erhöhen Kreativität und Unvorhersehbarkeit. Niedrigere Werte wie 0,2 machen die Ausgabe deterministischer und fokussierter. Für NSFW-Rollenspiele erzeugen höhere Temperaturen abwechslungsreichere und intensivere Antworten.
Experimentiere mit verschiedenen Werten, um das richtige Gleichgewicht zu finden. Eine zu hohe Temperatur kann zu unzusammenhängendem oder repetitivem Text führen. Eine zu niedrige Temperatur kann zu roboterhaftem oder langweiligem Dialog führen. Passe basierend auf dem gewünschten Ton und der Konsistenz an. Das unzensierte Modell reagiert gut auf höhere Kreativitätseinstellungen.
- Verwenden Sie 0.7-0.9 für kreatives Rollenspiel.
- Verwenden Sie 0.2-0.5 für faktische oder Codierungsaufgaben.
- Überwachen Sie die Ausgabequalität bei Anpassungen.
Top P und Vielfalt in der Rollenspiel-Generierung
Top P (Nukleus-Sampling) beschränkt das Modell darauf, nur den prozentualen Anteil der höchsten Wahrscheinlichkeitsmasse zu berücksichtigen. Es funktioniert mit der Temperatur, um die Vielfalt zu steuern. Ein niedriger Top P-Wert macht die Ausgabe vorhersehbarer. Ein hoher Wert ermöglicht vielfältigere Wortwahl.
Kombinieren Sie Top P mit Temperatur für eine feine Granularität der Kontrolle. Zum Beispiel kann eine hohe Temperatur mit einem niedrigen Top P kreativen, aber fokussierten Text erzeugen. Dies ist nützlich, um die Charakterstimme beizubehalten und gleichzeitig spontane Aktionen zu ermöglichen. Testen Sie verschiedene Kombinationen, um sie an Ihren Erzählstil anzupassen.
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-Limits und Kosten verstehen
Die Token-Nutzung wirkt sich direkt auf Ihr Prepaid-Guthaben aus. Die API berechnet $0.15 pro Million Eingabetokens und $0.50 pro Million Ausgabetokens. Ausgabetokens sind teurer, da sie die Arbeit des Modells darstellen. Streaming ändert die Kosten nicht; Sie zahlen für alle generierten Tokens.
Überwachen Sie Ihre Token-Nutzung, um unerwartete Gebühren zu vermeiden. Das letzte SSE-Chunk enthält die genaue Token-Anzahl. Verwenden Sie diese Angabe, um Ihr lokales Guthaben oder Ihr Abrechnungsdashboard zu aktualisieren. Fehler und Ablehnungen sind kostenlos, Sie zahlen also nur für erfolgreiche Vervollständigungen. Dieses Pay-as-you-go-Modell stellt sicher, dass Sie nie zu viel bezahlen.
- Eingabetokens kosten 0,15 $ pro Million.
- Ausgabetokens kosten $0,50 pro Million.
- Verweigerungen und Fehler sind kostenlos.
API-Schlüssel-Ersetzung und Ratenbegrenzungen
Jedes Konto erlaubt zu jedem Zeitpunkt nur einen aktiven API-Schlüssel. Wenn Sie Ihren Schlüssel neu generieren, wird der alte sofort ungültig. Dies gewährleistet Sicherheit, erfordert jedoch, dass Sie Ihre Clients zeitnah aktualisieren. Die Ratenlimits sind auf 300 Anfragen pro Minute und 8 gleichzeitige Anfragen pro Schlüssel festgelegt.
Das Überschreiten dieser Grenzen führt zu HTTP 429-Fehlern. Implementieren Sie exponentielles Backoff in Ihrer Wiederholungslogik. Überwachen Sie Ihr Anfragevolumen, um innerhalb der Grenzen zu bleiben. Wenn Sie einen höheren Durchsatz benötigen, erwägen Sie die Aufteilung Ihrer Workloads auf mehrere Konten oder die Optimierung Ihrer Prompt-Größen. Der Schlüssel wird sofort nach der Anmeldung angezeigt, also bewahren Sie ihn sicher auf.
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);
Fehlerbehebung bei häufigen HTTP-Fehlern
HTTP-Fehler deuten auf Probleme mit Ihrer Anfrage oder der Serverantwort hin. Häufige Fehler sind 400 Bad Request, 401 Unauthorized und 429 Too Many Requests. Ein 400-Fehler bedeutet oft fehlerhaftes JSON oder ungültige Parameter. Ein 401-Fehler zeigt einen falschen oder abgelaufenen API-Schlüssel an.
Überprüfen Sie Ihre Request-Header und Payload auf Syntaxfehler. Stellen Sie sicher, dass Ihr API-Schlüssel korrekt und aktiv ist. Wenn Sie einen 429-Fehler erhalten, warten Sie und versuchen Sie es mit exponentiellem Backoff erneut. Verwenden Sie die offiziellen OpenAI-SDKs, um diese Fehler automatisch zu behandeln. Sie bieten klare Fehlermeldungen und Wiederholungslogik. Dies reduziert die Entwicklungszeit und verbessert die Zuverlässigkeit.
- 400: Überprüfen Sie die JSON-Syntax und die Parameter.
- 401: Überprüfen Sie die Gültigkeit des API-Schlüssels.
- 429: Implementieren Sie Wiederholungslogik mit Backoff.
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"}]
}'