Ollama-Clients für Go: SDK-Vergleich und Beispiele für Qwen3/GPT-OSS

Integrieren Sie Ollama mit Go: SDK-Anleitung, Beispiele und Produktions-Best-Praktiken.

Inhaltsverzeichnis

Dieser Leitfaden bietet einen umfassenden Überblick über verfügbare Go SDKs für Ollama und vergleicht deren Funktionsumfänge.

Wir werden praktische Go-Beispiele für den Aufruf der Qwen3- und GPT-OSS-Modelle erkunden, die auf Ollama gehostet werden – sowohl über rohe REST-API-Aufrufe als auch den offiziellen Go-Client – einschließlich detaillierter Handhabung von Denk- und Nicht-Denk-Modi in Qwen3.

go und ollama

Warum Ollama + Go?

Ollama stellt eine kleine, pragmatische HTTP-API (typischerweise unter http://localhost:11434) bereit, die für Generate- und Chat-Workloads entwickelt wurde, mit integrierter Streaming-Unterstützung und Modellverwaltungsfunktionen. Die offizielle Dokumentation deckt die /api/generate- und /api/chat-Anfrage/Antwort-Strukturen und Streaming-Semantik umfassend ab.

Go ist eine hervorragende Wahl für den Aufbau von Ollama-Clients aufgrund seiner starken Standardbibliotheksunterstützung für HTTP, exzellenter JSON-Verarbeitung, nativer Concurrency-Primitive und statisch typisierter Schnittstellen, die Fehler zur Kompilierzeit erkennen.

Stand Oktober 2025 sind hier die Go-SDK-Optionen, die Sie wahrscheinlich in Betracht ziehen werden.


Go SDKs für Ollama – was ist verfügbar?

SDK / Paket Status & „Besitzer“ Umfang (Generate/Chat/Streaming) Modellverwaltung (pull/list/etc.) Extras / Hinweise
github.com/ollama/ollama/api Offizielles Paket innerhalb des Ollama-Repos; wird vom ollama-CLI selbst verwendet Vollständige Abdeckung, die auf REST abgebildet ist; Streaming unterstützt Ja Wird als kanonischer Go-Client betrachtet; die API spiegelt die Dokumentation eng wider.
LangChainGo (github.com/tmc/langchaingo/llms/ollama) Community-Framework (LangChainGo) mit Ollama-LLM-Modul Chat/Completion + Streaming über Framework-Abstraktionen Eingeschränkt (Modellverwaltung nicht Hauptziel) Ideal, wenn Sie Ketten, Tools, Vektor-Speicher in Go benötigen; weniger ein rohes SDK.
github.com/swdunlop/ollama-client Community-Client Fokus auf Chat; gute Tool-Calling-Experimente Teilweise Entwickelt für Experimente mit Tool-Calling; kein 1:1 vollständiger Oberflächenabdeckung.
Andere Community-SDKs (z. B. ollamaclient, Drittanbieter-„go-ollama-sdk“) Community Variiert Variiert Qualität und Abdeckung variieren; bewerten Sie pro Repository.

Empfehlung: Für die Produktion bevorzugen Sie github.com/ollama/ollama/api – es wird mit dem Kernprojekt gepflegt und spiegelt die REST-API wider.


Qwen3 & GPT-OSS auf Ollama: Denk- vs. Nicht-Denk-Modus (was Sie wissen müssen)

  • Denkmodus in Ollama trennt die „Vernunft“ des Modells vom endgültigen Output, wenn er aktiviert ist. Ollama dokumentiert ein erstklassiges Aktivieren/Deaktivieren des Denkverhaltens über unterstützte Modelle hinweg.
  • (https://www.glukhov.org/de/post/2025/10/qwen3-30b-vs-gpt-oss-20b/ “Qwen3:30b vs GPT-OSS:20b: Technische Details, Leistungs- und Geschwindigkeitsvergleich”) unterstützt dynamisches Umschalten: Fügen Sie /think oder /no_think in System-/Benutzernachrichten hinzu, um die Modi umzuschalten; die neueste Anweisung gewinnt.
  • GPT-OSS: Benutzer berichten, dass Deaktivieren des Denkens (z. B. /set nothink oder --think=false) auf gpt-oss:20b unzuverlässig sein kann; planen Sie, Filter/Hide jegliche Vernunft, die Ihre UI nicht anzeigen sollte.

Teil 1 – Aufruf 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 die Denksteuerung als boolesche Flagge bereit.
	// Selbst wenn sie weggelassen wird, können Sie Qwen3 weiterhin über /think- oder /no_think-Tags 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"`           // endgültiger Text für Nicht-Stream
	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 AN (und wie man es AUS schaltet)

func chatQwen3Thinking() error {
	endpoint := "http://localhost:11434/api/chat"

	req := ChatRequest{
		Model:   "qwen3:8b-thinking", // beliebiger :*-thinking-Tag, den Sie gezogen haben
		Think:   bptr(true),
		Stream:  bptr(false),
		Messages: []ChatMessage{
			{Role: "system", Content: "Sie sind ein präziser Assistent."},
			{Role: "user",   Content: "Erklären Sie Rekursion mit einem kurzen Go-Beispiel."},
		},
	}

	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("🧠 denken:\n", out.Message.Thinking)
	fmt.Println("\n💬 antwort:\n", out.Message.Content)
	return nil
}

// Schalten Sie das Denken für den nächsten Zug AUS, indem Sie:
// (a) Think=false setzen, und/oder
// (b) "/no_think" zur letzten System-/Benutzernachricht hinzufügen (Qwen3-Soft-Schalter).
// Qwen3 beachtet die letzte /think- oder /no_think-Anweisung in mehrstufigen 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: "Sie sind knapp. /no_think"},
			{Role: "user",   Content: "Erklären Sie Rekursion in einem Satz."},
		},
	}

	raw, err := httpPostJSON(endpoint, req)
	if err != nil {
		return err
	}
	var out ChatResponse
	if err := json.Unmarshal(raw, &out); err != nil {
		return err
	}
	// Erwarten Sie, dass Denken leer ist; behandeln Sie es dennoch defensiv.
	if out.Message.Thinking != "" {
		fmt.Println("🧠 denken (unerwartet):\n", out.Message.Thinking)
	}
	fmt.Println("\n💬 antwort:\n", out.Message.Content)
	return nil
}

