PL ▾
Pobierz klucz API

Koder AI bez filtrów: Użycie w Cursor i Pythonie

Niektóre żądania kodu otrzymują odrzucenie lub etykietę ostrzegawczą od asystentów mainstreamowych: narzędzia bezpieczeństwa, skrapery, inżynieria wsteczna, opisy exploitów do Twojego własnego laboratorium. Oto jak podłączyć model bez cenzury do edytora i skryptów oraz czego się spodziewać.

Zaktualizowano

Izometryczny terminal z blokami kodu płynącymi do połączonych sześcianów, ilustrujący API do programowania bez cenzury

Kluczowe punkty

  • Endpoint obsługuje format czatu OpenAI, więc edytory i frameworki akceptujące niestandardowy adres bazowy mogą go używać.
  • Wywoływanie funkcji, tryb JSON i strumieniowanie są obsługiwane, co pokrywa większość wzorców agentów kodujących.
  • Okno 100 000 tokenów mieści dużą część repozytorium w jednym zapytaniu.
  • To model ogólnego przeznaczenia, a nie specjalizowany do kodu, więc przetestuj go najpierw na własnych zadaniach.

Czym jest koder bez filtrów, a czym nie

Koder AI bez filtrów to model językowy, który odpowiada na żądania programistyczne bez zastanawiania się nad Twoimi motywami. Jeśli piszesz skaner portów dla sieci, którą posiadasz, dekompilujesz starszy binarny plik, dla którego utraciłeś źródło, lub budujesz skrypt pobierający dane, który imituje przeglądarkę, otrzymujesz kod zamiast akapitu o odpowiedzialnym użytkowaniu.

Warto być precyzyjnym co do tego, czym jest ta usługa. To jeden model o otwartych wagach, dostrojony do odpowiadania bez odrzuceń treści dla prawnego użytku dorosłych, uruchomiony przez niezależnego dostawcę. Nie jest to oficjalne API żadnego dużego dostawcy i nie jest to router wybierający między modelami. ID modelu to uncensored. Nie ma tu roszczeń co do wyników benchmarków, ponieważ nie są one publikowane dla tego modelu na tej stronie. Model z mniejszą liczbą odrzuceń nie jest automatycznie lepszym programistą, więc traktuj pierwszy tydzień jako ocenę.

Za legalne użytkowanie odpowiadasz sam. Narzędzie usuwa bariery dla legalnych prac security, badań i nietypowych inżynierskich zastosowań. Nie jest to jednak licencja na atakowanie systemów, których nie posiadasz.

Wywołanie z Pythona lub curl

Najprostszym testem jest pojedyncze zapytanie. Ten skrypt Pythona prosi o małe narzędzie i wypisuje odpowiedź.

from openai import OpenAI

client = OpenAI(base_url="https://api.nofilterai.cc/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",
    temperature=0.2,
    messages=[
        {"role": "system", "content": "You are a senior engineer. Reply with code first, then at most five lines of notes."},
        {"role": "user", "content": "Write a Python script that scans TCP ports 1-1024 on a host I own, using asyncio, with a 0.5 s timeout."},
    ],
)
print(resp.choices[0].message.content)

Niska temperatura nadaje się do kodu. Wartości między 0,1 a 0,3 dają stabilniejszy wynik, a seed pozwala powtórzyć uruchomienie przy porównywaniu promptów. To samo zapytanie z powłoki wygląda następująco.

curl https://api.nofilterai.cc/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "temperature": 0.2,
    "messages": [
      {"role": "user", "content": "Explain this regex and rewrite it without lookbehind: (?<=id=)\\d+"}
    ]
  }'

Możesz sprawdzić, jakie zasoby udostępnia endpoint, wysyłając GET /v1/models. Pobierz klucz ze strony kluczy; jednorazowy kredyt próbny w wysokości $0,50 wystarczy na wiele setek małych zapytań do kodowania.

Konfiguracja w Cursor

Cursor pozwala zastąpić bazowy URL OpenAI w ustawieniach modelu, co pozwala wskazać go na dowolnego dostawcę. Dokładne nazwy menu zmieniają się między wersjami, więc podążaj za ideą, a nie etykietami.

  1. Otwórz ustawienia Cursor i znajdź sekcję modeli.
  2. Wklej swój klucz w pole klucza API OpenAI.
  3. Włącz opcję nadpisania adresu bazowego OpenAI i wprowadź https://api.nofilterai.cc/v1.
  4. Dodaj niestandardowy model o nazwie uncensored i wybierz go w panelu czatu.
  5. Wyślij małą wiadomość testową przed próbą edycji w wielu plikach.

