PL ▾
Pobierz klucz API

uncensoredlocalllm.comPrzewodnik

Najlepszy lokalny LLM do kodowania w Pythonie: lokalny czy zdalne API?

Nie ma jednego zwycięzcy, ponieważ najlepszy wybór zależy od twojego GPU, zadań i częstotliwości odrzuceń modelu. Oto jak podjąć decyzję i jak przetestować opcję zdalną, gdy lokalny sprzęt nie wystarcza.

Zaktualizowano

Izometryczna ilustracja lokalnej karty GPU połączonej z chmurą zdalną, reprezentująca modele kodowania lokalnego versus API

Kluczowe punkty

  • Oceń model kodowania na własnych zadaniach: wersja Pythona, biblioteki, rozmiar repozytorium i sposób radzenia sobie z testami.
  • Pamięć GPU wyznacza sufit dla modeli lokalnych. W 4-bitach wagi zajmują około pół bajta na parametr, plus miejsce na kontekst.
  • Ta strona to API w chmurze, a nie lokalne środowisko uruchomieniowe. Posiada okno kontekstu 100 000 tokenów i kosztuje $0,15 oraz $0,50 za 1 mln tokenów.
  • Mały zestaw testów i klucz próbny powiedzą ci więcej niż dowolny ranking.

Zacznij od swoich ograniczeń, a nie od nazwy modelu

Pytanie najlepszy lokalny llm do kodowania w pythonie nie ma stałej odpowiedzi, ponieważ modele szybko się zmieniają, a twoja maszyna jest prawdziwym limitem. Przed porównaniem nazw zapisz cztery rzeczy:

  • Pamięć GPU. To decyduje, jakie rozmiary modeli w ogóle możesz uruchomić.
  • Potrzeby kontekstowe. Edycja jednej funkcji różni się od rozumowania nad całym pakietem.
  • Reguły prywatności. Niektórych kodów nie można wysyłać poza twoją maszynę, co jest uzasadnionym powodem do pozostania w trybie lokalnym.
  • Tolerancja odrzuceń. Narzędzia bezpieczeństwa, skrobaki, inżynieria wsteczna i fuzzery mogą wywoływać odrzucenia w mocno filtrowanych modelach.

Jeśli ścisła praca offline jest wymaganiem, potrzebujesz modelu, który uruchamiasz samodzielnie. Jeśli nie, zdalne API usuwa pytanie o sprzęt. Ta strona należy do drugiej grupy: to zdalne API kompatybilne z OpenAI, a nie lokalne środowisko wykonawcze, i warto je przetestować obok twojego lokalnego ustawienia.

Ile pamięci GPU potrzebujesz

Przybliżona reguła dla wag: parametry razy bajty na parametr. Przy precyzji 16-bit to 2 bajty na parametr; przy 8-bit, 1 bajt; przy 4-bit, około 0,5 bajta.

Rozmiar modelu16-bit8-bit4-bit
7B14 GB7 GB3,5 GB
14B28 GB14 GB7 GB
32B64 GB32 GB16 GB

Te dane dotyczą tylko wag. Potrzebujesz też pamięci na bufor kontekstu, który rośnie wraz z promptem, oraz na samo środowisko wykonawcze. Zostaw kilka gigabajtów marginesu i więcej, jeśli planujesz wklejać duże pliki. Cięższa kwantyzacja oszczędza pamięć, ale może kosztować nieco dokładności, co ma znaczenie przy kodzie, gdzie jeden błędny znak łamie program.

Jak uczciwie porównać modele kodowania

Publiczne rankingi mierzą czyjeś zadania. Lepsza metoda zajmuje godzinę i używa twojego własnego kodu.

  1. Zbierz 15 do 20 prawdziwych zadań: błąd z nieprzechodzącym testem, funkcję do napisania na podstawie docstringa, refaktoryzację, żądanie dodania hintów typów.
  2. Uruchom każdy model z tym samym promptem, tą samą temperaturą (0,2 to rozsądny start dla kodu) i tym samym seed tam, gdzie jest to wspierane.
  3. Oceniaj, uruchamiając testy, a nie czytając odpowiedź. Czy importuje prawdziwe moduły? Czy przechodzi?
  4. Zapisuj odrzucenia osobno. Model, który jest o 5% lepszy w kodzie, ale odrzuca zadanie skanera portów, jest gorszy dla ciebie.
  5. Zapisz czas na zadanie i, dla modeli zdalnych, koszt na zadanie.

Zachowaj harness w pliku, aby móc go ponownie uruchomić, gdy pojawi się nowy model. To ponowne użycie jest warte więcej niż dowolny pojedynczy wynik.

