PL ▾
Pobierz klucz API

GetAiApiKeyChecklista API AI do produkcji

Jak zainstalować LLM w Pythonie: lokalnie lub przez API

Możesz uruchomić model na własnym sprzęcie lub zainstalować jeden mały pakiet Pythona i wywołać model hostowany przez HTTP. Ta strona omawia oba podejścia, a następnie krok po kroku przedstawia ścieżkę API.

Zaktualizowano

Ilustracja kabla łączącego skrypt Pythona ze świecącym sześcianem modelu w chmurze, pokazująca połączenie API

Kluczowe punkty

  1. Lokalna instalacja wymaga wag modelu i wystarczającej pamięci; ścieżka API wymaga tylko pakietu openai i klucza.
  2. Ustaw base URL na https://api.getaiapikey.com/v1 i model na uncensored.
  3. Strumieniowanie, wywoływanie funkcji i tryb JSON działają przez standardowego klienta OpenAI.
  4. Obsłuż HTTP 429 krótkim ponowieniem i utrzymaj równoległe wywołania na poziomie 8 lub mniej.

Dwa znaczenia instalacji LLM

Gdy pytają, jak zainstalować llm w pythonie, ludzie zwykle mają na myśli jedną z dwóch rzeczy. Pierwsza to uruchomienie modelu lokalnie: pobranie wag i załadowanie ich biblioteką na własnym CPU lub GPU. Druga to zainstalowanie biblioteki klienta, dzięki czemu kod Pythona może rozmawiać z modelem działającym gdzieś indziej. Oba podejścia są poprawne, a właściwy wybór zależy od sprzętu i tego, co chcesz zbudować.

Ścieżka API jest znacznie krótsza. Uruchamiasz pip install openai, kierujesz klienta na base URL i wywołujesz model. Bez wag, sterowników GPU ani planowania pamięci. Dalsza część tej strony zawiera kroki i kod dla tej ścieżki, z krótkim rozdziałem dotyczącym wersji lokalnej, abyś mógł porównać.

Lokalna instalacja lub hostowane API: jak wybrać

PytanieLokalna instalacjaHostowane API
Co instalujeszBiblioteka wnioskowania plus wagi modeluPakiet openai
SprzętPamięć i zwykle GPU dostosowane do modeluDowolna maszyna, która może nawiązywać połączenia HTTPS
KosztTwój sprzęt i prądZa token, z przedpłaconego kredytu
Działa offlineTakNie
Czas do pierwszej odpowiedziPobieranie, konfiguracja, dostrajanieKilka minut

Lokalna instalacja ma sens, jeśli musisz trzymać wszystko na jednej maszynie, potrzebujesz pracy offline lub chcesz eksperymentować z samymi wagami. Biblioteki takie jak wiązania llama.cpp lub Hugging Face transformers są zwykle punktem wyjścia; sprawdź ich własną dokumentację pod kątem wymagań sprzętowych, ponieważ zależą one od wybranego rozmiaru modelu.

API ma sens, jeśli chcesz szybko uzyskać działający wynik, Twój laptop nie pomieści dużego modelu lub Twoja aplikacja musi obsłużyć wielu użytkowników. Płacisz za tokeny zamiast kupować sprzęt. Dla tej usługi jest to $0,15 za 1M tokenów wejściowych i $0,50 za 1M tokenów wyjściowych, bez subskrypcji. Strona cen zawiera szczegóły.

Krok 1: utwórz środowisko wirtualne i zainstaluj pakiet

Użyj środowiska wirtualnego, aby instalacja była czysta. Działa dowolna nowa wersja Pythona 3 z pakietem openai.

python3 -m venv .venv
source .venv/bin/activate
pip install openai

Następnie potrzebujesz klucza. Zarejestruj się na stronie klucza API za pomocą Google lub e-maila i hasła. Nowi użytkownicy mogą jednym kliknięciem uzyskać $0,50 kredytu próbnego ważnego przez 7 dni bez podawania karty. Przechowuj klucz w zmiennej środowiskowej, a nie w pliku źródłowym:

export API_KEY="paste-your-key-here"

Krok 2: wykonaj pierwsze wywołanie

Usługa jest kompatybilna z OpenAI, więc jedynymi zmianami w standardowym skrypcie OpenAI są base URL i ID modelu. ID modelu to uncensored.

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.getaiapikey.com/v1",
    api_key=os.environ["API_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "Explain what a context window is in two sentences."},
    ],
    temperature=0.7,
    max_tokens=200,
)

