Jak używać Ollama z GUI (z fallbackiem hostowanym)
Ollama działa w terminalu, ale każdy interfejs czatu obsługujący format OpenAI może działać jako nakładka. Oto jak go skonfigurować i jak podłączyć ten sam interfejs do zdalnego endpointa.

Nie potrzeba karty. Po rejestracji zdobądź $0,50 darmowego kredytu próbnego jednym kliknięciem (raz na osobę).
Pobierz klucz APIKluczowe punkty
- Ollama nie ma wbudowanego okna czatu; dodajesz interfejs, taki jak Open WebUI.
- Front endy łączą się z Ollama lub dowolnym URL kompatybilnym z OpenAI, więc jedno GUI może utrzymywać oba połączenia.
- Dla połączenia zdalnego użyj adresu bazowego https://api.ollamansfw.com/v1 i identyfikatora modelu uncensored.
- Strumieniowanie, wywoływanie funkcji i tryb JSON działają przez endpoint hostowany przy użyciu standardowych ustawień klienta.
Dlaczego Ollama wymaga osobnego GUI
Jeśli chcesz wiedzieć, jak używać Ollamy z interfejsem graficznym, pierwszą rzeczą, którą musisz zaakceptować, jest fakt, że Ollama to serwer i narzędzie wiersza poleceń. Pobiera modele i obsługuje żądania na lokalnym porcie. Okno czatu to zadanie innych twórców, a jest kilka dobrych okien czatu.
Ten podział jest przydatny. Ponieważ Ollama udostępnia API w stylu OpenAI na Twojej maszynie (domyślnie na porcie 11434 pod ścieżką /v1), każdy interfejs pozwalający na ustawienie własnego adresu bazowego OpenAI może go użyć. Ta sama cecha oznacza, że możesz później skierować ten interfejs w inne miejsce. Ten artykuł najpierw opisuje konfigurację lokalną, a następnie dodaje endpoint zdalny jako drugie połączenie.
Wybierz interfejs
Trzy grupy narzędzi pokrywają potrzeby większości użytkowników. Sprawdź dokumentację każdego projektu w celu uzyskania aktualnych instrukcji instalacji, ponieważ często się zmieniają.
- Open WebUI. Interfejs przeglądarkowy do samodzielnego hostowania. Bezpośrednio obsługuje Ollama i akceptuje dowolne połączenie kompatybilne z OpenAI. Zazwyczaj instalowany z Dockerem lub pip.
- Klienci desktopowi. Natywne aplikacje, takie jak Chatbox czy Msty, pozwalają dodać serwer Ollama lub dostawcę kompatybilnego z OpenAI przez ekran ustawień. Nie wymaga uruchamiania serwera.
- Interfejsy do odgrywania ról i pisania. SillyTavern pozwala dodać endpoint kompatybilny z OpenAI, a podobne narzędzia istnieją do długich utworów i postaci towarzyskich dla dorosłych.
Jeśli nie chcesz kontenera Docker, klient desktopowy jest najszybszą drogą. Jeśli chcesz udostępniony interfejs dla kilku osób w jednej sieci, Open WebUI jest standardowym wyborem.
Krok po kroku z Open WebUI
- Zainstaluj i uruchom Ollamę, a następnie pobierz model poleceniem
ollama pull. Upewnij się, że odpowiada z terminala, zanim przejdziesz dalej. - Uruchom Open WebUI. W przypadku Dockera typowym wzorcem jest opublikowanie portu i zamontowanie woluminu dla jego danych.
- Otwórz stronę internetową, utwórz pierwsze konto lokalne (stanie się administratorem) i znajdź sekcję połączeń w ustawieniach administracyjnych.
- Upewnij się, że URL Ollama wskazuje maszynę, na której działa Ollama. Gdy oba są na tym samym hoście, jest to zazwyczaj adres lokalny na porcie 11434. Gdy Open WebUI działa w kontenerze,
localhostoznacza sam kontener, co jest najczęstszą przyczyną pustej listy modeli. - Odśwież, wybierz model z listy rozwijanej i wyślij wiadomość.
To kompletny lokalny GUI. Nic nie opuszcza Twojego komputera, a prędkość zależy od Twojej karty GPU lub CPU.
Dodawanie zdalnego połączenia kompatybilnego z OpenAI
Teraz opcja awaryjna. Załóżmy, że model, który możesz uruchomić lokalnie, jest za mały do długiej sceny, albo Twój interfejs graficzny jest zajęty renderowaniem. Możesz dodać drugie połączenie do tego samego GUI. Potrzebujesz do tego klucza API, który możesz uzyskać na stronie klucza API po zalogowaniu się przez Google lub za pomocą adresu e-mail i hasła. Jednorazowy kredyt próbny za $0.50 jest dostępny jednym kliknięciem, nie wymaga płatności i trwa 7 dni.
W Open WebUI dodaj połączenie OpenAI z tymi wartościami:
- Adres bazowy:
https://api.ollamansfw.com/v1 - Klucz API: Twój klucz, wysyłany jako
Authorization: Bearer - Model:
uncensored
Jeśli wolisz zmienne środowiskowe przy uruchamianiu kontenera, Open WebUI dokumentuje OPENAI_API_BASE_URL i OPENAI_API_KEY do tego celu:
docker run -d -p 3000:8080 \
-e OPENAI_API_BASE_URL=https://api.ollamansfw.com/v1 \
-e OPENAI_API_KEY=YOUR_KEY \
-v open-webui:/app/backend/data \
--name open-webui ghcr.io/open-webui/open-webui:main
# model to pick in the UI: uncensored
Po przeładowaniu uncensored powinien pojawić się na liście rozwijanej modeli obok Twoich modeli lokalnych. Interfejs odnajduje go poprzez GET /v1/models. Możesz teraz przełączać się między modelem lokalnym a hostowanym w tej samej liście konwersacji.
Przetestuj endpoint poza GUI najpierw
Gdy GUI pokazuje niejasny błąd, najszybszym sposobem na sprawdzenie, czy problem dotyczy klucza, czy interfejsu, jest bezpośrednie wywołanie. Oto żądanie strumieniowania z curl:
curl -N https://api.ollamansfw.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"stream": true,
"messages": [{"role": "user", "content": "Write two sentences about a lighthouse keeper."}]
}'
Powinieneś zobaczyć serię linii data: kończących się informacjami o zużyciu. Jeśli to działa, klucz i URL są poprawne, a problem leży w interfejsie. Strona rozwiązywania problemów omawia typowe błędy, takie jak brakujący /v1 lub spacja na końcu klucza.
Te same ustawienia klienta, których używasz dla modeli lokalnych, działają również tutaj. Temperatura, top_p, sekwencje stop, seed i kary są przekazywane do modelu.
Używanie endpointa zdalnego we własnym kodzie
GUI to jeden klient. Skrypty i małe aplikacje to inni klienci, a endpoint zdalny działa ze standardowymi SDK OpenAI. Wywoływanie funkcji i tryb JSON są obsługiwane, co ma znaczenie, jeśli Twoje GUI lub agent ich używa.
from openai import OpenAI
client = OpenAI(base_url="https://api.ollamansfw.com/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
response_format={"type": "json_object"},
messages=[
{"role": "system", "content": "Reply with a JSON object with keys title and summary."},
{"role": "user", "content": "A short story about a lighthouse keeper."},
],
)
print(resp.choices[0].message.content)
W Node wzorzec jest identyczny:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.ollamansfw.com/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
stream: true,
messages: [{ role: "user", content: "Name three sailing knots." }],
});
for await (const part of stream) {
process.stdout.write(part.choices[0]?.delta?.content ?? "");
}
Szybki start zawiera więcej przykładów, w tym wywoływania funkcji z tool_choice.
Powszechne problemy i rozwiązania
Większość niepowodzeń w konfiguracji GUI wynika z krótkiej listy przyczyn.
- Pusta lista modeli dla połączenia lokalnego. Front-end nie może się połączyć z Ollama. Sprawdź adres i pamiętaj, że konteneryzowane GUI nie widzi Twojego hosta jako
localhost. - 401 z endpointu hostowanego. Klucz jest nieprawidłowy lub go brakuje. Wklej go ponownie bez spacji i upewnij się, że interfejs wysyła go jako token bearer.
- 404 przy każdym zapytaniu. Base URL prawdopodobnie nie zawiera
/v1lub zawiera go dwukrotnie. - Odpowiedzi się zatrzymują lub UI się zawiesza. Niektóre front-endy buforują strumieniowane wyjście przez proxy. Spróbuj powyższego testu curl, a jeśli strumieniowanie działa, sprawdź ustawienia proxy przed Twoim GUI.
- Wolne odpowiedzi lokalne. Model jest za duży na Twoją VRAM i przelany do pamięci systemowej. Wybierz mniejszą kwantyzację lub przełącz ten czat na połączenie hostowane.
Pamiętaj o jednej zasadzie dla aplikacji do powieści i postaci towarzyszących dla dorosłych: model zdalny odpowiada bez odrzuceń treści dla legalnego użytku dorosłego, ale treści seksualne z udziałem nieletnich są zawsze zabronione, a usługa egzekwuje to jako ścisłe ograniczenie.
Ograniczenia i koszty, o których warto wiedzieć w GUI
Front endy mogą wysyłać wiele żądań jednocześnie, na przykład gdy generują tytuł czatu w tle, podczas gdy główna odpowiedź jest strumieniowana. Pełny klucz pozwala na 8 równoległych żądań i 300 żądań na minutę. Klucz próbny pozwala na 2 równoległe i 60 na minutę. Żądanie strumieniowe zajmuje slot do końca strumienia. Jeśli przekroczysz limit, otrzymasz HTTP 429 z kodem rate_limited lub concurrency, a przy tymczasowym przeciążeniu 429 z Retry-After: 5. Wyłączenie generowania tytułów w tle w GUI to proste rozwiązanie dla klucza próbnego.
Koszt jest naliczany za token: $0.15 za 1M tokenów wejściowych i $0.50 za 1M tokenów wyjściowych. Tura czatu z 2000 tokenami historii i odpowiedzią 500 tokenów kosztuje $0.0003 plus $0.00025, co daje $0.00055. Nagłówki odpowiedzi zawierają X-Balance-USD, więc możesz obserwować zmniejszanie się kredytu. Szczegóły dotyczące doładowań znajdziesz na stronie z cenami. Ta strona obsługuje tylko kryptowaluty: USDT w sieci TRC20 lub USDC na Base, dowolna kwota całkowita od $20 do $500.
Okno kontekstu ma 100 000 tokenów, więc bardzo długie rozmowy będą kosztować więcej za turę, ponieważ cała historia jest wysyłana za każdym razem. Większość GUI ma ustawienie do przycinania lub podsumowywania starych wiadomości.
Więcej przewodników
Pytania i odpowiedzi
Czy Ollama ma własny interfejs graficzny?
Ollama to głównie serwer i narzędzie wiersza poleceń. Okna czatu pochodzą z oddzielnych projektów, takich jak Open WebUI lub klientów desktopowych, do których się łączysz.
Czy jeden interfejs GUI może używać modelu lokalnego i zdalnego?
Tak, jeśli interfejs obsługuje wiele połączeń. Dodaj Ollamę jako jedno połączenie, a URL kompatybilny z OpenAI jako drugie, a następnie wybieraj model dla każdej rozmowy.
Dlaczego mój interfejs GUI nie pokazuje modeli dla zdalnego endpointu?
Sprawdź, czy base URL kończy się na /v1, klucz nie zawiera zbędnych spacji, a GUI ma pozwolenie na wywoływanie GET /v1/models. Jeśli nadal nie działa, wpisz ręcznie ID modelu uncensored.
Co zrobić, jeśli otrzymam HTTP 429?
Osiągnąłeś limit zapytań lub współbieżności. Zmniejsz liczbę równoległych zapytań, poczekaj liczbę sekund podaną w nagłówku Retry-After i spróbuj ponownie.