Klienci Go dla Ollama: porównanie SDK oraz przykłady Qwen3/GPT-OSS
Integruj Ollama z Go: przewodnik po SDK, przykłady i najlepsze praktyki w środowisku produkcyjnym.
Ten przewodnik oferuje kompleksowy przegląd dostępnych Go SDKs dla Ollama i porównuje ich zestawy funkcji.
Zbadamy praktyczne przykłady w Go do wywoływania modeli Qwen3 i GPT-OSS hostowanych na Ollama — zarówno poprzez surowe wywołania REST API, jak i oficjalny klient Go — w tym szczegółowe obsługę trybów myślenia i niemyślenia w Qwen3.
Dlaczego Ollama + Go?
Ollama udostępnia mały, praktyczny HTTP API (zwykle działający na http://localhost:11434
), zaprojektowane do generowania i rozmów, z wbudowaną obsługą strumieniowania i możliwością zarządzania modelami. Dokumentacja oficjalna dokładnie pokrywa struktury żądań i odpowiedzi /api/generate
i /api/chat
oraz semantykę strumieniowania.
Go jest świetnym wyborem do budowania klientów Ollama dzięki silnej bibliotece standardowej dla HTTP, bardzo dobrej obsłudze JSON, oryginalnym prymitywom współbieżności i statycznie typowanym interfejsom, które wykrywają błędy w czasie kompilacji.
Na koniec października 2025 roku, oto opcje SDK w Go, które najprawdopodobniej rozważysz.
SDK w Go dla Ollama — co jest dostępne?
SDK / Pakiet | Status i „właściciel” | Zakres (Generowanie/Rozmowa/Strumieniowanie) | Zarządzanie modelami (pobieranie/lista itp.) | Dodatki / Uwagi |
---|---|---|---|---|
github.com/ollama/ollama/api |
Oficjalny pakiet wewnątrz repozytorium Ollama; używany przez sam CLI ollama |
Pełny zakres odwzorowany na REST; obsługiwane strumieniowanie | Tak | Uznawany za kanoniczny klient Go; API dokładnie odzwierciedla dokumentację. |
LangChainGo (github.com/tmc/langchaingo/llms/ollama ) |
Społeczny framework (LangChainGo) z modułem LLM dla Ollama | Rozmowa/Pełne kompletacje + strumieniowanie przez abstrakcje frameworku | Ograniczone (zarządzanie modelami nie jest głównym celem) | Świetny, jeśli chcesz łańcuchy, narzędzia, magazyny wektorów w Go; mniej to surowy SDK. |
github.com/swdunlop/ollama-client |
Społeczny klient | Skupienie się na rozmowie; dobre eksperymenty z wywołaniem narzędzi | Częściowe | Stworzony do eksperymentowania z wywołaniem narzędzi; nie jest pełnym powierzchnią 1:1. |
Inne społeczne SDK (np. ollamaclient , trzecie strony „go-ollama-sdk”) |
Społeczność | Wariuje | Wariuje | Jakość i zakres różnią się; oceniaj na repozytorium. |
Rekomendacja: Dla produkcji preferuj github.com/ollama/ollama/api
— jest utrzymywany wraz z projektem bazowym i dokładnie odzwierciedla API REST.
Qwen3 & GPT-OSS na Ollama: myślenie vs niemyślenie (co warto wiedzieć)
- Tryb myślenia w Ollama oddziela „rozumowanie” modelu od końcowego wyniku, gdy jest włączony. Ollama dokumentuje pierwszorzędne włączanie/wyłączanie myślenia w obsługiwanych modelach.
- (https://www.glukhov.org/pl/post/2025/10/qwen3-30b-vs-gpt-oss-20b/ “Qwen3:30b vs GPT-OSS:20b: Szczegóły techniczne, porównanie wydajności i prędkości”) obsługuje dynamiczne przełączanie: dodaj
/think
lub/no_think
w komunikatach systemowych/użytkownika, aby przełączać tryby po kolei; najnowsze polecenie wygrywa. - GPT-OSS: użytkownicy raportują, że wyłączenie myślenia (np.
/set nothink
lub--think=false
) może być niepewne nagpt-oss:20b
; planuj filtrację/ukrycie każdego rozumowania, którego nie powinien wyświetlać interfejs użytkownika.
Część 1 — Wywoływanie Ollama przez surowy REST (Go, net/http)
Udostępnione typy
Najpierw zdefiniujmy typy wspólne i pomocnicze funkcje, które wykorzystamy w naszych przykładach:
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"time"
)
// ---- Typy API do rozmowy ----
type ChatMessage struct {
Role string `json:"role"`
Content string `json:"content"`
}
type ChatRequest struct {
Model string `json:"model"`
Messages []ChatMessage `json:"messages"`
// Niektóre serwery udostępniają kontrolę myślenia jako flagę logiczną.
// Nawet jeśli zostanie pominięta, nadal możesz kontrolować Qwen3 za pomocą /think lub /no_think.
Think *bool `json:"think,omitempty"`
Stream *bool `json:"stream,omitempty"`
Options map[string]any `json:"options,omitempty"`
}
type ChatResponse struct {
Model string `json:"model"`
CreatedAt string `json:"created_at"`
Message struct {
Role string `json:"role"`
Content string `json:"content"`
Thinking string `json:"thinking,omitempty"` // obecny, gdy myślenie jest włączone
} `json:"message"`
Done bool `json:"done"`
}
// ---- Typy API do generowania ----
type GenerateRequest struct {
Model string `json:"model"`
Prompt string `json:"prompt"`
Think *bool `json:"think,omitempty"`
Stream *bool `json:"stream,omitempty"`
Options map[string]any `json:"options,omitempty"`
}
type GenerateResponse struct {
Model string `json:"model"`
CreatedAt string `json:"created_at"`
Response string `json:"response"` // końcowy tekst dla nie-strumieniowego
Thinking string `json:"thinking,omitempty"` // obecny, gdy myślenie jest włączone
Done bool `json:"done"`
}
// ---- Funkcje pomocnicze ----
func httpPostJSON(url string, payload any) ([]byte, error) {
body, err := json.Marshal(payload)
if err != nil {
return nil, err
}
c := &http.Client{Timeout: 60 * time.Second}
resp, err := c.Post(url, "application/json", bytes.NewReader(body))
if err != nil {
return nil, err
}
defer resp.Body.Close()
return io.ReadAll(resp.Body)
}
// bptr zwraca wskaźnik do wartości logicznej
func bptr(b bool) *bool { return &b }
Rozmowa — Qwen3 z myśleniem WŁĄCZONYM (i jak je WYŁĄCZYĆ)
func chatQwen3Thinking() error {
endpoint := "http://localhost:11434/api/chat"
req := ChatRequest{
Model: "qwen3:8b-thinking", // dowolny :*-thinking tag, który pobrano
Think: bptr(true),
Stream: bptr(false),
Messages: []ChatMessage{
{Role: "system", Content: "Jesteś precyzyjnym asystentem."},
{Role: "user", Content: "Wyjaśnij rekurencję z krótkim przykładem w Go."},
},
}
raw, err := httpPostJSON(endpoint, req)
if err != nil {
return err
}
var out ChatResponse
if err := json.Unmarshal(raw, &out); err != nil {
return err
}
fmt.Println("🧠 myślenie:\n", out.Message.Thinking)
fmt.Println("\n💬 odpowiedź:\n", out.Message.Content)
return nil
}
// Aby wyłączyć myślenie w kolejnym przejściu, należy:
// (a) ustawić Think=false, i/lub
// (b) dodać "/no_think" do najnowszego komunikatu systemowego/użytkownika (Qwen3 miękki przełącznik).
// Qwen3 uwzględnia najnowsze polecenie /think lub /no_think w wielokrotnych rozmowach.
func chatQwen3NoThinking() error {
endpoint := "http://localhost:11434/api/chat"
req := ChatRequest{
Model: "qwen3:8b-thinking",
Think: bptr(false),
Stream: bptr(false),
Messages: []ChatMessage{
{Role: "system", Content: "Jesteś krótki. /no_think"},
{Role: "user", Content: "Wyjaśnij rekurencję w jednym zdaniu."},
},
}
raw, err := httpPostJSON(endpoint, req)
if err != nil {
return err
}
var out ChatResponse
if err := json.Unmarshal(raw, &out); err != nil {
return err
}
// Oczekiwane myślenie jest puste; nadal obracaj się defensywnie.
if out.Message.Thinking != "" {
fmt.Println("🧠 myślenie (nieoczekiwane):\n", out.Message.Thinking)
}
fmt.Println("\n💬 odpowiedź:\n", out.Message.Content)
return nil
}
(Miękki przełącznik Qwen3 /think
i /no_think
jest dokumentowany przez zespół Qwen; ostatnie polecenie wygrywa w wielokrotnych rozmowach.)
Rozmowa — GPT-OSS z myśleniem (i zastrzeżenie)
func chatGptOss() error {
endpoint := "http://localhost:11434/api/chat"
req := ChatRequest{
Model: "gpt-oss:20b",
Think: bptr(true), // żądaj oddzielonego rozumowania, jeśli jest obsługiwane
Stream: bptr(false),
Messages: []ChatMessage{
{Role: "user", Content: "Co to jest programowanie dynamiczne? Wyjaśnij główną ideę."},
},
}
raw, err := httpPostJSON(endpoint, req)
if err != nil {
return err
}
var out ChatResponse
if err := json.Unmarshal(raw, &out); err != nil {
return err
}
// Znane zastrzeżenie: wyłączanie myślenia może nie całkowicie tłumić rozumowania na gpt-oss:20b.
// Zawsze filtruj/ukryj myślenie w interfejsie użytkownika, jeśli nie chcesz, by się pojawiło.
fmt.Println("🧠 myślenie:\n", out.Message.Thinking)
fmt.Println("\n💬 odpowiedź:\n", out.Message.Content)
return nil
}
Użytkownicy raportują, że wyłączanie myślenia na gpt-oss:20b (np. /set nothink
lub --think=false
) może być ignorowane — planuj filtrowanie po stronie klienta, jeśli jest to konieczne.
Generowanie — Qwen3 i GPT-OSS
func generateQwen3() error {
endpoint := "http://localhost:11434/api/generate"
req := GenerateRequest{
Model: "qwen3:4b-thinking",
Prompt: "W 2–3 zdaniach, do czego służą drzewa B w bazach danych?",
Think: bptr(true),
}
raw, err := httpPostJSON(endpoint, req)
if err != nil {
return err
}
var out GenerateResponse
if err := json.Unmarshal(raw, &out); err != nil {
return err
}
if out.Thinking != "" {
fmt.Println("🧠 myślenie:\n", out.Thinking)
}
fmt.Println("\n💬 odpowiedź:\n", out.Response)
return nil
}
func generateGptOss() error {
endpoint := "http://localhost:11434/api/generate"
req := GenerateRequest{
Model: "gpt-oss:20b",
Prompt: "Krótko wyjaśnij propagację wsteczną w sieciach neuronowych.",
Think: bptr(true),
}
raw, err := httpPostJSON(endpoint, req)
if err != nil {
return err
}
var out GenerateResponse
if err := json.Unmarshal(raw, &out); err != nil {
return err
}
if out.Thinking != "" {
fmt.Println("🧠 myślenie:\n", out.Thinking)
}
fmt.Println("\n💬 odpowiedź:\n", out.Response)
return nil
}
Struktury REST i zachowanie strumieniowe pochodzą bezpośrednio z dokumentacji API Ollama.
Część 2 — Wywoływanie Ollama przez oficjalny SDK w Go (github.com/ollama/ollama/api
)
Oficjalny pakiet udostępnia Client
z metodami odpowiadającymi API REST. Sam CLI Ollama używa tego pakietu do komunikacji z usługą, co czyni go najbezpieczniejszym wyborem pod względem kompatybilności.
Instalacja
go get github.com/ollama/ollama/api
Rozmowa — Qwen3 (myślenie WŁĄCZONE / WYŁĄCZONE)
package main
import (
"context"
"fmt"
"log"
"github.com/ollama/ollama/api"
)
func chatWithQwen3Thinking(ctx context.Context, thinking bool) error {
client, err := api.ClientFromEnvironment() // uwzględnia OLLAMA_HOST, jeśli jest ustawiony
if err != nil {
return err
}
req := &api.ChatRequest{
Model: "qwen3:8b-thinking",
// Wiele konstrukcji serwera udostępnia myślenie jako flagę najwyższego poziomu;
// dodatkowo możesz kontrolować Qwen3 za pomocą /think lub /no_think w komunikatach.
Think: api.Ptr(thinking),
Messages: []api.Message{
{Role: "system", Content: "Jesteś precyzyjnym asystentem."},
{Role: "user", Content: "Wyjaśnij sortowanie przez scalanie z krótkim fragmentem kodu w Go."},
},
}
var resp api.ChatResponse
if err := client.Chat(ctx, req, &resp); err != nil {
return err
}
if resp.Message.Thinking != "" {
fmt.Println("🧠 myślenie:\n", resp.Message.Thinking)
}
fmt.Println("\n💬 odpowiedź:\n", resp.Message.Content)
return nil
}
func main() {
ctx := context.Background()
if err := chatWithQwen3Thinking(ctx, true); err != nil {
log.Fatal(err)
}
// Przykład: bez myślenia
if err := chatWithQwen3Thinking(ctx, false); err != nil {
log.Fatal(err)
}
}
Rozmowa — GPT-OSS (obrona przed rozumowaniem)
func chatWithGptOss(ctx context.Context) error {
client, err := api.ClientFromEnvironment()
if err != nil {
return err
}
req := &api.ChatRequest{
Model: "gpt-oss:20b",
Think: api.Ptr(true),
Messages: []api.Message{
{Role: "user", Content: "Co to jest memoizacja i kiedy jest przydatna?"},
},
}
var resp api.ChatResponse
if err := client.Chat(ctx, req, &resp); err != nil {
return err
}
// Jeśli zamierzasz ukryć rozumowanie, zrób to tutaj niezależnie od flag.
if resp.Message.Thinking != "" {
fmt.Println("🧠 myślenie:\n", resp.Message.Thinking)
}
fmt.Println("\n💬 odpowiedź:\n", resp.Message.Content)
return nil
}
Generowanie — Qwen3 & GPT-OSS
func generateWithQwen3(ctx context.Context) error {
client, err := api.ClientFromEnvironment()
if err != nil {
return err
}
req := &api.GenerateRequest{
Model: "qwen3:4b-thinking",
Prompt: "Podsumuj rolę drzewa B w indeksowaniu.",
Think: api.Ptr(true),
}
var resp api.GenerateResponse
if err := client.Generate(ctx, req, &resp); err != nil {
return err
}
if resp.Thinking != "" {
fmt.Println("🧠 myślenie:\n", resp.Thinking)
}
fmt.Println("\n💬 odpowiedź:\n", resp.Response)
return nil
}
func generateWithGptOss(ctx context.Context) error {
client, err := api.ClientFromEnvironment()
if err != nil {
return err
}
req := &api.GenerateRequest{
Model: "gpt-oss:20b",
Prompt: "Wyjaśnij gradient descent w prostych słowach.",
Think: api.Ptr(true),
}
var resp api.GenerateResponse
if err := client.Generate(ctx, req, &resp); err != nil {
return err
}
if resp.Thinking != "" {
fmt.Println("🧠 myślenie:\n", resp.Thinking)
}
fmt.Println("\n💬 odpowiedź:\n", resp.Response)
return nil
}
Powierzchnia oficjalnego pakietu odzwierciedla dokumentację REST i jest aktualizowana wraz z projektem bazowym.
Strumieniowe odpowiedzi
Dla rzeczywistego strumieniowania ustaw Stream: bptr(true)
w swoim żądaniu. Odpowiedź zostanie dostarczona jako fragmenty JSON oddzielone nową linią:
func streamChatExample() error {
endpoint := "http://localhost:11434/api/chat"
req := ChatRequest{
Model: "qwen3:8b-thinking",
Think: bptr(true),
Stream: bptr(true), // Włącz strumieniowanie
Messages: []ChatMessage{
{Role: "user", Content: "Wyjaśnij algorytm sortowania szybkiego krok po kroku."},
},
}
body, _ := json.Marshal(req)
resp, err := http.Post(endpoint, "application/json", bytes.NewReader(body))
if err != nil {
return err
}
defer resp.Body.Close()
decoder := json.NewDecoder(resp.Body)
for {
var chunk ChatResponse
if err := decoder.Decode(&chunk); err == io.EOF {
break
} else if err != nil {
return err
}
// Przetwarzaj myślenie i zawartość, gdy przychodzą
if chunk.Message.Thinking != "" {
fmt.Print(chunk.Message.Thinking)
}
fmt.Print(chunk.Message.Content)
if chunk.Done {
break
}
}
return nil
}
Z oficjalnym SDK, użyj funkcji callback do obsługi fragmentów strumienia:
func streamWithOfficialSDK(ctx context.Context) error {
client, _ := api.ClientFromEnvironment()
req := &api.ChatRequest{
Model: "qwen3:8b-thinking",
Think: api.Ptr(true),
Messages: []api.Message{
{Role: "user", Content: "Wyjaśnij drzewa wyszukiwania binarnego."},
},
}
err := client.Chat(ctx, req, func(resp api.ChatResponse) error {
if resp.Message.Thinking != "" {
fmt.Print(resp.Message.Thinking)
}
fmt.Print(resp.Message.Content)
return nil
})
return err
}
Praca z Qwen3 myślenie vs niemyślenie (praktyczne wskazówki)
-
Dwa mechanizmy:
- Flagę logiczną
myślenie
, wspieraną przez funkcję myślenia Ollama; i - Miękki przełącznik Qwen3
/think
i/no_think
w najnowszym komunikacie systemowym/użytkownika. Najnowsze polecenie rządzi kolejnymi przejściami.
- Flagę logiczną
-
Domyślna postawa: niemyślenie dla szybkich odpowiedzi; zwiększ do myślenia dla zadań wymagających krok po kroku rozumowania (matematyka, planowanie, debugowanie, złożone analizy kodu).
-
Interfejsy strumieniowe: gdy myślenie jest włączone, możesz zobaczyć przemieszane rozumowanie/zawartość w ramkach strumienia — buforuj lub renderuj je osobno i daj użytkownikom przełącznik „pokaż rozumowanie”. (Zobacz dokumentację API dla formatu strumienia.)
-
Wielokrotna rozmowa: Qwen3 pamięta tryb myślenia z poprzednich przejść. Jeśli chcesz przełączać się w środku rozmowy, użyj zarówno flagi, jak i miękkiego przełącznika polecenia dla niezawodności.
Uwagi dotyczące GPT-OSS
- Traktuj rozumowanie jako obecne nawet jeśli spróbowałeś go wyłączyć; filtruj po stronie klienta, jeśli Twoja UX nie powinna go wyświetlać.
- Dla aplikacji produkcyjnych korzystających z GPT-OSS, zaimplementuj logikę filtrowania po stronie klienta, która może wykrywać i usuwać wzorce rozumowania, jeśli to konieczne.
- Dokładnie przetestuj swoją wersję modelu GPT-OSS, ponieważ zachowanie może się różnić między różnymi kwantyzacjami i wersjami.
Najlepsze praktyki i wskazówki dla produkcji
Obsługa błędów i czasów oczekiwania
Zawsze implementuj odpowiednie obsługę czasów oczekiwania i odzyskiwania błędów:
func robustChatRequest(ctx context.Context, model string, messages []api.Message) (*api.ChatResponse, error) {
// Ustaw rozsądną granicę czasu
ctx, cancel := context.WithTimeout(ctx, 2*time.Minute)
defer cancel()
client, err := api.ClientFromEnvironment()
if err != nil {
return nil, fmt.Errorf("tworzenie klienta: %w", err)
}
req := &api.ChatRequest{
Model: model,
Messages: messages,
Options: map[string]interface{}{
"temperature": 0.7,
"num_ctx": 4096, // rozmiar okna kontekstu
},
}
var resp api.ChatResponse
if err := client.Chat(ctx, req, &resp); err != nil {
return nil, fmt.Errorf("żądanie rozmowy nie powiodło się: %w", err)
}
return &resp, nil
}
Pule połączeń i ponowne użycie
Ponownie używaj klienta Ollama w wielu żądaniach zamiast tworzyć nowego każdego razu:
type OllamaService struct {
client *api.Client
}
func NewOllamaService() (*OllamaService, error) {
client, err := api.ClientFromEnvironment()
if err != nil {
return nil, err
}
return &OllamaService{client: client}, nil
}
func (s *OllamaService) Chat(ctx context.Context, req *api.ChatRequest) (*api.ChatResponse, error) {
var resp api.ChatResponse
if err := s.client.Chat(ctx, req, &resp); err != nil {
return nil, err
}
return &resp, nil
}
Konfiguracja środowiska
Używaj zmiennych środowiskowych dla elastycznej wdrożenie:
export OLLAMA_HOST=http://localhost:11434
export OLLAMA_NUM_PARALLEL=2
export OLLAMA_MAX_LOADED_MODELS=2
Oficjalny SDK automatycznie uwzględnia OLLAMA_HOST
przez api.ClientFromEnvironment()
.
Monitorowanie i logowanie
Zaimplementuj strukturalne logowanie dla systemów produkcyjnych:
func loggedChat(ctx context.Context, logger *log.Logger, req *api.ChatRequest) error {
start := time.Now()
client, _ := api.ClientFromEnvironment()
var resp api.ChatResponse
err := client.Chat(ctx, req, &resp)
duration := time.Since(start)
logger.Printf("model=%s duration=%v error=%v tokens=%d",
req.Model, duration, err, len(resp.Message.Content))
return err
}
Podsumowanie
-
Dla projektów w Go,
github.com/ollama/ollama/api
jest najbardziej kompletnym, gotowym do produkcji wyborem. Jest utrzymywany wraz z projektem bazowym Ollama, używany przez oficjalny CLI i oferuje kompleksowe pokrycie API z gwarantowaną kompatybilnością. -
Dla wyższych poziomów abstrakcji, rozważ LangChainGo, gdy potrzebujesz łańcuchów, narzędzi, magazynów wektorów i potoków RAG — choć zrezygnujesz z pewnej kontroli na niskim poziomie na rzecz wygody.
-
Qwen3 daje Ci czystą, niezawodną kontrolę nad trybem myślenia zarówno przez flagi, jak i przełączniki komunikatów (
/think
,/no_think
), co czyni go idealnym dla aplikacji wymagających zarówno szybkich odpowiedzi, jak i głębokiego rozumowania. -
Dla GPT-OSS, zawsze planuj oczyszczenie wyjścia rozumowania po stronie klienta, gdy jest to konieczne, ponieważ flaga wyłączania myślenia może nie być zawsze spójnie przestrzegana.
-
W produkcji, zaimplementuj odpowiednią obsługę błędów, pulę połączeń, czas oczekiwania i monitorowanie, aby zbudować odporną aplikację z Ollama.
Kombinacja silnego typowania w Go, doskonałej obsługi współbieżności i prostego API Ollama czyni z niego idealny stos dla budowania aplikacji z AI — od prostych chatbotów po złożone systemy RAG.
Kluczowe wnioski
Oto szybki przewodnik do wyboru swojego podejścia:
Przypadek użycia | Zalecany sposób | Dlaczego |
---|---|---|
Aplikacja produkcyjna | github.com/ollama/ollama/api |
Oficjalna obsługa, kompleksowe pokrycie API, utrzymywane wraz z projektem bazowym |
Potoki RAG/łańcuchy/narzędzia | LangChainGo | Wysokie poziomy abstrakcji, integracje z magazynami wektorów |
Nauka/eksperymentacja | Surowy REST z net/http | Pełna przejrzystość, brak zależności, edukacyjna |
Szybkie prototypowanie | Oficjalny SDK | Zrównoważenie prostoty i mocy |
Interfejsy strumieniowe do rozmowy | Oficjalny SDK z callbackami | Wbudowana obsługa strumieniowania, czysty API |
Wskazówki dotyczące wyboru modelu:
- Qwen3: Najlepszy dla aplikacji wymagających kontroli nad trybem myślenia, niezawodnych rozmów wielokrotnych
- GPT-OSS: Silna wydajność, ale wymaga obrony przy wyjściu z rozumowania
- Inne modele: Dokładnie testuj; zachowanie myślenia różni się w zależności od rodziny modeli
Odnośniki i dalsze materiały do przeczytania
Oficjalna dokumentacja
- Dokumentacja API Ollama — Pełna dokumentacja REST API
- Oficjalny pakiet Go Ollama — Dokumentacja SDK Go
- Repozytorium GitHub Ollama — Kod źródłowy i zgłoszenia problemów
Alternatywy SDK Go
- Integracja Ollama w LangChainGo — Dla aplikacji opartych na łańcuchach
- swdunlop/ollama-client — Klient społecznościowy z wywołaniem narzędzi
- xyproto/ollamaclient — Inna opcja społecznościowa
Zasoby specyficzne dla modeli
- Dokumentacja Qwen — Oficjalne informacje o modelu Qwen
- Informacje o modelu GPT-OSS — Szczegóły modelu GPT-OSS
Powiązane tematy
- Tworzenie aplikacji RAG w Go — Przykłady LangChainGo
- Pakiet context w Go — Niezwykle ważny dla czasów oczekiwania i anulowania
- Najlepsze praktyki wdrażania klienta HTTP w Go — Dokumentacja biblioteki standardowej
Inne przydatne linki
- Zainstaluj i skonfiguruj Ollama
- Karta pamięci Ollama
- Karta pamięci Go
- Jak Ollama obsługuje żądania równoległe
- Ponowne rangowanie dokumentów tekstowych z użyciem Ollama i modelu Qwen3 Embedding — w Go
- Porównanie ORM dla PostgreSQL w Go: GORM vs Ent vs Bun vs sqlc
- Ograniczanie LLM za pomocą strukturalnego wyjścia: Ollama, Qwen3 & Python lub Go
- Użycie Ollama w kodzie Pythona
- Porównanie LLM: Qwen3:30b vs GPT-OSS:20b
- Problemy z wyjściem strukturalnym w Ollama GPT-OSS