print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)

Jeśli wypisze to odpowiedź i dwa liczniki tokenów, instalacja jest zakończona. Aby sprawdzić, czy Twój klucz działa i zobaczyć ID modelu, możesz również wywołać GET /v1/models:

for m in client.models.list():
    print(m.id)

To samo zapytanie z powłoki, bez Pythona w ogóle, to jedno wywołanie curl do https://api.getaiapikey.com/v1/chat/completions z nagłówkiem Authorization: Bearer i Twoim kluczem. Szybki start w dokumentacji pokazuje to w całości.

Krok 3: strumieniuj tokeny po ich przybyciu

Czekanie na zakończenie długiej odpowiedzi przed wypisaniem czegokolwiek wydaje się wolne. Ustaw stream=True, a serwer wysyła tokeny przez zdarzenia wysyłane przez serwer. Możesz poprosić o podsumowanie użycia w ostatnim fragmencie z stream_options.

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Write a short scene set in a lighthouse."}],
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage.total_tokens, "tokens")

Jeden szczegół ma znaczenie w produkcji: strumieniowane zapytanie zajmuje slot współbieżności do momentu zakończenia strumienia. Pełny klucz pozwala na 8 równoległych zapytań, więc jeśli Twoja aplikacja otwiera wiele długich strumieni, zamykaj je, gdy użytkownik się rozłączy.

Krok 4: tryb JSON i wywoływanie funkcji

Dla danych strukturalnych ustaw response_format na obiekt JSON. Powiedz również modelowi w promptcie, aby odpowiadał w JSON, ponieważ ustawienie gwarantuje poprawną składnię JSON, ale nie nazwy pól, których chcesz.

import json

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "Reply only with JSON: {\"title\": string, \"tags\": [string]}"},
        {"role": "user", "content": "Give me a title and tags for a post about slow travel."},
    ],
    response_format={"type": "json_object"},
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["tags"])

Wywoływanie funkcji podąża standardowym wzorcem. Opisujesz funkcję, model może poprosić o jej wywołanie, uruchamiasz ją samodzielnie i wysyłasz wynik z powrotem z role: "tool".