Testowanie opcji zdalnej na tych samych zadaniach

Ponieważ API jest kompatybilne z OpenAI, twój harness potrzebuje tylko innego base URL. Ten skrypt prosi o funkcję, wyodrębnia pierwszy blok Pythona i uruchamia go przeciwko testowi. Identyfikator modelu to uncensored.

import re
import subprocess
import tempfile
from openai import OpenAI

client = OpenAI(base_url="https://api.uncensoredlocalllm.com/v1", api_key="YOUR_API_KEY")

TASK = "Write a Python function parse_size(text) that converts '10KB' or '2 MB' to bytes."
TEST = "assert parse_size('10KB') == 10240\nassert parse_size('2 MB') == 2 * 1024 * 1024\nprint('ok')"

r = client.chat.completions.create(
    model="uncensored",
    temperature=0.2,
    seed=7,
    messages=[
        {"role": "system", "content": "You write correct Python 3. Reply with one fenced code block and no commentary."},
        {"role": "user", "content": TASK},
    ],
)
text = r.choices[0].message.content
m = re.search(r"```(?:python)?\n(.*?)```", text, re.S)
code = m.group(1) if m else text

with tempfile.NamedTemporaryFile("w", suffix=".py", delete=False) as f:
    f.write(code + "\n" + TEST)
out = subprocess.run(["python3", f.name], capture_output=True, text=True, timeout=20)
print(out.stdout.strip() or out.stderr.strip())

Uruchom tę samą listę zadań przeciwko swojemu lokalnemu modelowi i porównaj wskaźniki przejścia. Kod uruchamia wygenerowane wyjście, więc użyj katalogu jednorazowego lub kontenera do wszystkiego poza przykładami demonstracyjnymi.

Gdzie model zdalny pomaga programiście Pythona

Hostowany endpoint nie jest lepszy we wszystkich przypadkach, ale kilka zadań sprawdza się w nim dobrze:

  • Duży kontekst. Okno kontekstu wynosi 100 000 tokenów, łącznie z promptem i uzupełnieniem. Mieści się w nim spory moduł, jego testy i stack trace w jednym zapytaniu.
  • Wywoływanie funkcji. Możesz zdefiniować narzędzia takie jak run_tests lub read_file i pozwolić modelowi wywoływać je w pętli, z wynikami wysyłanymi z powrotem jako komunikaty role: "tool".
  • Tryb JSON. Przy użyciu response_format: {"type":"json_object"} możesz uzyskać uporządkowaną recenzję kodu, np. listę problemów z numerami wierszy.
  • Mniej odmów w pracy z bezpieczeństwem. Model jest dostrojony do odpowiadania bez odmów dotyczących treści dla legalnego użytku przez dorosłych, co obejmuje testowanie bezpieczeństwa systemów, które posiadasz lub masz uprawnienia do testowania.

Kompromis jest prosty: twój kod opuszcza twoją maszynę i potrzebujesz połączenia sieciowego. Prompty nie są używane do trenowania, ale jeśli twoja polityka zabrania wysyłania kodu do jakiejkolwiek strony trzeciej, zostań przy trybie lokalnym.

Pozwolenie modelowi na uruchamianie twoich testów za pomocą wywoływania funkcji

Wywoływanie funkcji zamienia jednorazową odpowiedź w pętlę: model prosi o uruchomienie testów, widzi błąd i naprawia kod. Zdefiniuj jedno narzędzie i obsłuż wywołanie samodzielnie.

import json
import subprocess
from openai import OpenAI

client = OpenAI(base_url="https://api.uncensoredlocalllm.com/v1", api_key="YOUR_API_KEY")

tools = [{
    "type": "function",
    "function": {
        "name": "run_tests",
        "description": "Run pytest in the project and return the output",
        "parameters": {"type": "object", "properties": {}, "required": []},
    },
}]

messages = [
    {"role": "system", "content": "You fix Python bugs. Call run_tests to check your work."},
    {"role": "user", "content": "The tests in this project fail. Run them and tell me the first error."},
]

for _ in range(5):
    r = client.chat.completions.create(model="uncensored", messages=messages, tools=tools, temperature=0.2)
    msg = r.choices[0].message
    messages.append(msg)
    if not msg.tool_calls:
        print(msg.content)
        break
    for call in msg.tool_calls:
        out = subprocess.run(["pytest", "-x", "-q"], capture_output=True, text=True)
        messages.append({"role": "tool", "tool_call_id": call.id, "content": (out.stdout + out.stderr)[-4000:]})