(Der /think- und /no_think-Soft-Schalter von Qwen3 wird vom Qwen-Team dokumentiert; die letzte Anweisung gewinnt in mehrstufigen Chats.)

Chat – GPT-OSS mit Denken (und einem Hinweis)

func chatGptOss() error {
	endpoint := "http://localhost:11434/api/chat"

	req := ChatRequest{
		Model:  "gpt-oss:20b",
		Think:  bptr(true),   // getrennte Vernunft anfordern, wenn unterstützt
		Stream: bptr(false),
		Messages: []ChatMessage{
			{Role: "user", Content: "Was ist dynamische Programmierung? Erklären Sie die Kernidee."},
		},
	}

	raw, err := httpPostJSON(endpoint, req)
	if err != nil {
		return err
	}
	var out ChatResponse
	if err := json.Unmarshal(raw, &out); err != nil {
		return err
	}
	// Bekannte Eigenheit: Deaktivieren des Denkens kann die Vernunft auf gpt-oss:20b nicht vollständig unterdrücken.
	// Filtern/Schützen Sie das Denken immer in der UI, wenn Sie es nicht anzeigen möchten.
	fmt.Println("🧠 denken:\n", out.Message.Thinking)
	fmt.Println("\n💬 antwort:\n", out.Message.Content)
	return nil
}

Benutzer berichten, dass Deaktivieren des Denkens auf gpt-oss:20b (z. B. /set nothink oder --think=false) ignoriert werden kann – planen Sie eine clientseitige Filterung, falls erforderlich.

Generate – 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("🧠 denken:\n", out.Thinking)
	}
	fmt.Println("\n💬 antwort:\n", out.Response)
	return nil
}

func generateGptOss() error {
	endpoint := "http://localhost:11434/api/generate"
	req := GenerateRequest{
		Model:  "gpt-oss:20b",
		Prompt: "Erklären Sie Backpropagation in neuronalen Netzen kurz.",
		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("🧠 denken:\n", out.Thinking)
	}
	fmt.Println("\n💬 antwort:\n", out.Response)
	return nil
}

REST-Formen und Streaming-Verhalten stammen direkt aus der Ollama-API-Referenz.

Teil 2 — Aufruf von Ollama über das offizielle Go-SDK (github.com/ollama/ollama/api)

Das offizielle Paket stellt einen Client mit Methoden bereit, die dem REST-API entsprechen. Die 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 AN / AUS)

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/ollama/ollama/api"
)