tools = [{
    "type": "function",
    "function": {
        "name": "get_time",
        "description": "Return the current time for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

messages = [{"role": "user", "content": "What time is it in Lisbon?"}]
first = client.chat.completions.create(
    model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)

msg = first.choices[0].message
if msg.tool_calls:
    call = msg.tool_calls[0]
    messages.append(msg)
    messages.append({
        "role": "tool",
        "tool_call_id": call.id,
        "content": json.dumps({"time": "14:05"}),
    })
    final = client.chat.completions.create(
        model="uncensored", messages=messages, tools=tools
    )
    print(final.choices[0].message.content)

Przetestuj wywoływania funkcji na kilku promptach, zanim się na nich oprzesz. Każdy model może wybrać niewłaściwą funkcję lub błędnie wypełnić argument, więc waliduj argumenty we własnym kodzie przed uruchomieniem czegokolwiek ze skutkami ubocznymi.

Krok 5: obsługa limitów i błędów

Pełne klucze pozwalają na 8 równoległych zapytań i 300 zapytań na minutę. Klucze próbne pozwalają na 2 i 60. Po przekroczeniu tych limitów otrzymujesz HTTP 429. Kod błędu rate_limited oznacza zbyt wiele zapytań na minutę, a concurrency oznacza zbyt wiele naraz. Przy tymczasowym przeciążeniu API zwraca również 429 z nagłówkiem Retry-After: 5.

Klient Pythona OpenAI ponawia niektóre błędy samodzielnie, ale jawny wrapper utrzymuje zachowanie jasnym:

import time
from openai import RateLimitError

def ask(messages, tries=4):
    for attempt in range(tries):
        try:
            return client.chat.completions.create(model="uncensored", messages=messages)
        except RateLimitError:
            time.sleep(5 * (attempt + 1))
    raise RuntimeError("still rate limited after retries")

Każda odpowiedź zawiera nagłówki X-Request-Id, X-Balance-USD oraz nagłówki limitów zapytań, które możesz logować. Dołącz ID zapytania, jeśli skontaktujesz się z wsparciem. Nieudane lub odrzucone zapytania nie są rozliczane, więc ponowne wywołanie nie generuje dodatkowych kosztów.

Zaplanuj również limity rozmiaru. Okno kontekstu ma 100 000 tokenów, prompt plus uzupełnienie, a maksymalne treść zapytania to 8 MB. Długie historie czatu powinny być przycinane lub podsumowywane przed osiągnięciem tych liczb.

Gdy wywołanie nie działa

Większość problemów przy pierwszym uruchomieniu wynika z garstki błędów. Sprawdź je kolejno, zanim podejrzysz coś innego.

  • Base URL bez ścieżki wersji. Wartość musi kończyć się na /v1. Klient dodaje do niej /chat/completions, więc brak /v1 powoduje wysłanie zapytania do niewłaściwego endpointu.
  • Nieprawidłowy lub brakujący klucz. Klucz umieszcza się w nagłówku Authorization: Bearer, który klient buduje na podstawie api_key. Jeśli zmienna środowiskowa jest pusta, klient zgłasza błąd przy starcie lub wysyła pusty klucz. Wypisz bool(os.environ.get("API_KEY")), aby sprawdzić.
  • Nazwa modelu z innej usługi. Jedynym ID modelu tutaj jest uncensored. Nazwy takie jak te z innych poradników nie będą pasować.
  • Brak salda. Sprawdź nagłówek X-Balance-USD. Kredyt próbny, który przekroczył 7 dni, lub wydatkowane saldo wymaga doładowania od kwoty $20.
  • Starszy pakiet. Jeśli przykład używa OpenAI(, a Python mówi, że nie może zaimportować tej nazwy, masz paczkę przed wersją 1.0. Uruchom pip install --upgrade openai.

Aby zobaczyć surową odpowiedź włącznie z nagłówkami, użyj wrappera surowej odpowiedzi klienta:

raw = client.chat.completions.with_raw_response.create(
    model="uncensored",
    messages=[{"role": "user", "content": "ping"}],
    max_tokens=5,
)
print(raw.headers.get("x-request-id"), raw.headers.get("x-balance-usd"))
completion = raw.parse()
print(completion.choices[0].message.content)

To wypisuje ID zapytania i Twoje pozostałe saldo obok odpowiedzi, co jest szybkim sprawdzaniem stanu, które możesz uruchomić z zadania cron lub skryptu startowego.

Używanie go z innymi narzędziami

Ponieważ endpoint jest zgodny z formatem OpenAI, inne biblioteki Pythona mogą go używać z tymi samymi dwoma ustawieniami. Frameworki akceptujące niestandardowy base URL OpenAI potrzebują tylko base_url i api_key. Dla Node oficjalny pakiet openai przyjmuje te same pola:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.getaiapikey.com/v1",
  apiKey: process.env.API_KEY,
});

const r = await client.chat.completions.create({
  model: "uncensored",
  messages: [{ role: "user", content: "Say hello in five words." }],
});
console.log(r.choices[0].message.content);

To usługa tekstowa: bez generowania obrazów ani audio, bez embeddingów i bez dostrajania. Jeśli Twój projekt tego potrzebuje, połącz to API z innym narzędziem do tych zadań. Model jest modelem o otwartych wagach uruchamianym przez niezależnego dostawcę i dostosowanym do odpowiadania bez odrzuceń treści dla prawnego użytku dorosłych. Treści seksualne z udziałem nieletnich są zawsze zabronione.

Pytania i odpowiedzi

Czy potrzebuję GPU, aby używać LLM w Pythonie w ten sposób?

Nie. Model działa po stronie dostawcy. Twój komputer potrzebuje tylko Pythona i połączenia internetowego, aby wywołać endpoint.

Który pakiet zainstalować?

Zainstaluj oficjalny pakiet openai za pomocą pip. Następnie ustaw Base URL na https://api.getaiapikey.com/v1 i model na uncensored.

Czy jest darmowy sposób, żeby to przetestować?

Nowi użytkownicy mogą jednym kliknięciem po rejestracji uzyskać $0,50 kredytu próbnego. Jest on ważny przez 7 dni, nie wymaga karty i przysługuje tylko raz na osobę.

Ile kosztuje zapytanie?

Zapytanie z 2 000 tokenami wejściowymi i 500 tokenami wyjściowymi kosztuje $0,00055, przy cenie $0,15 i $0,50 za 1M tokenów. Płacisz tylko za pomyślne zapytania.

Czy obsługuje strumieniowanie i wywoływanie funkcji?

Tak. Strumieniowanie przez SSE, wywoływanie funkcji i tryb JSON działają przez standardowego klienta OpenAI.

Twój klucz jest o jeden formularz stąd

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