Pętla jest ograniczona do pięciu rund, więc zdezorientowany model nie może działać w nieskończoność. Trzymaj output narzędzia krótkim, ponieważ wszystko, co zwrócisz, jest rozliczane jako input w następnej rundzie. Ograniczenie go do ostatnich 4 000 znaków sprawia, że każda tura jest tania.

Koszt pracy programistycznej

Prompty programistyczne są obciążone inputem: wklejasz kod i otrzymujesz krótszą odpowiedź. Weźmy żądanie refaktoryzacji z 6 000 tokenami inputu i 1 500 tokenami outputu po $0,15 i $0,50 za 1 mln:

  • Input: 6 000 / 1 000 000 x $0,15 = $0,0009
  • Wyjście: 1 500 / 1 000 000 x $0,50 = $0,00075
  • Razem: $0,00165 za zapytanie

Tysiąc takich zapytań kosztuje $1,65. Kredyt próbny $0,50 pokrywa około 303 z nich, co wystarczy na wielokrotne uruchomienie benchmarku 20-zadaniowego. Lokalna karta GPU może być tańsza przy dużym wolumenie, ale wymaga jednorazowego nakładu i nie spada do zera, gdy nie korzystasz z usługi. Pełna tabela cen znajduje się na stronie z cenami.

Praktyczne ustawienia do generowania kodu

  • Temperatura 0,1 do 0,3. Niższe wartości zmniejszają wymyślanie API i losowe zmiany stylu.
  • Ustal stałe ziarno, gdy porównujesz prompty, aby różnice wynikały z promptu, a nie z próbkowania.
  • Wpisz wersję Pythona i biblioteki w komunikacie systemowym: "Python 3.11, tylko biblioteka standardowa" eliminuje dużo zgadywania.
  • Poproś o testy wraz z kodem. Model, który pisze własne testy, często łapie własne błędy off-by-one, gdy je uruchamiasz.
  • Wyślij traceback błędu, a nie jego opis.

Aby przetestować, odbierz kredyt próbny na stronie klucza API, a następnie skorzystaj z przewodnika szybkiego startu. W przypadku użycia w stylu czatu, zobacz przewodnik po czacie z LLM bez cenzury. Usługa przeznaczona jest do użytku zgodnego z prawem przez osoby dorosłe i nie generuje treści seksualnych z udziałem nieletnich.

Typowe pułapki przy modelach programistycznych

  • Wymyślone importy i nazwy funkcji. Uruchom kod. Model może opisać metodę biblioteki, która nie istnieje, więc test jest jedynym sędzią.
  • Przestarzała składnia. Jeśli potrzebujesz nowoczesnych funkcji, takich jak dopasowanie strukturalne, podaj wersję Pythona w prompcie.
  • Zbyt dużo kontekstu. Większe okno kontekstu nie oznacza, że należy wkleić wszystko. Wyślij istotne pliki oraz raport błędu.
  • Zaufanie wygenerowanemu kodowi bezpieczeństwa. Ręcznie sprawdź wszystko, co ma związek z uwierzytelnianiem, kryptografią lub parsowaniem danych wejściowych.
  • Uruchamianie wyjścia na ślepo. Wygenerowany kod może usuwać pliki lub nawiązywać połączenia sieciowe. Użyj piaskownicy.

Pytania i odpowiedzi

Który lokalny LLM jest najlepszy do kodu w Pythonie?

Zależy to od pamięci GPU i zadań, więc przetestuj dwa lub trzy modele o rozmiarze pasującym do twojego sprzętu na własnym kodzie i oceń je, uruchamiając testy. Rankingi są tylko punktem wyjścia.

Czy ta strona to lokalny LLM?

Nie. To API kompatybilne z OpenAI, hostowane zdalnie, z identyfikatorem modelu uncensored. Będzie ono dla ciebie odpowiednie, jeśli możesz wysyłać kod do zdalnej usługi.

Ile pamięci GPU potrzebuję do modelu 14B?

Około 28 GB w 16-bitach, 14 GB w 8-bitach i 7 GB w 4-bitach tylko na wagi, plus dodatkowa pamięć na bufor kontekstu.

Czy mogę używać tego z istniejącymi narzędziami Python?

Tak. Działa dowolne SDK lub klient OpenAI po ustawieniu base URL na https://api.uncensoredlocalllm.com/v1 i użyciu twojego klucza.

Jak mogę przetestować to za darmo?

Odbierz kredyt próbny $0,50 na stronie klucza API po rejestracji. Jest ważny przez 7 dni, nie wymaga podania danych płatności i jest ograniczony do jednego na osobę.

uncensoredlocalllm.com

Twój klucz jest o jeden formularz stąd

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