NL ▾
API-sleutel verkrijgen

Wu Xianzhi APIMigratiegids

Migratiegids API Gateway: van OpenAI en OpenRouter naar ongecensureerde API

Als je project momenteel OpenAI, OpenRouter of een API-gateway gebruikt en je wilt overschakelen naar een ongecensureerde API die legitieme verzoeken niet weigert, hoef je slechts drie configuraties aan te passen: base_url, sleutel en modelnaam. Deze gids verduidelijkt het verschil tussen gateways en gespecialiseerde modellen, geeft een parameteroverzicht, toont hoe je interfaces parallel draait via omgevingsvariabelen, bevat een checklist en bespreekt veelgemaakte fouten.

Laatst bijgewerkt op

Kernpunten

  1. Gateways doorverkopen vaak originele modellen met hetzelfde contentbeleid; alleen gespecialiseerde modellen lossen weigeringen op
  2. Migratie vereist drie wijzigingen: base_url naar https://api.wuxianzhiapi.com/v1,密钥,模型名 uncensored
  3. Geen ondersteuning voor embeddings, afbeeldingen, audio of fine-tuning; gebruik voor deze capaciteiten de originele service
  4. Gebruik omgevingsvariabelen voor gefaseerde invoering; bij problemen schakel je terug met één variabele

Wat is het verschil tussen een API-relay en een dedicated ongecensureerd model

Laten we eerst de begrippen helder hebben, zodat je bij migratie niet de verkeerde keuze maakt. Een API-relay verkoopt of aggregateert quota van grote modellen en biedt een OpenAI-compatible endpoint. Zo kun je met dezelfde SDK wisselen van model. Het lost 'toegang en betaling' op (één invoer, één factuur), maar het model blijft hetzelfde. De contentstrategie van de fabrikant verandert niet: onderwerpen die worden geblokkeerd, blijven geblokkeerd, ook als je een ander relay-adres gebruikt.

Een dedicated ongecensureerd model is iets anders. Het is geen doorverwijzing, maar een apart model dat legale volwassen inhoud, fictie en controversiële onderwerpen niet blokkeert. Wu Xianzhi API biedt slechts één model met de naam uncensored. De API is compatibel met OpenAI, dus migratie is eenvoudig. Maar er zijn duidelijke grenzen: alleen tekst, geen afbeeldingen, audio, vectoren of fine-tuning. Seksuele inhoud met minderjarigen wordt altijd geblokkeerd (403), ook als fictief.

Vraag je dus vooraf af: is het probleem 'instabiele toegang of hoge prijzen' of 'het model weigert steeds legitieme verzoeken'? Bij het tweede probleem is een gateway weinig zinvol; een gespecialiseerde ongecensureerde API is de oplossing. Veel teams houden beide systemen parallel: algemene taken blijven via de oude interface lopen, terwijl verzoeken om ongecensureerde output hierheen worden gerouteerd. Zie hieronder voor de implementatie.

Drie aanpassingen bij migratie van OpenAI of OpenRouter

Of je nu OpenAI, OpenRouter of een gateway gebruikt: pas bij compatibele SDKs drie dingen aan: base_url naar https://api.wuxianzhiapi.com/v1; api_key naar de sleutel van /get-api-key/; model naar uncensored. Dit is het enige model; GET /v1/models toont alleen dit.

import os
from openai import OpenAI

messages = [{"role": "user", "content": "你好"}]

# 迁移前(示意):
# client = OpenAI(api_key=os.environ["OLD_API_KEY"], base_url="旧地址")
# resp = client.chat.completions.create(model="旧模型名", messages=messages)

# 迁移后:只动 base_url、api_key、model 这三处
client = OpenAI(
    base_url="https://api.wuxianzhiapi.com/v1",
    api_key=os.environ["WUXIANZHI_API_KEY"],
)
resp = client.chat.completions.create(model="uncensored", messages=messages, max_tokens=100)
print(resp.choices[0].message.content)

Voor Node.js pas new OpenAI({...}) aan: vervang baseURL en apiKey. Bij directe HTTP: gebruik https://api.wuxianzhiapi.com/v1/chat/completions met Authorization: Bearer <sleutel>. Zie codevoorbeelden voor Python, Node.js en cURL.

curl https://api.wuxianzhiapi.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $WUXIANZHI_API_KEY" \
  -d '{"model":"uncensored","messages":[{"role":"user","content":"你好"}],"max_tokens":50}'

Parameteroverzicht: wat werkt en wat niet

De onderstaande tabel behandelt de velden die je tijdens migratie het vaakst tegenkomt. De regel is: velden gerelateerd aan chat en het OpenAI-formaat werken normaal. Functionaliteit die 'andere modellen' of 'andere modaliteiten' vereist, is hier niet beschikbaar.