Cursor i podobne edytory mogą używać własnych serwerów do niektórych funkcji, a niektóre funkcje mogą w ogóle nie akceptować niestandardowych modeli. Jeśli funkcja zawiedzie, sprawdź, czy jest powiązana z modelami dostawcy, a nie zakładaj, że endpoint jest uszkodzony. Czat z niestandardowym modelem jest niezawodną częścią.

Inne narzędzia akceptujące endpoint kompatybilny z OpenAI, takie jak Continue lub Aider, używają tych samych trzech wartości: adresu bazowego, klucza i nazwy modelu.

Użycie z LangChain

Klasa ChatOpenAI LangChain przyjmuje argument base_url, więc endpoint można podłączyć bez niestandardowego wrappera.

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="uncensored",
    base_url="https://api.nofilterai.cc/v1",
    api_key="YOUR_KEY",
    temperature=0.2,
)

print(llm.invoke("Write a bash one-liner that lists the 10 largest files under /var/log.").content)

Łańcuchy, szablony promptów i parsery wyjścia działają tak samo jak w przypadku dowolnego modelu czatu zgodnego ze schematem OpenAI. Jeśli tworzysz agenta, pamiętaj o limicie współbieżności: pełny klucz pozwala na 8 zapytań jednocześnie i 300 na minutę, a klucz próbny na 2 i 60. Równoległy agent rozsyłający dziesięć wywołań narzędzi otrzyma HTTP 429 z kodem concurrency dla dodatkowych. Ogranicz rozsyłanie lub spróbuj ponownie po krótkim opóźnieniu.

Wywoływanie funkcji i tryb JSON dla agentów

Agenci do kodowania opierają się na strukturyzowanym wyjściu. API obsługuje tools, tool_choice, strumieniowane tool_calls oraz wyniki funkcji wysyłane z powrotem jako komunikaty role: "tool". Oto minimalny cykl z funkcją odczytującą plik.

import json
from openai import OpenAI

client = OpenAI(base_url="https://api.nofilterai.cc/v1", api_key="YOUR_KEY")

tools = [{
    "type": "function",
    "function": {
        "name": "read_file",
        "description": "Read a UTF-8 text file from the project",
        "parameters": {
            "type": "object",
            "properties": {"path": {"type": "string"}},
            "required": ["path"],
        },
    },
}]

messages = [{"role": "user", "content": "Open main.py and tell me what it does."}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
call = first.choices[0].message.tool_calls[0]

messages.append(first.choices[0].message)
messages.append({
    "role": "tool",
    "tool_call_id": call.id,
    "content": open(json.loads(call.function.arguments)["path"]).read(),
})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)

Zawsze waliduj argumenty przed uruchomieniem czegokolwiek, o co poprosi model. Ścieżka, ciąg poleceń lub URL pochodzący od modelu to niezaufane dane wejściowe, niezależnie od tego, który model je wyprodukował.

Dla wyjścia, które twój kod musi zparseować, ustaw response_format na {"type":"json_object"} i wskaż w prompcie, jakie klucze oczekujesz. Tryb JSON sprawia, że odpowiedź jest poprawnym JSON, ale sprawdzanie schematu nadal należy do twojego kodu.

Rozmiar kontekstu i koszt wywołania kodowania

Okno kontekstu wynosi 100 000 tokenów dla promptu plus odpowiedzi. Jako przybliżony wskaźnik: mieści to wiele plików źródłowych jednocześnie, więc możesz wkleić moduł, jego testy i ślad błędu w jednym kroku zamiast je streszczać. Większe prompty kosztują więcej, więc wysyłaj tylko to, czego wymaga pytanie.

Cena to $0,15 za 1M tokenów wejściowych i $0,50 za 1M tokenów wyjściowych. Przykłady:

ZapytanieWejścieWyjścieKoszt
Wyjaśnij funkcję1,500500$0.000225 + $0.00025 = $0.000475
Przejrzyj moduł z testami30,0002,000$0.0045 + $0.001 = $0.0055
200 takich recenzji w ciągu dnia6,000,000400,000$0.90 + $0.20 = $1.10
Całe okno jako dane wejściowe, jedno wywołanie100,0000$0.015

Nieudane lub odrzucone żądania nie są rozliczane. Kredyt jest przedpłacony, nie wygasa, a doładowania wynoszą od $20 do $500 w dowolnej całkowitej kwocie, z bonusem 5% od $50, 10% od $100 i 15% od $200. Płatność tylko kryptowalutami: USDT na TRC20 lub USDC na Base. Zobacz stronę cenową, aby uzyskać aktualne warunki.