func chatWithQwen3Thinking(ctx context.Context, thinking bool) error {
	client, err := api.ClientFromEnvironment() // berücksichtigt OLLAMA_HOST, falls gesetzt
	if err != nil {
		return err
	}

	req := &api.ChatRequest{
		Model: "qwen3:8b-thinking",
		// Viele Server-Builds exponieren Denken als oberste Ebene;
		// zusätzlich können Sie Qwen3 über /think oder /no_think in Nachrichten steuern.
		Think: api.Ptr(thinking),
		Messages: []api.Message{
			{Role: "system", Content: "Sie sind ein präziser Assistent."},
			{Role: "user",   Content: "Erklären Sie 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("🧠 Denken:\n", resp.Message.Thinking)
	}
	fmt.Println("\n💬 Antwort:\n", resp.Message.Content)
	return nil
}

func main() {
	ctx := context.Background()
	if err := chatWithQwen3Thinking(ctx, true); err != nil {
		log.Fatal(err)
	}
	// Beispiel: Nicht-Denken
	if err := chatWithQwen3Thinking(ctx, false); err != nil {
		log.Fatal(err)
	}
}

Chat — GPT-OSS (Behandeln von Argumentation defensiv)

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 die Argumentation verbergen möchten, tun Sie dies hier, unabhängig von den Flags.
	if resp.Message.Thinking != "" {
		fmt.Println("🧠 Denken:\n", resp.Message.Thinking)
	}
	fmt.Println("\n💬 Antwort:\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: "Fassen Sie die Rolle eines B-Baums bei der Indizierung zusammen.",
		Think:  api.Ptr(true),
	}
	var resp api.GenerateResponse
	if err := client.Generate(ctx, req, &resp); err != nil {
		return err
	}
	if resp.Thinking != "" {
		fmt.Println("🧠 Denken:\n", resp.Thinking)
	}
	fmt.Println("\n💬 Antwort:\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ären Sie den Gradientenabstieg in einfachen Begriffen.",
		Think:  api.Ptr(true),
	}
	var resp api.GenerateResponse
	if err := client.Generate(ctx, req, &resp); err != nil {
		return err
	}
	if resp.Thinking != "" {
		fmt.Println("🧠 Denken:\n", resp.Thinking)
	}
	fmt.Println("\n💬 Antwort:\n", resp.Response)
	return nil
}

Die Oberfläche des offiziellen Pakets spiegelt die REST-Dokumentation wider und wird parallel zum Kernprojekt aktualisiert.


Streaming-Antworten

Für Echtzeit-Streaming setzen Sie Stream: bptr(true) in Ihrer Anfrage. Die Antwort wird als zeilenweise getrennte JSON-Chunks 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ären Sie 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, wenn 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-Chunks 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ären Sie binäre 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:

    1. Ein boolescher thinking-Flag, das von Ollamas Denk-Funktion unterstützt wird; und
    2. Qwen3s Soft-Switch-Befehle /think und /no_think in der neuesten System-/Benutzernachricht. Die neueste Anweisung regelt die nächsten Runde(n).
  • Standardhaltung: Nicht-Denken für schnelle Antworten; steigern Sie auf Denken für Aufgaben, die schrittweise Argumentation benötigen (Mathematik, Planung, Debugging, komplexe Code-Analyse).

  • Streaming-UIs: Wenn Denken aktiviert ist, können Sie möglicherweise verschachtelte Argumentations-/Inhaltsrahmen in gestreamten Frames sehen — puffern oder rendern Sie diese separat und geben Sie den Benutzern einen „Argumentation anzeigen“-Schalter. (Siehe API-Dokumentation für Streaming-Format.)

  • Mehrfachumfragen: Qwen3 erinnert sich an den Denkmodus aus vorherigen Runden. Wenn Sie ihn mitten in einem Gespräch umschalten möchten, verwenden Sie sowohl das Flag als auch den Soft-Switch-Befehl für Zuverlässigkeit.

Hinweise für GPT-OSS

  • Behandeln Sie Argumentation als vorhanden, selbst wenn Sie versucht haben, sie zu deaktivieren; filtern Sie auf der Client-Seite, wenn Ihre Benutzeroberfläche sie nicht anzeigen sollte.
  • Für Produktionsanwendungen, die GPT-OSS verwenden, implementieren Sie eine Client-seitige Filterlogik, die Argumentationsmuster erkennen und entfernen kann, wenn dies erforderlich ist.
  • Testen Sie Ihre spezifische GPT-OSS-Modellvariante gründlich, da sich das Verhalten zwischen verschiedenen Quantisierungen und Versionen unterscheiden kann.

Best Practices und Produktionstipps

Fehlerbehandlung und Timeouts

Implementieren Sie immer eine ordnungsgemäße Timeout-Behandlung und Fehlerwiederherstellung:

func robustChatRequest(ctx context.Context, model string, messages []api.Message) (*api.ChatResponse, error) {
	// Setzen Sie einen vernünftigen Timeout
	ctx, cancel := context.WithTimeout(ctx, 2*time.Minute)
	defer cancel()

	client, err := api.ClientFromEnvironment()
	if err != nil {
		return nil, fmt.Errorf("Erstellen des Clients: %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
}

Connection-Pooling und Wiederverwendung

Wiederverwenden Sie den Ollama-Client über Anfragen hinweg, anstatt jedes Mal einen neuen 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
}

Umgebungskonfiguration

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 berücksichtigt OLLAMA_HOST automatisch über api.ClientFromEnvironment().

Überwachung und Protokollierung

Implementieren Sie strukturierte Protokollierung für Produktionssysteme:

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
}

Fazit

  • Für Go-Projekte ist github.com/ollama/ollama/api die vollständigste, produktionsreife Wahl. Es wird parallel zum Ollama-Kernprojekt gepflegt, von der offiziellen CLI verwendet und bietet umfassende API-Abdeckung mit garantierter Kompatibilität.

  • Für höhere Abstraktionen können Sie LangChainGo in Betracht ziehen, wenn Sie Ketten, Tools, Vektor-Speicher und RAG-Pipelines benötigen — obwohl Sie einige niedrigstufige Kontrolle für Bequemlichkeit opfern werden.

  • Qwen3 bietet Ihnen saubere, zuverlässige Kontrolle über den Denkmodus mit sowohl Flags als auch Nachrichtenebenen-Schaltern (/think, /no_think), was es ideal für Anwendungen macht, die sowohl schnelle Antworten als auch tiefgehende Argumentation benötigen.

  • Für GPT-OSS sollten Sie immer planen, die Argumentationsausgabe clientseitig zu bereinigen, wenn dies notwendig ist, da das Denk-Deaktivierungs-Flag möglicherweise nicht konsistent beachtet wird.

  • In der Produktion implementieren Sie eine ordnungsgemäße Fehlerbehandlung, Connection-Pooling, Timeouts und Überwachung, um robuste Ollama-basierte Anwendungen zu erstellen.

Die Kombination aus Go’s starkem Typing, hervorragender Concurrency-Unterstützung und Ollamas einfacher API macht es zu einem idealen Stack für den Aufbau von KI-gestützten Anwendungen — von einfachen Chatbots bis hin zu komplexen RAG-Systemen.

Wichtige Erkenntnisse

Hier ist eine schnelle Referenz für die Auswahl Ihres Ansatzes:

Anwendungsfall Empfohlener Ansatz Warum
Produktionsanwendung github.com/ollama/ollama/api Offizielle Unterstützung, vollständige API-Abdeckung, wird mit dem Kernprojekt gepflegt
RAG/Ketten/Tools-Pipeline LangChainGo Hochwertige Abstraktionen, Integrationen mit Vektor-Speichern
Lernen/Experimentieren Rohes REST mit net/http Volle Transparenz, keine Abhängigkeiten, Bildung
Schnelles Prototyping Offizielles SDK Ausgewogenes Verhältnis von Einfachheit und Leistung
Streaming-Chat-UI Offizielles SDK mit Callbacks Integrierte Streaming-Unterstützung, saubere API

Modellauswahl-Leitfaden:

  • Qwen3: Ideal für Anwendungen, die einen steuerbaren Denkmodus und zuverlässige Mehrfachumfragen benötigen
  • GPT-OSS: Starke Leistung, erfordert aber defensive Handhabung der Denk-/Argumentationsausgabe
  • Andere Modelle: Testen Sie gründlich; das Denkverhalten variiert je nach Modellfamilie

Verweise & weitere Lektüre

Offizielle Dokumentation

Go-SDK-Alternativen

Modell-spezifische Ressourcen

Verwandte Themen