Oorspronkelijk gebruikHoe te verwerken
model (bijv. diverse GPT-modellen)Moet worden aangepast naar uncensored
messages (system / user / assistant / tool)Indeling is identiek; direct gebruiken
max_tokensStandaard 2048, maximaal 32.000; bij overschrijding krijg je een 400-fout.
stream: trueOndersteund; aan het einde wordt automatisch een verbruiksblok toegevoegd
tools / tool_choiceOndersteund, OpenAI-formaat
ContextlengtePrompt plus output samen 100.000 tokens
VerzoekgrootteNiet meer dan 8 MB
Snelheidslimiet300 verzoeken per minuut per sleutel
Vector embeddingsNiet ondersteund
Afbeeldingsgeneratie / -herkenning, audio, videoNiet ondersteund; alleen tekstverwerking
Fine-tuningNiet ondersteund
Schakelen tussen meerdere modellenEr is maar één model; er is geen lijst om uit te kiezen.

Voor andere optionele velden die niet in de tabel staan, ga er niet van uit dat ze standaard op de manier van de fabrikant werken. De veilige aanpak is om ze apart te testen in een testomgeving en pas live te gaan als het gedrag aan je verwachtingen voldoet. Raadpleeg voor de exacte ondersteuning de API-documentatie.

Geen ondersteuning voor vectoren, afbeeldingen of spraak? Alternatieve aanpakken

Als je oorspronkelijke project zowel gesprekken als vectoropslag gebruikt, hoef je niet alles in één keer te migreren. Hier bieden we alleen tekstgesprekken aan, dus code voor embeddings (zoals kennisbankopslag of semantische deduplicatie) moet je bij je bestaande vectordienst houden of vervangen door een eigen vectoroplossing. Schakel alleen de gespreksfunctie over en laat de zoekfunctie staan; zo houd je de wijzigingen beperkt.

Hetzelfde geldt voor afbeeldingen en spraak. Als je product bijvoorbeeld tekst met afbeeldingen combineert, kun je de tekstgeneratie via deze API laten lopen en de afbeeldingen via je bestaande afbeeldings-API. Voor spraakuitvoer kun je de gegenereerde tekst doorsturen naar je bestaande spraakservice. Door de tekstgeneratie als een aparte functie te isoleren, blijven de wijzigingen beperkt als je later andere functies toevoegt.

Een ander scenario is dat je code meerdere modellen gebruikt voor verschillende taken, zoals een goedkoop model voor classificatie en een duur model voor creatie. Hier is er maar één model, dus ook de classificatie moet door dit model worden uitgevoerd. Het goede nieuws is dat de prijs slechts $0,25 per miljoen tokens bedraagt, dus het gebruik voor korte taken zoals classificatie is zeer goedkoop. Stel max_tokens laag in om de kosten minimaal te houden. Zie de prijspagina voor meer details.

Parallel uitvoeren: schakelen tussen twee API's via omgevingsvariabelen

Het grootste risico bij migratie is een 'alles-of-niks'-aanpak. Een veiligere aanpak is het toevoegen van een dunne wrapper in je code die via een omgevingsvariabele bepaalt welke API wordt gebruikt. Zo kun je eerst een klein deel van het verkeer of een specifieke functie via de nieuwe API laten lopen. Bij problemen hoef je slechts één variabele aan te passen om terug te schakelen. Omdat beide API's compatibel zijn met de OpenAI-formaat, is deze wrapper eenvoudig te bouwen.

import os
from openai import OpenAI

PROVIDERS = {
    "old": {
        "base_url": os.environ.get("OLD_BASE_URL", ""),
        "api_key": os.environ.get("OLD_API_KEY", ""),
        "model": os.environ.get("OLD_MODEL", ""),
    },
    "wuxianzhi": {
        "base_url": "https://api.wuxianzhiapi.com/v1",
        "api_key": os.environ.get("WUXIANZHI_API_KEY", ""),
        "model": "uncensored",
    },
}

def get_client(name=None):
    name = name or os.environ.get("LLM_PROVIDER", "old")
    cfg = PROVIDERS[name]
    return OpenAI(base_url=cfg["base_url"], api_key=cfg["api_key"]), cfg["model"]

def chat(messages, provider=None, **kwargs):
    client, model = get_client(provider)
    return client.chat.completions.create(model=model, messages=messages, **kwargs)

# 通用任务走旧接口,需要无审查输出的请求显式指定新接口
resp = chat([{"role": "user", "content": "写一个黑色幽默的短故事"}],
            provider="wuxianzhi", max_tokens=800)
print(resp.choices[0].message.content)

Je kunt op drie niveaus schakelen: op basis van de omgeving (eerst de testomgeving aanpassen), op basis van de functie (alleen de creatie-API overschakelen) of op basis van de gebruiker (graduele invoering voor een deel van de gebruikers). Ongeacht welke aanpak je kiest, behoud het provider-veld in je logs. Zo kun je bij afwijkingen eenvoudig vergelijken wat er misgaat. Bewaar ook de gespreksgeschiedenis in het standaard 'messages'-formaat, zodat een gesprek naadloos tussen beide API's kan worden voortgezet.