Prompt do recenzji działający na rzeczywistych diffach

Jednym z najlepszych zastosowań dużego okna jest recenzja. Zamiast pytać „czy ten kod jest dobry?”, wklej diff i pliki, których dotyczy, a następnie poproś o wnioski w ustalonej formie. Poproś o numerowaną listę, w której każdy element wymienia plik, linię, problem i jednowierszowe rozwiązanie, i powiedz, że pusta lista jest poprawną odpowiedzią. Ta ostatnia instrukcja ma znaczenie: model, któremu polecono znaleźć problemy, czasem je wymyśla, żeby Ci się przypodobać.

Utrzymuj temperaturę blisko 0,2 podczas przeglądu, ponieważ chcesz uzyskać ten sam wniosek przy drugim uruchomieniu. Jeśli uruchamiasz przeglądy w zadaniu ciągłej integracji, ustaw seed i loguj nagłówek X-Request-Id, aby móc prześledzić zaskakujący wynik później. Połącz to z trybem JSON, gdy skrypt musi przesłać wyniki gdzieś indziej, i poproś o klucze takie jak file, line, severity i fix.

Gdy odpowiedź jest błędna lub pusta

Trzy problemy obejmują większość nieudanych uruchomień. Jeśli otrzymasz 401, klucz jest nieobecny lub nagłówek nie ma postaci Authorization: Bearer z Twoim kluczem. Jeśli edytor zgłasza, że model nie istnieje, sprawdź, czy nazwa to dokładnie uncensored, a bazowy URL kończy się na /v1 bez dodatkowej ścieżki. Jeśli kod się kompiluje, ale zachowuje się niepoprawnie, podaj modelowi wynik błędu i poproś o wyjaśnienie błędu przed przepisaniem czegokolwiek; poprawki wprowadzone po diagnozie są zwykle mniejsze i bezpieczniejsze niż poprawki wprowadzane na ślepo.

Gdzie pasuje, a gdzie nie

Użyj endpointu bez cenzury dla żądań, które inne asystenci odrzucają lub łagodzą, i zachowaj swoje zwykłe narzędzie dla reszty, jeśli lepiej Ci działa. Wielu programistów uruchamia dwa modele obok siebie i wysyła każde zadanie do tego, który odpowiada precyzyjnie/bez zbędnych dygresji.

  • Dobre dopasowanie: prace w laboratorium bezpieczeństwa na systemach, które posiadasz, skrypty do scrapingu i automatyzacji, opracowania z analizy złośliwego oprogramowania dla obrońców, notatki z inżynierii wstecznej, dziwne zadania przetwarzania danych.
  • Bądź ostrożny: wygenerowany kod może zawierać błędy lub wymyślone funkcje bibliotek. Uruchom go, przetestuj, przeczytaj go.
  • Nie oferowane: generowanie obrazów lub audio, embeddingi i fine-tuning. To jest endpoint czatu tekstowego.
  • Prywatność: prompty nie są używane do trenowania, co ma znaczenie, gdy wklejasz kod własnościowy.

Limit ciała to 8 MB na zapytanie, znacznie więcej niż może wykorzystać okno kontekstu. Nagłówki odpowiedzi zawierają X-Request-Id, X-Balance-USD oraz wartości limitu zapytań, które są przydatne w logach. Dokumentacja wymienia każdy parametr, który jest przekazywany dalej.

Pytania i odpowiedzi

Czy programista AI bez filtrów jest lepszy w programowaniu niż inne modele?

Nie domyślnie. Mniej odrzuceń zmienia to, co model odpowie, a nie to, jak dobrze koduje. Przetestuj go na własnych zadaniach przed jego wykorzystaniem.

Które edytory i frameworki współpracują z tym modelem?

Dowolny, który pozwala na ustawienie niestandardowego base URL kompatybilnego z OpenAI, klucza i nazwy modelu. Cursor, LangChain oraz oficjalne SDK OpenAI to częste przykłady.

Czy obsługuje wywoływanie funkcji?

Tak. Akceptuje narzędzia i tool_choice, zwraca tool_calls (również przy strumieniowaniu) i przyjmuje wyniki jako komunikaty role: tool. Dostępny jest również tryb JSON.

Co się stanie, gdy przekroczę limit zapytań?

Otrzymujesz HTTP 429 z kodem błędu rate_limited lub concurrency. Przy tymczasowym przeciążeniu odpowiedź 429 zawiera nagłówek Retry-After z wartością 5 sekund.

Twój klucz jest o jeden formularz do wypełnienia

Utwórz konto, skopiuj klucz, zmień bazowy URL. To cała konfiguracja.