PL ▾
Pobierz klucz API

API Ollama vs API OpenAI: endpointy i kod

Pytanie o API Ollama vs API OpenAI sprowadza się do dwóch formatów zapytań i dwóch miejsc uruchomienia modelu. Ollama ma własne API natywne oraz warstwę kompatybilną z OpenAI, więc migracja do endpointu w stylu OpenAI może oznaczać tylko zmianę Base URL i klucza.

Zaktualizowano

Komputer stacjonarny i serwer chmurowe połączone dwoma światłowodami przenoszącymi identyczne koperty wiadomości
Okno czatu połączone z komputerem lokalnym i serwerem w chmurze za pomocą świecących kabli

Nie potrzeba karty. Po rejestracji zdobądź $0,50 darmowego kredytu próbnego jednym kliknięciem (raz na osobę).

Pobierz klucz API

Kluczowe punkty

  • Ollama ma endpointy natywne pod /api oraz warstwę kompatybilną z OpenAI pod /v1; klienci napisani pod OpenAI SDK zazwyczaj działają z obiema.
  • Ollama natywnie strumieniuje JSON rozdzielony nowymi wierszami, podczas gdy format OpenAI strumieniuje zdarzenia wysłane przez serwer.
  • Migracja z lokalnej do hostowanej oznacza zmianę Base URL, klucza i nazwy modelu, a nie kodu.
  • Lokalne trzyma dane na Twojej maszynie; hostowane usuwa pracę sprzętową i dodaje rachunek za tokeny.

Krótka wersja

Oba żądają POST listy wiadomości i zwracają tekst. Różnica polega na kształcie zapytania, miejscu serwera i tym, kto płaci za GPU. Ollama uruchamia modele na Twoim komputerze i nasłuchuje na porcie 11434. API OpenAI to usługa hostowana z własnymi płatnymi modelami. W porównaniu Ollama vs OpenAI często pomija się trzecią rzecz: Ollama udostępnia też endpointy kompatybilne z OpenAI, więc formaty się pokrywają.

Ta nakładka sprawia, że migracja jest tania. Jeśli Twoja aplikacja korzysta już z OpenAI SDK, możesz skierować ją dziś na lokalny Ollama, a jutro na hostowany endpoint zgodny z OpenAI. Hostowany endpoint na tej stronie jest jednym z takich. Obsługuje jeden model, uncensored, pod https://api.ollamansfw.com/v1 i nie jest oficjalnym produktem OpenAI, Meta ani żadnego innego laboratorium.

Różnice między endpointami

ZadanieOllama natywnyW stylu OpenAI
CzatPOST /api/chatPOST /v1/chat/completions
Pojedynczy promptPOST /api/generatePOST /v1/responses lub chat completions
Lista modeliGET /api/tagsGET /v1/models
AutoryzacjaDomyślnie brakAuthorization: Bearer klucz API
StrumieniowanieJSON rozdzielony nowymi wierszamiZdarzenia wysłane przez serwer, kończące się znacznikiem done
Nazwa modeluCokolwiek pobrałeś, np. llama3Wszystko, co wymienia dostawca

Ollama obsługuje również /v1/chat/completions i /v1/models na tym samym porcie, co pozwala klientom OpenAI na pracę z tym interfejsem. Domyślnie wywołania natywne używają strumieniowania, więc ustaw stream: false, gdy chcesz otrzymać pojedynczą odpowiedź JSON.

Endpoint hostowany implementuje POST /v1/chat/completions, POST /v1/responses i GET /v1/models, a także sprawdzanie salda na GET /v1/balance. Pełną listę znajdziesz w dokumentacji API.

To samo zapytanie na trzy sposoby

Natywne Ollama z Pythona:

import requests

r = requests.post(
    "http://localhost:11434/api/chat",
    json={
        "model": "llama3",
        "messages": [{"role": "user", "content": "Say hello in five words."}],
        "stream": False,
    },
)
print(r.json()["message"]["content"])

OpenAI SDK z ustawieniami lokalnymi i hostowanymi obok siebie. Zmienia się tylko zakomentowana linia:

from openai import OpenAI

# Local Ollama through its OpenAI-compatible layer:
# client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")

# Hosted endpoint, same code from here on:
client = OpenAI(base_url="https://api.ollamansfw.com/v1", api_key="YOUR_KEY")

resp = client.chat.completions.create(
    model="uncensored",   # local would be e.g. "llama3"
    messages=[{"role": "user", "content": "Say hello in five words."}],
)
print(resp.choices[0].message.content)

A curl do endpointu hostowanego ze strumieniowaniem:

curl https://api.ollamansfw.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"uncensored","messages":[{"role":"user","content":"Hello"}],"stream":true}'

