~/ / Artykuły o AI / Lokalne LLM na VPS / Wywołanie lokalnego modelu z własnego kodu: ustrukturyzowane odpowiedzi i API zgodne z OpenAI w Ollama
Wywołanie lokalnego modelu z własnego kodu: ustrukturyzowane odpowiedzi i API zgodne z OpenAI w Ollama
Gdy Ollama działa już na twoim serwerze, twój własny kod potrzebuje dwóch rzeczy: sposobu na uzyskiwanie odpowiedzi w stałym kształcie oraz sposobu na dotarcie do serwera z bibliotek, które już mówią językiem API OpenAI. Ollama dokumentuje jedno i drugie. Ten artykuł streszcza stronę o ustrukturyzowanych odpowiedziach (structured outputs) i stronę o zgodności z OpenAI oraz wskazuje, co według dokumentacji nie jest obsługiwane.
Opublikowano: · 4 min czytania · Sprawdzono z oficjalną dokumentacją Ollama dnia 2026-10-26. Obsługiwane funkcje zmieniają się między wersjami, więc potwierdź je w aktualnych dokumentach.
Dwa sposoby wywołania tego samego serwera
Ollama ma własne API, w którym przykłady z dokumentacji wysyłają żądania POST na adres http://localhost:11434/api/chat. Oferuje też API zgodne z OpenAI pod ścieżką /v1/, dzięki czemu istniejące klienty OpenAI mogą się z nią komunikować po zmianie bazowego adresu URL.
| Element | Native API | OpenAI-compatible API |
|---|---|---|
| Adres bazowy | http://localhost:11434/api/chat | http://localhost:11434/v1/ |
| Klucz API | nie wspomniany w przykładach | api_key='ollama', który strona oznacza jako wymagany, ale ignorowany |
| Pole ustrukturyzowanej odpowiedzi | format | response_format |
Wiersz o kluczu API pochodzi z przykładu dokumentacji dla serwera lokalnego. W przypadku chmury strona pokazuje base_url https://ollama.com/v1 z kluczem API z twojego konta Ollama, co jest innym przypadkiem.
Ustrukturyzowane odpowiedzi: pole format
Pole format ogranicza odpowiedź. Przyjmuje ciąg json dla ogólnego JSON albo obiekt schematu JSON. W przykładach cURL z dokumentacji treść żądania ma cztery pola: model, messages, stream ustawione na false oraz format. Schemat w przykładach zawiera type, properties i required.
| Wartość format | Skutek według dokumentacji |
|---|---|
| "json" | Model odpowiada ogólnym JSON |
| obiekt schematu JSON | Odpowiedź jest ograniczona do tego schematu |
- Dokumentacja mówi, że najlepiej przekazać schemat JSON także jako ciąg znaków w prompcie, aby ugruntować odpowiedź modelu.
- Mówi też, by obniżyć temperature, na przykład do 0, dla bardziej deterministycznych odpowiedzi.
- Dla Pythona i JavaScriptu sugeruje definiowanie schematów za pomocą Pydantic lub Zod, aby można było użyć ich ponownie do walidacji.
- Modele wizyjne przyjmują ten sam parametr format. Przykład wizyjny w dokumentacji przekazuje obraz razem ze schematem.
- Według tej strony chmura Ollama obecnie nie obsługuje ustrukturyzowanych odpowiedzi.
Zanim zaczniesz polegać na schemacie, sprawdź go. JSON Schema Validator poniżej mówi, czy sam schemat jest poprawny i czy przykładowa odpowiedź do niego pasuje.
Sprawdź schemat, który wysyłasz
Schemat z błędem może zawieść późno, dopiero gdy pierwsze żądanie dotrze do modelu. Wklej schemat i próbkę JSON, której oczekujesz, i zobacz, czy do siebie pasują.
Wypróbuj: JSON Schema Validator
Dla obsługiwanych słów kluczowych stosuje JSON Schema Draft 2020-12. Czyta $ref tylko wewnątrz tego samego schematu.
Wszystko działa w twojej przeglądarce. Schemat i dane nie są przesyłane.
Punkty końcowe zgodne z OpenAI
| Punkt końcowy | Co wymienia strona | Wymienione jako nieobsługiwane |
|---|---|---|
| /v1/chat/completions | czat, strumieniowanie, tryb JSON (JSON mode), powtarzalne wyniki, obraz, tools, sterowanie rozumowaniem | logprobs, tool_choice, logit_bias, user, n; adresy URL obrazów (użyj base64) |
| /v1/completions | uzupełnienia, strumieniowanie, tryb JSON (JSON mode), powtarzalne wyniki | logprobs, best_of, echo, logit_bias, user, n |
| /v1/models | lista i pobieranie modeli | nie wymieniono |
| /v1/embeddings | dane wejściowe jako ciąg znaków lub tablica ciągów, format kodowania, wymiary | tablice tokenów, user |
| /v1/responses | strumieniowanie, narzędzia do wywoływania funkcji, podsumowania rozumowania | żądania ze stanem: previous_response_id, conversation, truncation |
- Dla punktu końcowego czatu strona wymienia wśród obsługiwanych pól żądania: response_format, tools, stream, stream_options, seed, stop, temperature, top_p, max_tokens, frequency_penalty i presence_penalty.
- Strona stwierdza, że ustrukturyzowane odpowiedzi działają przez API zgodne z OpenAI za pomocą response_format.
- Jeśli twój kod używa pola z kolumny nieobsługiwanych, zmień kod, zamiast oczekiwać, że serwer je zignoruje. Dokumentacja nie mówi, jak obsługiwane jest każde z nieobsługiwanych pól, poza mową (speech), gdzie nieobsługiwane wartości zwracają błąd 400.
Narzędzia i format definicji narzędzi
Zarówno natywne API, jak i punkt końcowy czatu zgodny z OpenAI przyjmują tools. Jeśli opisujesz narzędzia w kształcie OpenAI, Tool Definition Checker na tej stronie sprawdza nazwy, opisy i schematy parametrów pod kątem tego formatu, zanim je wyślesz.
Gdy odpowiedź nadal nie jest poprawnym JSON
Ograniczenie wyniku ma dać poprawny JSON, ale twój kod może nadal otrzymać tekst od innego modelu, starszej wersji lub z żądania bez format. Narzędzie poniżej naprawia typowe usterki, takie jak bloki kodu w ogrodzeniach, końcowe przecinki i niewłaściwe cudzysłowy, a gdy naprawa zmienia znaczenie, ostrzega o tym.
Wypróbuj: LLM JSON Repair
Stosowane są tylko poprawki z jednym jasnym rozwiązaniem. Wszystko inne jest zgłaszane z podaniem pozycji, zamiast być zgadywane.
Wszystko działa w twojej przeglądarce. Wklejony tekst nie jest wysyłany.
Uwaga o dostępie
Lokalny przykład w dokumentacji mówi, że klucz API jest wymagany, ale ignorowany. Nasza interpretacja, a nie stwierdzenie z dokumentów: klucz nie chroni serwera, więc zostaw Ollama pod domyślnym adresem, a uwierzytelnianie postaw przed nią, jeśli inna maszyna ma mieć do niej dostęp.
Źródła
Czytaj dalej
- Open WebUI na VPS: uruchom go w Dockerze i połącz z OllamaUruchom Open WebUI w Dockerze i połącz go z Ollama na własnym serwerze: polecenia, pierwsze konto, dwa typy połączenia i aktualizacja.
- Co potrafi model lokalny? Tools, thinking, vision i embeddings w Ollamie oraz co zmieści się na VPSTools, thinking, vision, embeddings: co znaczą etykiety w bibliotece Ollama, które modele je mają i jak duże są pobrania.
- Instalacja Ollama na VPS i utrzymanie jej w ruchu: instalacja, usługa systemd, ustawienia i aktualizacjeInstalacja Ollama na VPS z Linuksem i utrzymanie jej w ruchu: polecenie instalacji, usługa systemd, zmienne środowiskowe, przechowywanie modeli i aktualizacje, na podstawie oficjalnej dokumentacji.
- Ile pamięci potrzebuje lokalny LLM na VPS? Plik modelu plus pamięć podręczna KVPlik modelu plus pamięć podręczna KV: co biblioteka Ollama, FAQ Ollama i oficjalne konfiguracje modeli mówią o pamięci potrzebnej lokalnemu LLM na VPS.