NsfwAiApi/Handleiding
Beste lokale LLM voor rollenspel of een gehoste API?
De beste lokale LLM voor rollenspel is het grootste ongecensureerde model dat je GPU aankan met een aanvaardbare kwaliteit, en dat antwoord verandert elke paar maanden. Als je de hardware liever overslaat, geeft een gehost endpoint dezelfde chatworkflow met één URL-aanpassing.

Lokaal of gehost: de snelle beslissing
Kies lokaal als je al een krachtige GPU hebt, alles offline wilt, of modellen wilt afstellen. Kies gehost als je lange geheugen in een verhaal wilt, je een laptop of telefoon gebruikt, of liever minuten dan weekenden aan de setup besteedt. Veel mensen doen beide: een lokaal model voor privé-experimenten en een gehost model voor lange campagnes.
| Factor | Lokaal model | Gehoste API |
|---|---|---|
| Kostemodel | Hardware en stroom, geen kosten per token | Betaal per token van prepaid credit |
| Modelgrootte | Beperkt door je GPU-geheugen | Wat de provider ook draait |
| Contextlengte | Beperkt door geheugen, omdat langer context meer ervan nodig heeft | 100.000 tokens hier |
| Privacy | Niets verlaat je machine | Prompts reizen naar de provider; hier worden ze niet gebruikt voor training |
| Instellen | Runtime, weights, kwantisering, updates | Een base URL en een sleutel |
| Werkt op elk apparaat | Alleen als je je eigen machine blootstelt | Ja |
Wat bepaalt eigenlijk het beste lokale model
Ranglijsten van de beste lokale LLM voor rollenspel vervagen snel, en geen enkele naam is voor iedereen goed. Beoordeel kandidaten op basis van dingen die in een echte sessie naar voren komen.
- Weigergedrag. Veel base- en instructiemodellen zijn afgestemd op het weigeren van bepaalde thema's. Modellen die zijn afgestemd op fictie of als ongecensureerd zijn gemarkeerd, weigeren meestal minder, maar de kwaliteit varieert, dus test ze op je eigen scènes.
- Blijf in karakter. Houd in de gaten of een model afdrijft naar het narreren van je personageacties, dezelfde zinnen herhaalt bij elke beurt of vergeet wie er in de kamer staat.
- Prozakwaliteit. Lees tien antwoorden achter elkaar. Sommige modellen zijn prima voor één beurt, maar vermoeiend bij het tiende.
- Contextafhandeling. Een model kan een lang venster adverteren en toch details uit het midden verliezen. Voer een test uit waarbij een feit uit het begin van de chat later van belang is.
- Grootte en kwantisering. Een groter model dat in zware kwantisering is geperst, kan meer verliezen dan een kleiner model dat met hogere precisie draait. Vergelijk, neem niet aan.
De community-threads en modelkaarten voor de runtime die je gebruikt, zijn de juiste plek voor actuele aanbevelingen. Download twee of drie kandidaten, draai dezelfde scène op elk en houd degene die je wilt laten doorgaan met het verhaal.
Waar lokale modellen op hun limiet stoten
De muur die de meeste rollenspelers tegenkomen, is geheugen, en die komt op twee plekken. De eerste is het model zelf: een groter model schrijft beter, maar heeft meer GPU-geheugen nodig. De tweede is context. Elk bericht in een lang verhaal wordt opnieuw verzonden bij elke nieuwe beurt, en de cache die het vasthoudt, groeit ook met de lengte, dus een lange campagne kan een GPU verpletteren die korte chats prima aankan.
De gebruikelijke workarounds zijn het samenvatten van oude beurten, het gebruiken van lorebooks die alleen relevante feiten injecteren, en het verlagen van de contextgrootte. Ze werken, en ze zijn ook werk. Een gehost endpoint met een venster van 100.000 tokens laat je veel meer van het verhaal in plat zicht houden, wat past bij lange campagnes, gedeelde werelden met veel personages en verhalen die weken duren.
Het compromis is de kosten, dus het helpt om ze te meten. Stel dat een chat 30.000 tokens aan geschiedenis heeft en het model schrijft 300 tokens per antwoord. Één beurt kost 30.000 invoertokens tegen $0,15 per 1M, wat $0,0045 is, plus 300 uitvoertokens tegen $0,50 per 1M, wat $0,00015 is. Dat is $0,00465 per beurt, of $0,465 voor 100 beurten. Een lange avond spelen kost minder dan een dollar. De prijzenpagina geeft de tarieven en de bonusniveaus voor hogere opwaarderingen weer.
Een werkende gehoste setup in Python
Het endpoint is OpenAI-compatible, dus het officiële openai-pakket werkt ongewijzigd, behalve voor de base URL en sleutel. De model-ID is uncensored. Haal eerst een sleutel op van de API-sleutelpagina; nieuwe accounts kunnen daar met één klik $0,50 gratis proeftegoed claimen, zonder dat betalingsgegevens nodig zijn.
Dit script houdt een lopende geschiedenis bij, streamt het antwoord en knipt oude beurten bij zodat de prompt klein blijft. De systeem prompt is het deel dat je tijd waard is: het stelt de setting, de regels en de stijl vast.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.nsfwaiapi.com/v1",
api_key=os.environ["NSFWAIAPI_KEY"],
)
SYSTEM = '''You are the narrator and all non-player characters in an adult fiction roleplay.
Setting: a rain-soaked port city, late autumn, gaslight and smuggler politics.
Rules:
- Write in third person, past tense, 2 to 4 short paragraphs per reply.
- Never write the player's actions, words or thoughts. Stop where the player decides.
- Keep each character's voice and goals consistent. Track who is present in the scene.
- All characters are adults. Do not write sexual content involving minors under any circumstances.
- Stay in the story. No disclaimers or out-of-character commentary unless the player asks with (OOC).'''
history = [{"role": "system", "content": SYSTEM}]
MAX_TURNS = 40 # keep the last 40 messages besides the system prompt
def say(user_text):
history.append({"role": "user", "content": user_text})
trimmed = [history[0]] + history[1:][-MAX_TURNS:]
stream = client.chat.completions.create(
model="uncensored",
messages=trimmed,
temperature=0.9,
top_p=0.95,
frequency_penalty=0.3,
max_tokens=600,
stream=True,
)
reply = ""
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
piece = chunk.choices[0].delta.content
reply += piece
print(piece, end="", flush=True)
print()
history.append({"role": "assistant", "content": reply})
say("I push open the door of the Gull and Anchor and look for the harbor master.")
Omdat het venster 100.000 tokens is, kun je MAX_TURNS veel verhogen voordat trimmen belangrijk wordt. Trimmen is nog steeds een goede gewoonte: kortere prompts kosten minder en houden het model gefocust op recente gebeurtenissen.
Client-instellingen voor SillyTavern en vergelijkbare apps
De meeste rollenspel-frontendapps hebben een verbindingsscherm voor een OpenAI-compatible of aangepaste chatcompletie-bron. SillyTavern laat je bijvoorbeeld een OpenAI-compatible endpoint toevoegen. De velden zijn overal hetzelfde:
- Base- of endpoint-URL:
https://api.nsfwaiapi.com/v1. Sommige apps willen het volledige pad dat eindigt in/chat/completions; als de app om een base vraagt, stop dan bij/v1. - API-sleutel: je sleutel, verzonden als een bearer token.
- Model:
uncensored. Als de app een modellijst kan ophalen, kan hetGET /v1/modelsaanroepen. - Streaming: aan. Antwoorden verschijnen terwijl ze worden geschreven, en de app kan vroegtijdig stoppen als je de richting niet leuk vindt.
Voor sampling past een temperatuur rond 0,8 tot 1,0 bij narratieve tekst, met top_p rond 0,95. Een kleine frequentie- of aanwezigheidsstraf vermindert de herhalende zinnen die lange chats vaak verzamelen. Verhoog de straf alleen als je herhaling ziet, omdat hoge waarden proza vreemd vermijdend maken. Stop-reeksen worden doorgegeven, dus het toevoegen van de spelersnaam gevolgd door een dubbele punt als stopstring helpt als een model probeert voor je te spreken. Stel de contextgrootte van de app in op wat je wilt betalen; je hoeft niet alle 100.000 tokens in te vullen.
Houd rekening met concurrency als je meerdere chat-tabbladen of een bot voor vrienden draait. Een volledige sleutel staat 8 gelijktijdige verzoeken en 300 per minuut toe, en een proefsleutel staat 2 en 60 toe. Een gestreamd antwoord houdt zijn slot vast tot de stream eindigt, dus een vastzittend tabblad kan een slot opeisen. De docs geven de limieten en de response headers, waaronder X-Balance-USD, dat je resterende tegoed toont.
Een kleine routine om lange verhalen gezond te houden
Lange rollenspel-sessies lopen op voorspelbare manieren fout, en een paar gewoontes voorkomen het meeste. Schrijf elke 20 of 30 beurten een korte samenvatting van het verhaal en houd deze bovenaan de prompt, na het systeembericht. Werk deze handmatig bij of vraag het model om hem te genereren, en controleer of namen, plaatsen en beloften overeind zijn gebleven. Zet de feiten die nooit mogen worden vergeten, zoals relaties en openstaande verhaallijnen, vast in het systeembericht zelf.
Als een antwoord in een richting gaat die je niet leuk vindt, regeneer het dan in plaats van erover te discussiëren in de chat. Discussies vervuilen de geschiedenis en leren het model dat de scène over de discussie gaat. Als je echt wilt sturen, voeg dan één duidelijke regel toe in haakjes, zoals een opmerking over de stemming van de volgende scène, en laat het volgende antwoord het dragen. Houd personagenamen consistent en geef elk niet-spelerpersonage een eenregelige stemnotitie, omdat modellen personages die op elkaar lijken, vervagen.
Eerlijke limieten van dit model
Het is één open-weight model, gedraaid door een onafhankelijke provider en afgestemd om te antwoorden zonder inhoudelijke weigeringen voor wettelijk volwassen gebruik. Het is niet de officiële API van een modelleverancier en geen router over meerdere modellen. Je kunt niet kiezen tussen modellen, en je mag niet verwachten dat het bij elke taak de beste gesloten modellen evenaart.
Het genereert alleen tekst. Er zijn geen afbeeldingen voor je personages, geen stem en geen embeddings voor een lorebook-zoekopdracht, dus als je portretten of spraak wilt, moet je voor elk een aparte service toevoegen. Er is ook geen fine-tuning. De kwaliteit hangt ook af van je prompt: een vaag systeem prompt geeft vage fictie, en een goed personageprofiel met voorbeelddialogen doet meer dan elke samplingaanpassing.
Er is één regel vast. Seksuele inhoud met minderjarigen is niet toegestaan, en een setup die dit probeert te produceren, wordt niet ondersteund. Houd personages volwassen en zorg dat je gebruik wettelijk is. Voor fictie, companion-apps en karakterchat voor volwassenen is de combinatie van minder afwijzingen en een lang venster het nuttige deel.
Meer handleidingen
Vragen en antwoorden
Is een lokale LLM beter dan een gehoste API voor roleplay?
Geen van beide is overal beter. Lokaal geeft je offline privacy en geen kosten per token, terwijl gehost een langer contextvenster biedt en geen hardwarelimieten. Veel mensen gebruiken beide.
Kan ik SillyTavern met deze API gebruiken?
Ja. SillyTavern en vergelijkbare apps accepteren een OpenAI-compatible endpoint. Voer https://api.nsfwaiapi.com/v1 in als URL, je sleutel en de model-ID uncensored.
Hoeveel context kan een rollenspel-sessie gebruiken?
Het contextvenster is 100.000 tokens, tellend de prompt en het antwoord samen. Lange chats kosten meer omdat de geschiedenis bij elke beurt wordt verzonden.
Genereert het afbeeldingen of stemmen voor mijn personages?
Nee. De service is alleen tekst, zonder afbeelding-, audio- of videogeneratie en zonder embeddings.
Je sleutel is nog maar één formulier verwijderd
Maak een account aan, kopieer de sleutel, pas de base URL aan. Dat is de hele setup.
API-sleutel ophalenNsfwAiApiOngecensureerde LLM API voor NSFW-tekstgeneratie