Parsowanie różni się po stronie natywnej: każda strumieniowana linia to obiekt JSON z message.content, a ostatnia zawiera done: true. W formacie OpenAI każde zdarzenie zaczyna się od data: , zawiera fragment choices[0].delta.content, a strumień kończy się [DONE]. Użycie SDK sprawia, że nie widzisz żadnej z tych różnic.

Gdzie ma to sens

Lokalny Ollama to dobry wybór, gdy prywatność jest najważniejsza, masz GPU z wystarczającą pamięcią dla wybranego modelu lub eksperymentujesz z wieloma modelami. Nic nie opuszcza Twojego komputera i nie ma opłat za tokeny. Koszty to sprzęt, energia i Twój czas. Nasz przewodnik po używaniu Ollama z GUI opisuje przyjazną stronę tej drogi.

Endpoint kompatybilny z OpenAI lepiej pasuje, gdy brakuje sprzętu, potrzebujesz wielu równoległych zapytań, uruchamiasz bota lub usługę dla innych, albo chcesz stabilnego URL, który nie zależy od włączonego laptopa. Pełny klucz pozwala na 8 równoległych zapytań i 300 zapytań na minutę. Okno kontekstu wynosi 100 000 tokenów, co jest więcej niż wiele lokalnych konfiguracji zmieści w pamięci.

Wiele osób używa obu: lokalnie do eksperymentów, a hostowane do tego, co musi być stabilne. Jeśli rozważasz inne narzędzia lokalne, przeczytaj alternatywy dla Ollama.

Migracja z lokalnego Ollama do hostowanego

  1. Najpierw przejdź na format OpenAI. Jeśli Twój kod wywołuje /api/chat, zmień go na SDK OpenAI wskazujące na trasę /v1 Ollamy. Upewnij się, że nadal działa lokalnie.
  2. Zdobądź klucz. Zarejestruj się i odbierz kredyt próbny $0,50 na stronie kluczy API. Nie wymaga on płatności i trwa 7 dni.
  3. Zmień trzy wartości. Base URL na https://api.ollamansfw.com/v1, klucz na swój, model na uncensored.
  4. Sprawdź parametry. Temperatura, top_p, stop, seed i kary są przekazywane dalej. Opcje dostępne tylko lokalnie, takie jak num_ctx lub keep_alive Ollamy, nie mają zastosowania; okno kontekstu jest stałe i wynosi 100 000 tokenów.
  5. Dodaj logikę ponownych prób. Hostowane API zwraca 429 z rate_limited lub concurrency po przekroczeniu limitu oraz 429 z Retry-After: 5 podczas tymczasowego przeciążenia. Serwery lokalne rzadko tak robią, więc istniejący kod może tego nie obsługiwać.

Jeśli coś zawiedzie po przełączeniu, artykuł o częstych błędach API Ollama omawia częste przyczyny, takie jak złe porty i brakujące nazwy modeli.

Koszty hostingu i czego nie zrobi

Rozliczenie jest elastyczne, z przedpłaconego kredytu: $0,15 za 1M tokenów wejściowych i $0,50 za 1M tokenów wyjściowych. Tura rozmowy z 1000 tokenami wejściowymi i 400 wyjściowymi kosztuje $0,00015 + $0,0002 = $0,00035, więc $20 starcza na około 57 000 takich tur. Nieudane lub odrzucone zapytania nie są rozliczane, a kredyt nigdy nie wygasa. Doładowania wynoszą od $20 do $500 z bonusami +5% od $50, +10% od $100 i +15% od $200. Płatność tylko kryptowalutami (USDT na TRC20 lub USDC na Base). Więcej na stronie z cenami.

Ograniczenia do zapamiętania: tylko tekst, więc brak embeddingów, generowania obrazów ani fine-tuningu. Jeśli polegasz na lokalnych embeddingach, trzymaj je lokalnie. Model jest dostrojony do odpowiadania bez odrzucania treści dla prawidłowego użycia przez dorosłych. Treści seksualne z udziałem nieletnich są zawsze zabronione. Prompty nie są używane do trenowania.

Pytania i odpowiedzi

Czy API Ollama jest kompatybilne z API OpenAI?

Częściowo. Ollama ma endpointy natywne pod /api oraz udostępnia endpointy w stylu OpenAI, np. /v1/chat/completions, więc klienci OpenAI SDK mogą się z nim komunikować.

Co muszę zmienić, aby przejść z lokalnego Ollama na endpoint hostowany?

Podstawowy URL, klucz API i nazwa modelu. Jeśli twój kod już korzysta z OpenAI SDK, nic innego nie musi się zmienić.

Czy hostowane API obsługuje embeddingi, podobnie jak Ollama?

Nie. To tylko generowanie tekstu: kompletacje czatu i odpowiedzi, bez osadzania, obrazów ani dostrajania.

Czy Ollama jest darmowe?

Oprogramowanie jest darmowe do pobrania i uruchomienia. Nadal płacisz za sprzęt i energię, podczas gdy hostowane API pobiera opłatę za token.