Dlaczego twoja odpowiedź JSON nie przechodzi walidacji
Parsowanie JSON kończy się niepowodzeniem, gdy model dołącza tekst konwersacyjny poza blokiem kodu. Modele uncensored priorytetyzują naturalny przepływ języka, więc często dodają "Oto JSON" przed lub po surowych danych. Łamie to ścisłe parsowniki oczekujące tylko obiektu.
Korzystaj z response_format parametr ustawiony na {"type": "json_object"}.To wymusza od modelu zwracanie wyłącznie poprawnego formatu JSON. Eliminuje to potrzebę skryptów do czyszczenia danych za pomocą wyrażeń regularnych w Twoim kodzie. Należy jednak pamiętać, że zużywa to więcej tokenów na żądanie, ponieważ model jest ograniczony.
- Ustaw
response_formatdojson_objectw ciele żądania. - Upewnij się, że Twój prompt systemowy wyraźnie żąda wyjścia w formacie JSON.
- Obsługuj przecinki końcowe lub drobne błędy składniowe z gracją, jeśli model się pomyli.
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)
Poprawna obsługa limitów okna kontekstu
Twój kontekst mieści 100 000 tokenów łącznie, zarówno wejście, jak i wyjście. Jeśli wyślesz długą historię, musisz zmniejszyć maksymalną długość odpowiedzi. Domyślny limit max output wynosi 2048 tokenów, chyba że określisz inaczej.
Oblicz pozostałe tokeny, odejmując rozmiar wejścia od 100,000. Jeśli prowadzisz roleplay, zachowaj systemowy prompt zwięzły. Przechowuj tylko najnowsze zwroty rozmowy w żądaniu API. Starszy kontekst można podsumować lub uciąć. Zapobiegnie to przekroczeniu twardego limitu w trakcie generowania.
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);
Błędy wywoływania funkcji w modelach uncensored
Wywoływanie funkcji nie powiedzie się, gdy model zignoruje definicje narzędzi lub zwróci nieprawidłowe argumenty. Modele uncensored mogą priorytetyzować kreatywne odpowiedzi nad ścisłe korzystanie z narzędzi. Mogą zhalucynować parametry, które nie istnieją w Twoim schemacie.
Zdefiniuj swoje narzędzia jasno w tools tablicy. Użyj tool_choice aby wymusić konkretne zachowanie. Jeśli model odmówi wywołania narzędzia, sprawdź swój prompt systemowy pod kątem sprzecznych instrukcji. Upewnij się, że nazwy i opisy narzędzi są niejednoznaczne. Przetestuj najpierw prostymi zapytaniami, aby zweryfikować integrację.
- Podaj jasne nazwy narzędzi i ich opisy.
- Użyj
tool_choicekontrolować wywoływanie. - Zweryfikuj argumenty względem swojego schematu przed wykonaniem.
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"}]
}'
Przerwania strumieniowania i obsługa SSE
Strumieniowanie przez zdarzenia wysłane przez serwer (SSE) może tracić tokeny, jeśli klient rozłączy się lub wystąpią drobne problemy z siecią. Ostatni czat zawiera statystyki użycia tokenów. Musisz przeanalizować ten czat, aby uzyskać liczniki wejścia i wyjścia.
Wdróż solidnego klienta SSE, który obsługuje logikę ponownego łączenia. Nie zakładaj, że każdy fragment zawiera dane. Niektóre fragmenty mogą być puste lub zawierać tylko spacje. Przetwarzaj ostatni fragment, aby zaktualizować saldo kredytów lub liczniki tokenów. Zapewnia to dokładne rozliczanie i śledzenie zużycia.
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)
Ustawienia temperatury wpływające na treści NSFW
Temperatura kontroluje losowość wyjścia modelu. Wyższe wartości, takie jak 0,8 lub 0,9, zwiększają kreatywność i nieprzewidywalność. Niższe wartości, takie jak 0,2, sprawiają, że wyjście jest bardziej deterministyczne i skupione. W przypadku odgrywania ról NSFW wyższe temperatury generują bardziej zróżnicowane i intensywne odpowiedzi.
Eksperymentuj z różnymi wartościami, aby znaleźć odpowiedni balans. Zbyt wysoka temperatura może prowadzić do niespójnego lub powtarzalnego tekstu. Zbyt niska temperatura może skutkować robotycznym lub mdłym dialogiem. Dostosuj w zależności od pożądanego tonu i spójności. Model bez cenzury dobrze reaguje na wyższe ustawienia kreatywności.
- Użyj 0.7-0.9 do kreatywnego odgrywania ról.
- Użyj 0.2-0.5 do zadań faktualnych lub kodowania.
- Monitoruj jakość outputu podczas dostosowywania.
Top P i różnorodność w generowaniu roleplay
Top P (probkowanie jądra) ogranicza model do rozważania tylko najwyższego procentu masy prawdopodobieństwa. Działa z temperaturą, aby kontrolować różnorodność. Niska wartość Top P sprawia, że wyjście jest bardziej przewidywalne. Wysoka wartość pozwala na większą różnorodność wyborów słów.
Połącz Top P z temperaturą dla precyzyjnej kontroli. Na przykład, wysoka temperatura przy niskim Top P może wygenerować twórczy, ale skupiony tekst. Jest to przydatne do zachowania głosu postaci przy jednoczesnym pozwalaniu na spontaniczne działania. Przetestuj różne kombinacje, aby dopasować je do swojego stylu narracji.
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)
Zrozumienie limitów i kosztów tokenów
Zużycie tokenów bezpośrednio wpływa na Twój kredyt z góry opłacony. API pobiera $0.15 za milion tokenów wejściowych i $0.50 za milion tokenów wyjściowych. Tokeny wyjściowe są droższe, ponieważ reprezentują pracę modelu. Strumieniowanie nie zmienia kosztu; płacisz za wszystkie wygenerowane tokeny.
Monitoruj zużycie tokenów, aby uniknąć nieoczekiwanych opłat. Ostatni fragment SSE zawiera dokładną liczbę tokenów. Użyj tych danych do zaktualizowania lokalnego salda lub panelu rozliczeniowego. Błędy i odrzucenia są darmowe, więc płacisz tylko za pomyślne uzupełnienia. Ta model oparty na zużyciu zapewnia, że nigdy nie zapłacisz za dużo.
- Tokeny wejściowe kosztują $0.15 za milion.
- Tokeny wyjściowe kosztują $0,50 za milion.
- Odmowy i błędy są darmowe.
Zastąpienie klucza API i limity szybkości
Każde konto pozwala na tylko jeden aktywny klucz API. Jeśli zregenerujesz swój klucz, stary staje się nieprawidłowy natychmiast. Gwarantuje to bezpieczeństwo, ale wymaga od Ciebie szybkiej aktualizacji klientów. Limity szybkości wynoszą 300 żądań na minutę i 8 żądań równoległych na klucz.
Przekroczenie tych limitów powoduje błędy HTTP 429. Zaimplementuj wykładnicze opóźnienie ponawiania w swojej logice ponawiania. Monitoruj objętość żądań, aby utrzymać się w granicach. Jeśli potrzebujesz wyższej przepustowości, rozważ podzielenie obciążenia między wiele kont lub optymalizację rozmiarów promptów. Klucz jest wyświetlany natychmiast po rejestracji, więc przechowuj go bezpiecznie.
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);
Rozwiązywanie powszechnych błędów HTTP
Błędy HTTP wskazują na problemy z Twoim żądaniem lub odpowiedzią serwera. Powszechne błędy to 400 Bad Request, 401 Unauthorized i 429 Too Many Requests. Błąd 400 często oznacza niepoprawny JSON lub nieprawidłowe parametry. Błąd 401 oznacza nieprawidłowy lub wygasły klucz API.
Sprawdź nagłówki żądania i ładunek pod kątem błędów składniowych. Zweryfikuj, czy Twój klucz API jest poprawny i aktywny. Jeśli otrzymasz błąd 429, poczekaj i spróbuj ponownie z wykładniczym opóźnieniem. Użyj oficjalnych SDK OpenAI, aby automatycznie obsługiwać te błędy. Zapewniają one jasne komunikaty o błędach i logikę ponownych prób. To skraca czas rozwoju i poprawia niezawodność.
- 400: Sprawdź składnię JSON i parametry.
- 401: Zweryfikuj ważność klucza API.
- 429: Zaimplementuj logikę ponownych prób z backoffem.
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"}]
}'