Go-Client für Ollama: SDK-Vergleich und Qwen3/GPT-OSS-Beispiele
Ollama mit Go integrieren: SDK-Anleitung, Beispiele und bewährte Methoden für die Produktion.
Dieser Leitfaden bietet einen umfassenden Überblick über die verfügbaren Go SDKs für Ollama und vergleicht ihre Funktionsumfänge.
Wir werden praktische Go-Beispiele untersuchen, um Qwen3 und GPT-OSS-Modelle, die auf Ollama gehostet sind, zu aufrufen – sowohl über rohe REST-API-Aufrufe als auch über die offizielle Go-Client-Bibliothek, einschließlich detaillierter Behandlung von Denk- und Nicht-Denk-Modi in Qwen3.

Warum Ollama + Go?
Ollama stellt eine kleine, pragmatische HTTP-API (typischerweise unter http://localhost:11434) bereit, die für Erzeugung und Chat-Arbeitslasten konzipiert ist, mit eingebauter Unterstützung für Streaming und Modellverwaltung. Die offizielle Dokumentation behandelt gründlich die Strukturen und Streaming-Semantik der Anfragen/Antworten für /api/generate und /api/chat.
Go ist eine hervorragende Wahl für die Erstellung von Ollama-Clients aufgrund der starken Unterstützung der Standardbibliothek für HTTP, der hervorragenden JSON-Verarbeitung, der nativen Konkurrenzprimitive und statisch typisierten Schnittstellen, die Fehler zur Compilezeit erkennen. Um zu sehen, wie Ollama mit vLLM, Docker Model Runner, LocalAI und Cloud-Anbietern vergleicht — einschließlich der Entscheidung, welchen zu wählen — siehe LLM-Hosting: Lokal, Selbstgehostet und Cloud-Infrastruktur im Vergleich.
Stand Oktober 2025 sind hier die Go-SDK-Optionen, die Sie vermutlich in Betracht ziehen werden.
Go-SDKs für Ollama — was ist verfügbar?
| SDK / Paket | Status & „Besitzer“ | Umfang (Erzeugen/Chat/Streaming) | Modellverwaltung (pull/list/etc.) | Extras / Hinweise |
|---|---|---|---|---|
github.com/ollama/ollama/api |
Offizielles Paket innerhalb des Ollama-Repositorys; von der ollama CLI selbst verwendet |
Vollständige Abdeckung, gemappt auf REST; Streaming unterstützt | Ja | Wird als kanonisches Go-Client-SDK betrachtet; API spiegelt Dokumentation nahezu wider. |
LangChainGo (github.com/tmc/langchaingo/llms/ollama) |
Community-Framework (LangChainGo) mit Ollama-LLM-Modul | Chat/Completion + Streaming über Framework-Abstraktionen | Begrenzt (Modellverwaltung ist nicht primäres Ziel) | Gut, wenn Sie Ketten, Tools, Vektor-Speicher in Go benötigen; weniger eine Roh-SDK. |
github.com/swdunlop/ollama-client |
Community-Client | Fokus auf Chat; gute Tool-Calling-Experimente | Teils | Für Experimente mit Tool-Calling gebaut; nicht eine 1:1 vollständige Oberfläche. |
Andere Community-SDKs (z. B. ollamaclient, Drittanbieter-„go-ollama-sdk“) |
Community | Variiert | Variiert | Qualität und Abdeckung variiert; bewerten Sie pro Repository. |
Empfehlung: Für Produktionsumgebungen bevorzugen Sie github.com/ollama/ollama/api — es wird mit dem Kernprojekt gepflegt und spiegelt die REST-API nahezu wider.
Qwen3 & GPT-OSS auf Ollama: Denken vs. Nicht-Denken (was Sie wissen sollten)
- Denkmodus in Ollama trennt den Modells „Denken“ von der finalen Ausgabe, wenn er aktiviert ist. Ollama dokumentiert eine erste Klasse Aktivierung/Deaktivierung des Denkens über alle unterstützten Modelle hinweg.
- (https://www.glukhov.org/de/llm-performance/benchmarks/qwen3-30b-vs-gpt-oss-20b/ “Qwen3:30b vs GPT-OSS:20b: Technische Details, Leistungs- und Geschwindigkeitsvergleich”) unterstützt dynamisches Umschalten: fügen Sie
/thinkoder/no_thinkin System-/Benutzer-Nachrichten ein, um Modi Schritt für Schritt zu wechseln; die neueste Anweisung gewinnt. - GPT-OSS: Benutzer berichten, dass das Deaktivieren des Denkens (z. B.
/set nothinkoder--think=false) aufgpt-oss:20bunzuverlässig sein kann; planen Sie, Filter/Verstecken aller Gründe, die Ihre Benutzeroberfläche nicht anzeigen sollte.
Teil 1 — Aufrufen von Ollama über rohe REST (Go, net/http)
Gemeinsame Typen
Zuerst definieren wir die gemeinsamen Typen und Hilfsfunktionen, die wir in unseren Beispielen verwenden werden:
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"time"
)
// ---- Chat API Typen ----
type ChatMessage struct {
Role string `json:"role"`
Content string `json:"content"`
}
type ChatRequest struct {
Model string `json:"model"`
Messages []ChatMessage `json:"messages"`
// Einige Server stellen das Denken als boolesches Flag dar.
// Selbst wenn es weggelassen wird, können Sie Qwen3 über /think oder /no_think-Tagen steuern.
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"` // vorhanden, wenn Denken aktiviert ist
} `json:"message"`
Done bool `json:"done"`
}
// ---- Generate API Typen ----
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"` // finale Text für nicht-Streaming
Thinking string `json:"thinking,omitempty"` // vorhanden, wenn Denken aktiviert ist
Done bool `json:"done"`
}
// ---- Hilfsfunktionen ----
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 gibt einen Zeiger auf einen booleschen Wert zurück
func bptr(b bool) *bool { return &b }
Chat — Qwen3 mit Denken aktiviert (und wie man es deaktiviert)
func chatQwen3Thinking() error {
endpoint := "http://localhost:11434/api/chat"
req := ChatRequest{
Model: "qwen3:8b-thinking", // any :*-thinking tag you have pulled
Think: bptr(true),
Stream: bptr(false),
Messages: []ChatMessage{
{Role: "system", Content: "You are a precise assistant."},
{Role: "user", Content: "Explain recursion with a short Go example."},
},
}
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("🧠 thinking:\n", out.Message.Thinking)
fmt.Println("\n💬 answer:\n", out.Message.Content)
return nil
}
// Um Denken im nächsten Schritt zu deaktivieren:
// (a) setzen Sie Think=false, und/oder
// (b) fügen Sie "/no_think" zur neuesten System-/Benutzer-Nachricht hinzu (Qwen3 weiches Schalter).
// Qwen3 beachtet die neueste /think- oder /no_think-Anweisung in mehrschrittigen Chats.
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: "You are brief. /no_think"},
{Role: "user", Content: "Explain recursion in one sentence."},
},
}
raw, err := httpPostJSON(endpoint, req)
if err != nil {
return err
}
var out ChatResponse
if err := json.Unmarshal(raw, &out); err != nil {
return err
}
// Erwartet, dass thinking leer ist; defensive Handhabung dennoch.
if out.Message.Thinking != "" {
fmt.Println("🧠 thinking (unerwartet):\n", out.Message.Thinking)
}
fmt.Println("\n💬 answer:\n", out.Message.Content)
return nil
}
(Qwen3s /think und /no_think weiches Schalter ist von der Qwen-Team dokumentiert; die letzte Anweisung gewinnt in mehrschrittigen Chats.)
Chat — GPT-OSS mit Denken (und eine Einschränkung)
func chatGptOss() error {
endpoint := "http://localhost:11434/api/chat"
req := ChatRequest{
Model: "gpt-oss:20b",
Think: bptr(true), // Anfrage getrenntes Denken, wenn unterstützt
Stream: bptr(false),
Messages: []ChatMessage{
{Role: "user", Content: "Was ist dynamisches Programmieren? Erkläre das Kernkonzept."},
},
}
raw, err := httpPostJSON(endpoint, req)
if err != nil {
return err
}
var out ChatResponse
if err := json.Unmarshal(raw, &out); err != nil {
return err
}
// Bekanntes Eigenart: das Deaktivieren von Denken kann auf gpt-oss:20b nicht vollständig unterdrücken.
// Filteren/Schutz für Denken in der UI planen, wenn Sie es nicht anzuzeigen wünschen.
fmt.Println("🧠 thinking:\n", out.Message.Thinking)
fmt.Println("\n💬 answer:\n", out.Message.Content)
return nil
}
Benutzer berichten, dass das Deaktivieren von Denken auf gpt-oss:20b (z. B. /set nothink oder --think=false) ignoriert werden kann — planen Sie bei Bedarf clientseitige Filterung.
Generieren — Qwen3 und GPT-OSS
func generateQwen3() error {
endpoint := "http://localhost:11434/api/generate"
req := GenerateRequest{
Model: "qwen3:4b-thinking",
Prompt: "In 2–3 Sätzen, wofür werden B-Bäume in Datenbanken verwendet?",
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("🧠 thinking:\n", out.Thinking)
}
fmt.Println("\n💬 answer:\n", out.Response)
return nil
}
func generateGptOss() error {
endpoint := "http://localhost:11434/api/generate"
req := GenerateRequest{
Model: "gpt-oss:20b",
Prompt: "Erkläre kurz das Rückwärtspropagieren in neuronalen Netzwerken.",
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("🧠 thinking:\n", out.Thinking)
}
fmt.Println("\n💬 answer:\n", out.Response)
return nil
}
REST-Formate und Streaming-Verhalten stammen direkt aus der Ollama-API-Referenz.
Teil 2 — Aufrufen von Ollama über die offizielle Go-SDK (github.com/ollama/ollama/api)
Das offizielle Paket stellt eine Client mit Methoden bereit, die den REST-API entsprechen. Der Ollama CLI selbst verwendet dieses Paket, um mit dem Dienst zu kommunizieren, was es zur sichersten Wahl für die Kompatibilität macht.
Installieren
go get github.com/ollama/ollama/api
Chat — Qwen3 (Denken aktiviert / deaktiviert)
package main
import (
"context"
"fmt"
"log"
"github.com/ollama/ollama/api"
)
func chatWithQwen3Thinking(ctx context.Context, thinking bool) error {
client, err := api.ClientFromEnvironment() // beachtet OLLAMA_HOST, wenn festgelegt
if err != nil {
return err
}
req := &api.ChatRequest{
Model: "qwen3:8b-thinking",
// Viele Serverbauweisen stellen Denken als oberstes Flag dar;
// zusätzlich können Sie Qwen3 über /think oder /no_think in Nachrichten steuern.
Think: api.Ptr(thinking),
Messages: []api.Message{
{Role: "system", Content: "You are a precise assistant."},
{Role: "user", Content: "Erkläre Merge Sort mit einem kurzen Go-Snippet."},
},
}
var resp api.ChatResponse
if err := client.Chat(ctx, req, &resp); err != nil {
return err
}
if resp.Message.Thinking != "" {
fmt.Println("🧠 thinking:\n", resp.Message.Thinking)
}
fmt.Println("\n💬 answer:\n", resp.Message.Content)
return nil
}
func main() {
ctx := context.Background()
if err := chatWithQwen3Thinking(ctx, true); err != nil {
log.Fatal(err)
}
// Beispiel: nicht-denkend
if err := chatWithQwen3Thinking(ctx, false); err != nil {
log.Fatal(err)
}
}
Chat — GPT-OSS (Vorsicht bei der Verarbeitung von Denken)
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: "Was ist Memoisierung und wann ist sie nützlich?"},
},
}
var resp api.ChatResponse
if err := client.Chat(ctx, req, &resp); err != nil {
return err
}
// Wenn Sie das Denken verstecken möchten, tun Sie es hier, unabhängig von Flags.
if resp.Message.Thinking != "" {
fmt.Println("🧠 thinking:\n", resp.Message.Thinking)
}
fmt.Println("\n💬 answer:\n", resp.Message.Content)
return nil
}
Generieren — 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: "Zusammenfassen Sie die Rolle eines B-Baums bei der Indizierung.",
Think: api.Ptr(true),
}
var resp api.GenerateResponse
if err := client.Generate(ctx, req, &resp); err != nil {
return err
}
if resp.Thinking != "" {
fmt.Println("🧠 thinking:\n", resp.Thinking)
}
fmt.Println("\n💬 answer:\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: "Erkläre das Gradientenabstieg in einfachen Worten.",
Think: api.Ptr(true),
}
var resp api.GenerateResponse
if err := client.Generate(ctx, req, &resp); err != nil {
return err
}
if resp.Thinking != "" {
fmt.Println("🧠 thinking:\n", resp.Thinking)
}
fmt.Println("\n💬 answer:\n", resp.Response)
return nil
}
Die Oberfläche des offiziellen Pakets spiegelt die REST-Dokumentation wider und wird gemeinsam mit dem Kernprojekt aktualisiert.
Streaming-Antworten
Für Echtzeit-Streaming, setzen Sie Stream: bptr(true) in Ihre Anfrage. Die Antwort wird als Zeilengetrennte JSON-Blöcke geliefert:
func streamChatExample() error {
endpoint := "http://localhost:11434/api/chat"
req := ChatRequest{
Model: "qwen3:8b-thinking",
Think: bptr(true),
Stream: bptr(true), // Streaming aktivieren
Messages: []ChatMessage{
{Role: "user", Content: "Erkläre den Quicksort-Algorithmus Schritt für Schritt."},
},
}
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
}
// Verarbeiten Sie Denken und Inhalt, sobald sie eintreffen
if chunk.Message.Thinking != "" {
fmt.Print(chunk.Message.Thinking)
}
fmt.Print(chunk.Message.Content)
if chunk.Done {
break
}
}
return nil
}
Mit dem offiziellen SDK verwenden Sie eine Callback-Funktion, um Streaming-Blöcke zu verarbeiten:
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: "Erkläre Binär-Suchbäume."},
},
}
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
}
Arbeiten mit Qwen3 Denken vs. Nicht-Denken (praktische Anleitung)
-
Zwei Hebel:
- Ein boolesches
thinking-Flag, das von Ollamas Denk-Funktion unterstützt wird; und - Qwen3s weiches Schalter-Befehle
/thinkund/no_thinkin der neuesten System-/Benutzer-Nachricht. Die neueste Anweisung bestimmt den nächsten Schritt.
- Ein boolesches
-
Standardhaltung: Nicht-Denken für schnelle Antworten; erhöhen Sie auf Denken für Aufgaben, die Schritt-für-Schritt-Verarbeitung benötigen (Mathematik, Planung, Debuggen, komplexe Codeanalyse).
-
Streaming-Oberflächen: wenn Denken aktiviert ist, können Sie in gestreamten Frames abwechselnd Denken/Inhalt sehen — puffern oder rendern Sie sie getrennt und geben Sie den Nutzern ein „Denken anzeigen“-Schalter. (Siehe API-Dokumentation für Streaming-Format.)
-
Mehrschrittige Gespräche: Qwen3 erinnert sich an den Denkmodus aus vorherigen Schritten. Wenn Sie ihn während des Gesprächs umschalten möchten, verwenden Sie sowohl das Flag als auch den weichen Schalter-Befehl für Zuverlässigkeit.
Hinweise für GPT-OSS
- Behandeln Sie Denken als vorhanden, auch wenn Sie es deaktiviert haben; filtern Sie clientseitig, wenn Ihre Benutzeroberfläche es nicht anzuzeigen braucht.
- Für Produktionsanwendungen mit GPT-OSS implementieren Sie clientseitige Filterlogik, die bei Bedarf Muster für Denken erkennen und entfernen kann.
- Testen Sie Ihre spezifische GPT-OSS-Modellvariante gründlich, da das Verhalten zwischen verschiedenen Quantisierungen und Versionen variieren kann.
Best Practices und Produktions-Tipps
Fehlerbehandlung und Timeout
Implementieren Sie immer eine ordnungsgemäße Timeout-Handhabung und Fehlerbehebung:
func robustChatRequest(ctx context.Context, model string, messages []api.Message) (*api.ChatResponse, error) {
// Setzen Sie eine vernünftige Timeout
ctx, cancel := context.WithTimeout(ctx, 2*time.Minute)
defer cancel()
client, err := api.ClientFromEnvironment()
if err != nil {
return nil, fmt.Errorf("Client erstellen: %w", err)
}
req := &api.ChatRequest{
Model: model,
Messages: messages,
Options: map[string]interface{}{
"temperature": 0.7,
"num_ctx": 4096, // Kontextfenstergröße
},
}
var resp api.ChatResponse
if err := client.Chat(ctx, req, &resp); err != nil {
return nil, fmt.Errorf("Chat-Anfrage fehlgeschlagen: %w", err)
}
return &resp, nil
}
Verbindungspooling und Wiederverwendung
Wiederverwenden Sie den Ollama-Client über mehrere Anfragen hinweg, anstatt ihn jedes Mal neu zu erstellen:
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
}
Umgebungsconfiguration
Verwenden Sie Umgebungsvariablen für flexible Bereitstellung:
export OLLAMA_HOST=http://localhost:11434
export OLLAMA_NUM_PARALLEL=2
export OLLAMA_MAX_LOADED_MODELS=2
Das offizielle SDK beachtet automatisch OLLAMA_HOST über api.ClientFromEnvironment().
Monitoring und Logging
Implementieren Sie strukturiertes Logging für Produktionsumgebungen:
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
}
Schlussfolgerung
-
Für Go-Projekte ist
github.com/ollama/ollama/apidie umfassendste, für die Produktion geeignete Wahl. Es wird gemeinsam mit dem Ollama-Kernprojekt gepflegt, von der offiziellen CLI verwendet und bietet umfassende API-Abdeckung mit garantiertem Kompatibilität. -
Für höhere Abstraktionen beachten Sie LangChainGo, wenn Sie Ketten, Tools, Vektor-Speicher und RAG-Pipelines benötigen — obwohl Sie einige untere Ebene Kontrolle für Bequemlichkeit aufgeben.
-
Qwen3 bietet Ihnen saubere, zuverlässige Kontrolle über Denkmodus mit beiden Flags und Nachrichten-Levelschaltern (
/think,/no_think), was es ideal für Anwendungen macht, die sowohl schnelle Antworten als auch tiefgehende Verarbeitung benötigen. -
Für GPT-OSS planen Sie immer, Reasoning-Ausgabe clientseitig zu reinigen, wenn nötig, da das Denk-Deaktivierungsflag möglicherweise nicht konsistent beachtet wird.
-
In der Produktion implementieren Sie ordnungsgemäße Fehlerbehandlung, Verbindungspooling, Timeout und Monitoring, um robuste Ollama-basierte Anwendungen zu erstellen.
Die Kombination aus Go’s starker Typisierung, hervorragender Unterstützung für Konkurrenz und Ollama’s einfacher API macht es zu einer idealen Plattform für das Erstellen von KI-gestützten Anwendungen — von einfachen Chatbots bis zu komplexen RAG-Systemen.
Wichtige Erkenntnisse
Hier ist ein schneller Referenzleitfaden für die Wahl Ihres Ansatzes:
| Anwendungsfall | Empfohlener Ansatz | Warum |
|---|---|---|
| Produktionsanwendung | github.com/ollama/ollama/api |
Offizielle Unterstützung, vollständige API-Abdeckung, gepflegt mit dem Kernprojekt |
| RAG/Ketten/Tools-Pipeline | LangChainGo | Hochabstrahierte Abstraktionen, Integrationen mit Vektor-Speichern |
| Lernen/Experimentieren | Roh REST mit net/http | Vollständige Transparenz, keine Abhängigkeiten, Bildungsorientiert |
| Schnelles Prototyping | Offizielle SDK | Ausgewogenheit zwischen Einfachheit und Macht |
| Streaming-Chat-Oberfläche | Offizielle SDK mit Callbacks | Eingebaute Streaming-Unterstützung, saubere API |
Modellauswahl-Richtlinien:
- Qwen3: Beste Wahl für Anwendungen, die kontrollierbaren Denkmodus, zuverlässige mehrschrittige Gespräche benötigen
- GPT-OSS: Starke Leistung, aber erfordert defensive Behandlung von Denken/Reasoning-Ausgabe
- Andere Modelle: Gründlich testen; Denkverhalten variiert je nach Modellfamilie
Referenzen & weitere Lektüre
Offizielle Dokumentation
- Ollama API Referenz — Vollständige REST-API-Dokumentation
- Offizielle Ollama Go-Paketdokumentation — Go-SDK-Dokumentation
- Ollama GitHub-Repository — Quellcode und Issues
Go-SDK-Alternativen
- LangChainGo Ollama-Integration — Für kettenbasierte Anwendungen
- swdunlop/ollama-client — Community-Client mit Tool-Calling
- xyproto/ollamaclient — Eine weitere Community-Option
Modell-spezifische Ressourcen
- Qwen-Dokumentation — Offizielle Qwen-Modellinformationen
- GPT-OSS-Informationen — GPT-OSS-Modelldetails
Verwandte Themen
- RAG-Anwendungen mit Go erstellen — LangChainGo-Beispiele
- Go-Context-Paket — Essential für Timeout und Abbruch
- Go HTTP-Client-Best Practices — Standardbibliotheksdokumentation
Weitere nützliche Links
Für einen umfassenderen Vergleich von Ollama mit anderen lokalen und Cloud-LLM-Infrastrukturen, siehe unsere LLM-Hosting: Lokal, Selbstgehostet & Cloud-Infrastruktur im Vergleich.
- Installieren und Konfigurieren von Ollama
- Ollama Cheatsheet
- Go Cheatsheet
- Neuordnen von Textdokumenten mit Ollama und Qwen3 Embedding-Modell – in Go
- Einschränkung von LLMs mit strukturierten Ausgaben: Ollama, Qwen3 & Python oder Go
- LLMs-Vergleich: Qwen3:30b vs GPT-OSS:20b
- Ollama GPT-OSS Strukturierte Ausgabeprobleme