Migratielijst

Volg de onderstaande stappen voor je live gaat om zeker te weten dat je niets vergeet:

  1. Registreer je op /get-api-key/, haal je sleutel op en test de API met $0,50 aan proeftegoed (geldig voor 7 dagen). Je hoeft niet eerst tegoed op te waarderen.
  2. Voer curl /v1/models uit om te controleren of je sleutel geldig is en of je netwerkverbinding werkt.
  3. Zet base_url, api_key en model in omgevingsvariabelen, zodat je sleutel niet in je code repository terechtkomt.
  4. Zoek in je code naar hard-coded modelnamen, max_tokens-waarden en aanroepen van embeddings.
  5. Controleer je streaming-code en zorg dat deze omgaat met het laatste gebruiksblok waarin choices een lege array is.
  6. Voeg exponentiële back-off toe voor 429- en 503-fouten, en een duidelijke foutmelding voor 402- en 403-fouten.
  7. Voer een reeks regressietests uit met je echte prompts en controleer of de prompts die eerder werden geweigerd nu correct worden verwerkt.
  8. Begin met een kleine hoeveelheid verkeer en vergelijk het gebruik en de latentie. Breng het verkeer pas op niveau als alles naar wens werkt.
  9. Zorg ervoor dat je product is gericht op volwassen gebruikers en dat het gebruik legaal is; dit is een voorwaarde voor het gebruik van deze API.

De meest voorkomende valkuilen tijdens migratie

De modelnaam vergeten aan te passen.Als je oude code de modelnamen van gpt of een andere aggregatiedienst onveranderd doorstuurt, ontvang je een foutmelding. Zoek overal in je code naar de oude modelnamen en zorg dat je uiteindelijk uncensored verstuurt.

max_tokens overschreden.Sommige projecten stellen max_tokens hoog in (tot 32.000 of meer) om het model meer tekst te laten genereren. Bij onze API is de maximale waarde per verzoek 32.000; bij overschrijding ontvang je een 400-fout. Houd er ook rekening mee dat de som van je prompt en max_tokens niet meer dan 100.000 tokens mag beslaan. Verlaag bij lange prompts de output-limiet.

Streaming-gebruiksblokken.Aan het einde van een streaming-antwoord voegt de server automatisch een blok toe met usage. In dit blok is choices een lege array. Als je code probeert direct toegang te krijgen via chunk.choices[0], krijg je een foutmelding in de laatste stap. Sommige oudere code verstuurt ook handmatig stream_options om gebruik te registreren; dat is bij onze API niet nodig.

'Uncensored' betekent niet 'zonder grenzen'.Legale volwassen inhoud, fictie en controversiële onderwerpen worden niet geweigerd, maar seksuele inhoud met minderjarigen wordt altijd geblokkeerd (ook in fictie en roleplay). Je ontvangt dan een 403-fout met content_blocked. Het is aan het product om de leeftijdsgrens voor volwassenen goed te bewaken.

Saldo en verloop van proeftegoed.Het proeftegoed vervalt na 7 dagen. Als je saldo op is, ontvang je een 402-fout met de foutcode no_credit. Vertaal deze fout in je applicatie naar een begrijpelijke boodschap voor de gebruiker, in plaats van een vage 'systeemfout'. Voor voorbeelden van hoe je dit in je applicatie kunt inrichten, zie gebruiksvoorbeelden.

Veelgestelde vragen

Moet ik mijn prompts na de migratie herschrijven?

Het formaat hoeft niet te worden aangepast; de 'messages'-structuur is identiek. Je kunt echter de 'jailbreak'-achtige inleidingen die je eerder gebruikte om afwijzingen te omzeilen, verwijderen. Geef de rol en de taak direct en duidelijk op. Dat bespaart tokens en levert stabielere resultaten op.

Kan ik tijdens de migratie beide API's naast elkaar gebruiken?

Ja, en dat raden we zelfs aan. Gebruik omgevingsvariabelen om de base_url, de sleutel en de modelnaam te bepalen. Zo kun je eerst een deel van de functies of gebruikers naar de nieuwe API sturen. Bij problemen hoef je slechts één variabele aan te passen om terug te schakelen.

Wat gebeurt er als ik embeddings-aanroepen van de oude API overschakel?

We hebben geen embeddings-API; een aanroep daarvoor levert een 404-fout op. Gebruik voor vectoropslag je bestaande service en schakel alleen de gespreksaanroepen over.

Hoe weet ik of de migratie het resultaat heeft verbeterd?

Voer regressietests uit met een set echte prompts die eerder werden geweigerd of aangepast. Noteer het percentage afwijzingen, de lengte van de antwoorden en het tokengebruik. Gebruik hiervoor samples uit je eigen bedrijfscontext, niet uit algemene testsets van internet.

Vul het formulier in om je sleutel te ontvangen

Maak een account aan, kopieer je sleutel en pas de Base URL aan. Zo eenvoudig is het instellen.

API-sleutel verkrijgen