ओलामा के लिए गो क्लाइंट्स: SDK तुलना और क्वेन3/जीपीटी-ओएसएस उदाहरण

ओलामा के साथ गो की इंटीग्रेशन: SDK गाइड, उदाहरण और उत्पादन बेस्ट प्रैक्टिस।

Page content

यह गाइड उपलब्ध Go SDKs for Ollama के विस्तृत समीक्षा प्रदान करता है और उनके विशेषताओं के सेट की तुलना करता है।

हम Qwen3 और GPT-OSS मॉडलों के उदाहरणों के साथ Ollama पर चलाने के लिए क्रूर REST API कॉल और अधिकारिक Go क्लाइंट के माध्यम से विस्तृत चर्चा करेंगे, जिसमें Qwen3 में सोच और असोच मोड के संचालन के विस्तृत विवरण शामिल हैं।

go and ollama

क्यों Ollama + Go?

Ollama द्वारा प्रदान किया गया एक छोटा, व्यावहारिक HTTP API (आमतौर पर http://localhost:11434 पर चलता है) डिज़ाइन किया गया है जनरेट और चैट कार्यों के लिए, जिसमें बिल्कुल बनाए गए स्ट्रीमिंग समर्थन और मॉडल प्रबंधन क्षमताएं शामिल हैं। अधिकारिक दस्तावेज़ विस्तृत रूप से /api/generate और /api/chat के अनुरोध/प्रतिक्रिया संरचनाओं और स्ट्रीमिंग सेमैंटिक्स को कवर करते हैं।

Go Ollama क्लाइंट बनाने के लिए के लिए एक उत्कृष्ट विकल्प है क्योंकि इसमें HTTP के लिए मजबूत मानक पुस्तकालय समर्थन, उत्कृष्ट JSON हैंडलिंग, स्थानीय समानांतर प्राइमिटिव्स, और स्थैतिक-टाइप इंटरफेस होते हैं जो संकलन समय पर त्रुटियों को पकड़ते हैं।

अक्टूबर 2025 तक, आपको विचार करने वाले Go SDK विकल्प इस प्रकार हैं:


Ollama के लिए Go SDKs — क्या उपलब्ध है?

SDK / पैकेज स्थिति और “मालिक” क्षेत्र (जनरेट/चैट/स्ट्रीमिंग) मॉडल प्रबंधन (खींचें/सूचीबद्ध/आदि) अतिरिक्त / नोट्स
github.com/ollama/ollama/api अधिकारिक पैकेज Ollama रिपॉजिटरी के अंदर; ollama CLI द्वारा खुद का उपयोग करता है पूर्ण कवरेज रेस्ट के साथ मैप किया गया; स्ट्रीमिंग समर्थित हां कानॉनिकल Go क्लाइंट के रूप में माना जाता है; API दस्तावेज़ के करीब दिखता है।
LangChainGo (github.com/tmc/langchaingo/llms/ollama) समुदाय फ्रेमवर्क (LangChainGo) Ollama LLM मॉड्यूल के साथ चैट/पूर्ण रूप से स्ट्रीमिंग के लिए फ्रेमवर्क अमूल्यता के माध्यम से सीमित (मॉडल प्रबंधन मुख्य लक्ष्य नहीं) चेन, उपकरण, वेक्टर स्टोर्स के साथ गो में अच्छा है; एक असली SDK नहीं।
github.com/swdunlop/ollama-client समुदाय क्लाइंट चैट पर ध्यान केंद्रित; अच्छा उपकरण-कॉलिंग प्रयोग के लिए अनुभव करें आंशिक उपकरण कॉलिंग के साथ प्रयोग करने के लिए बनाया गया है; एक पूर्ण सतह के बराबर नहीं।
अन्य समुदाय SDKs (जैसे, ollamaclient, तीसरे पक्ष के “go-ollama-sdk”) समुदाय भिन्न भिन्न गुणवत्ता और कवरेज भिन्न होते हैं; प्रति रिपॉजिटरी मूल्यांकन करें।

सिफारिश: उत्पादन के लिए github.com/ollama/ollama/api को पसंद करें — यह मुख्य परियोजना के साथ बनाए रखा गया है और रेस्ट API के समान है।


Ollama पर Qwen3 और GPT-OSS: सोच बनाम असोच (जो जानना चाहिए)

  • Ollama में सोच मोड सक्रिय करते समय मॉडल के “तर्क” को अंतिम आउटपुट से अलग करता है। Ollama दस्तावेज़ समर्थित मॉडलों में सक्रिय/अक्रिय सोच व्यवहार के लिए प्रथम श्रेणी के विवरण प्रदान करता है।
  • (https://www.glukhov.org/hi/post/2025/10/qwen3-30b-vs-gpt-oss-20b/ “Qwen3:30b vs GPT-OSS:20b: तकनीकी विवरण, प्रदर्शन और गति तुलना”) गतिशील टॉगलिंग का समर्थन करता है: प्रणाली/उपयोगकर्ता संदेशों में /think या /no_think जोड़कर मोड को बदलें; नवीनतम निर्देश जीतता है।
  • GPT-OSS: उपयोगकर्ताओं के अनुसार सोच को अक्रिय करना (जैसे /set nothink या --think=false) gpt-oss:20b पर अनिश्चित हो सकता है; योजना बनाएं फ़िल्टर/छिपाएं ऐसा अपने UI में नहीं दिखाएं।

भाग 1 — Ollama के माध्यम से क्रूर REST (Go, net/http) कॉल करें

साझा प्रकार

पहले, हम अपने उदाहरणों में उपयोग करने वाले सामान्य प्रकार और सहायता फ़ंक्शन परिभाषित करेंगे:

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"time"
)

// ---- चैट API प्रकार ----

type ChatMessage struct {
	Role    string `json:"role"`
	Content string `json:"content"`
}

type ChatRequest struct {
	Model    string        `json:"model"`
	Messages []ChatMessage `json:"messages"`
	// कुछ सर्वर विचार नियंत्रण को एक बूलियन फ्लैग के रूप में प्रदान करते हैं।
	// यही छोड़ दिया जाए तो आप Qwen3 को /think या /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"` // जब विचार चालू होता है तो उपस्थित
	} `json:"message"`
	Done bool `json:"done"`
}

// ---- जनरेट API प्रकार ----

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"`           // अनुक्रमित टेक्स्ट के लिए अंतिम
	Thinking  string `json:"thinking,omitempty"` // जब विचार चालू होता है तो उपस्थित
	Done      bool   `json:"done"`
}

// ---- सहायता फ़ंक्शन ----

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 एक बूलियन मान के लिए एक संकेतक लौटाता है
func bptr(b bool) *bool { return &b }

चैट — Qwen3 साथ सोच चालू (और बंद करने के तरीके)

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

	req := ChatRequest{
		Model:   "qwen3:8b-thinking", // खींचे गए कोई भी :*-thinking टैग
		Think:   bptr(true),
		Stream:  bptr(false),
		Messages: []ChatMessage{
			{Role: "system", Content: "आप एक बर्दाश्त करने वाला सहायक हैं।"},
			{Role: "user",   Content: "एक छोटे गो उदाहरण के साथ पुनर्भावना की व्याख्या करें।"},
		},
	}

	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("🧠 सोच:\n", out.Message.Thinking)
	fmt.Println("\n💬 उत्तर:\n", out.Message.Content)
	return nil
}

// अगले चरण में सोच बंद करने के लिए:
// (a) Think=false सेट करें, और/या
// (b) सबसे हालिया प्रणाली/उपयोगकर्ता संदेश में "/no_think" जोड़ें (Qwen3 नरम स्विच)।
// Qwen3 बहु-चरण चैट में अंतिम /think या /no_think निर्देश का सम्मान करता है।
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: "आप संक्षिप्त हैं। /no_think"},
			{Role: "user",   Content: "एक वाक्य में पुनर्भावना की व्याख्या करें।"},
		},
	}

	raw, err := httpPostJSON(endpoint, req)
	if err != nil {
		return err
	}
	var out ChatResponse
	if err := json.Unmarshal(raw, &out); err != nil {
		return err
	}
	// अपेक्षा करें कि सोच खाली है; फिर भी घोषणात्मक रूप से संभालें।
	if out.Message.Thinking != "" {
		fmt.Println("🧠 सोच (अप्रत्याशित):\n", out.Message.Thinking)
	}
	fmt.Println("\n💬 उत्तर:\n", out.Message.Content)
	return nil
}

(Qwen3 के /think और /no_think नरम स्विच को Qwen टीम द्वारा दस्तावेज़ किया गया है; बहु-चरण चैट में अंतिम निर्देश जीतता है।)

चैट — GPT-OSS साथ सोच (और एक चेतावनी)

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

	req := ChatRequest{
		Model:  "gpt-oss:20b",
		Think:  bptr(true),   // समर्थित अलग तर्क की अपेक्षा करें
		Stream: bptr(false),
		Messages: []ChatMessage{
			{Role: "user", Content: "डायनामिक कार्यक्रमित क्या है? मूल विचार की व्याख्या करें।"},
		},
	}

	raw, err := httpPostJSON(endpoint, req)
	if err != nil {
		return err
	}
	var out ChatResponse
	if err := json.Unmarshal(raw, &out); err != nil {
		return err
	}
	// ज्ञात अजीब बात: सोच बंद करना gpt-oss:20b पर पूरी तरह से तर्क को बंद कर सकता है।
	// अगर आप इसे दिखाना नहीं चाहते हैं तो हमेशा सोच को फ़िल्टर/छिपाएं।
	fmt.Println("🧠 सोच:\n", out.Message.Thinking)
	fmt.Println("\n💬 उत्तर:\n", out.Message.Content)
	return nil
}

उपयोगकर्ताओं के अनुसार gpt-oss:20b पर सोच बंद करना (जैसे /set nothink या --think=false) अनुचित हो सकता है — आवश्यकता हो तो ग्राहक तरफ से फ़िल्टरिंग के लिए योजना बनाएं।

जनरेट — Qwen3 और GPT-OSS

func generateQwen3() error {
	endpoint := "http://localhost:11434/api/generate"
	req := GenerateRequest{
		Model:  "qwen3:4b-thinking",
		Prompt: "2–3 वाक्यों में, डेटाबेस में B-ट्री के उपयोग क्या हैं?",
		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("🧠 सोच:\n", out.Thinking)
	}
	fmt.Println("\n💬 उत्तर:\n", out.Response)
	return nil
}

func generateGptOss() error {
	endpoint := "http://localhost:11434/api/generate"
	req := GenerateRequest{
		Model:  "gpt-oss:20b",
		Prompt: "न्यूरल नेटवर्क में बैकप्रोपैगेशन की छोटी व्याख्या करें।",
		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("🧠 सोच:\n", out.Thinking)
	}
	fmt.Println("\n💬 उत्तर:\n", out.Response)
	return nil
}

REST आकार और स्ट्रीमिंग व्यवहार Ollama API संदर्भ से सीधे आता है।


भाग 2 — Ollama के माध्यम से अधिकारिक Go SDK (github.com/ollama/ollama/api) कॉल करें

अधिकारिक पैकेज एक Client प्रदान करता है जिसमें रेस्ट API के संगत विधियां होती हैं। Ollama CLI खुद इस पैकेज का उपयोग करता है ताकि सेवा के साथ बातचीत कर सके, जो संगतता के लिए सबसे अच्छा विकल्प है।

इस्तामल

go get github.com/ollama/ollama/api

चैट — Qwen3 (सोच चालू / बंद)

package main

import (
	"context"
	"fmt"
	"log"

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

func chatWithQwen3Thinking(ctx context.Context, thinking bool) error {
	client, err := api.ClientFromEnvironment() // OLLAMA_HOST को अगर सेट करता है तो सम्मान करता है
	if err != nil {
		return err
	}

	req := &api.ChatRequest{
		Model: "qwen3:8b-thinking",
		// कई सर्वर बिल्ड सोच को एक शीर्ष स्तरीय फ्लैग के रूप में प्रदान करते हैं;
		// अतिरिक्त, आप Qwen3 को संदेशों में /think या /no_think के माध्यम से नियंत्रित कर सकते हैं।
		Think: api.Ptr(thinking),
		Messages: []api.Message{
			{Role: "system", Content: "आप एक बर्दाश्त करने वाला सहायक हैं।"},
			{Role: "user",   Content: "एक छोटे गो अंतर्जाल के साथ मर्ज सॉर्ट की व्याख्या करें।"},
		},
	}

	var resp api.ChatResponse
	if err := client.Chat(ctx, req, &resp); err != nil {
		return err
	}

	if resp.Message.Thinking != "" {
		fmt.Println("🧠 सोच:\n", resp.Message.Thinking)
	}
	fmt.Println("\n💬 उत्तर:\n", resp.Message.Content)
	return nil
}

func main() {
	ctx := context.Background()
	if err := chatWithQwen3Thinking(ctx, true); err != nil {
		log.Fatal(err)
	}
	// उदाहरण: असोच
	if err := chatWithQwen3Thinking(ctx, false); err != nil {
		log.Fatal(err)
	}
}

चैट — GPT-OSS (तर्क के घोषणात्मक रूप से संभालें)

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: "मेमोइजेशन क्या है और यह कब उपयोगी है?"},
		},
	}
	var resp api.ChatResponse
	if err := client.Chat(ctx, req, &resp); err != nil {
		return err
	}
	// अगर आप तर्क को छिपाना चाहते हैं, तो चिह्नों के बिना यहां करें।
	if resp.Message.Thinking != "" {
		fmt.Println("🧠 सोच:\n", resp.Message.Thinking)
	}
	fmt.Println("\n💬 उत्तर:\n", resp.Message.Content)
	return nil
}

जनरेट — 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: "B-ट्री के सूचीबद्ध में भूमिका का सारांश दें।",
		Think:  api.Ptr(true),
	}
	var resp api.GenerateResponse
	if err := client.Generate(ctx, req, &resp); err != nil {
		return err
	}
	if resp.Thinking != "" {
		fmt.Println("🧠 सोच:\n", resp.Thinking)
	}
	fmt.Println("\n💬 उत्तर:\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: "सरल शब्दों में ग्रेडिएंट डिसेंट की व्याख्या करें।",
		Think:  api.Ptr(true),
	}
	var resp api.GenerateResponse
	if err := client.Generate(ctx, req, &resp); err != nil {
		return err
	}
	if resp.Thinking != "" {
		fmt.Println("🧠 सोच:\n", resp.Thinking)
	}
	fmt.Println("\n💬 उत्तर:\n", resp.Response)
	return nil
}

अधिकारिक पैकेज की सतह रेस्ट दस्तावेज़ के समान है और मुख्य परियोजना के साथ अपडेट की जाती है।


स्ट्रीमिंग आउटपुट

वास्तविक समय के स्ट्रीमिंग के लिए, अपने अनुरोध में Stream: bptr(true) सेट करें। आउटपुट नई पंक्ति से अलग किए गए JSON चूर्ण के रूप में वितरित किया जाएगा:

func streamChatExample() error {
	endpoint := "http://localhost:11434/api/chat"
	req := ChatRequest{
		Model:  "qwen3:8b-thinking",
		Think:  bptr(true),
		Stream: bptr(true), // स्ट्रीमिंग को सक्षम करें
		Messages: []ChatMessage{
			{Role: "user", Content: "क्विकसॉर्ट एल्गोरिदम के चरणों की एक-एक करके व्याख्या करें।"},
		},
	}

	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
		}
		
		// सोच और सामग्री के आगमन के साथ प्रोसेस करें
		if chunk.Message.Thinking != "" {
			fmt.Print(chunk.Message.Thinking)
		}
		fmt.Print(chunk.Message.Content)
		
		if chunk.Done {
			break
		}
	}
	return nil
}

अधिकारिक SDK के साथ, स्ट्रीमिंग चूर्ण के लिए एक कॉलबैक फ़ंक्शन का उपयोग करें:

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: "बाइनरी खोज वृक्षों की व्याख्या करें।"},
		},
	}
	
	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
}

Qwen3 सोच बनाम असोच के साथ काम करें (व्यावहारिक मार्गदर्शन)

  • दो लीवर:

    1. Ollama के सोच सुविधा द्वारा समर्थित एक बूलियन सोच फ्लैग; और
    2. Qwen3 के मुलायम स्विच आदेश /think और /no_think अंतिम प्रणाली/उपयोगकर्ता संदेश में। सबसे हालिया निर्देश अगले चरणों के लिए नियंत्रित करता है।
  • डिफ़ॉल्ट अवस्था: असोच त्वरित उत्तरों के लिए; जटिल कार्यों के लिए सोच बढ़ाएं जो चरण-दर-चरण तर्क की आवश्यकता होती है (गणित, योजना, डीबगिंग, जटिल कोड विश्लेषण)।

  • स्ट्रीमिंग UIs: सोच चालू होने पर, आप स्ट्रीमिंग फ़्रेम में समायोजित तर्क/सामग्री देख सकते हैं — बफर या अलग-अलग रेंडर करें और उपयोगकर्ताओं के लिए “तर्क दिखाएं” टॉगल प्रदान करें। (API दस्तावेज़ के लिए स्ट्रीमिंग फॉर्मेट देखें।)

  • बहु-चरण चैट: Qwen3 पिछले चरणों से सोच मोड को याद करता है। अगर आप चर्चा के बीच में इसे बदलना चाहते हैं, तो नियंत्रण और नरम-स्विच आदेश दोनों का उपयोग करें ताकि विश्वसनीयता बनी रहे।

GPT-OSS के लिए नोट्स

  • तर्क को उपस्थित मानें यदि आपने इसे बंद करने की कोशिश की है; ग्राहक पर फ़िल्टर करें यदि आपके UX में इसे दिखाना नहीं चाहते हैं।
  • GPT-OSS के साथ उत्पादन एप्लिकेशनों के लिए, आवश्यकता हो तो तर्क पैटर्न को पहचानने और हटाने के लिए ग्राहक तरफ से फ़िल्टरिंग लॉजिक को लागू करें।
  • अपने विशिष्ट GPT-OSS मॉडल वैरिएंट के लिए विस्तार से परीक्षण करें, क्योंकि व्यवहार अलग-अलग क्वांटाइजेशन और संस्करणों के बीच भिन्न हो सकता है।

बेहतर तरीके और उत्पादन सुझाव

त्रुटि संभाल और समय सीमा

हमेशा उचित समय सीमा संभाल और त्रुटि पुनर्प्राप्ति को लागू करें:

func robustChatRequest(ctx context.Context, model string, messages []api.Message) (*api.ChatResponse, error) {
	// उचित समय सीमा सेट करें
	ctx, cancel := context.WithTimeout(ctx, 2*time.Minute)
	defer cancel()
	
	client, err := api.ClientFromEnvironment()
	if err != nil {
		return nil, fmt.Errorf("क्लाइंट बनाने में त्रुटि: %w", err)
	}
	
	req := &api.ChatRequest{
		Model:    model,
		Messages: messages,
		Options: map[string]interface{}{
			"temperature": 0.7,
			"num_ctx":     4096, // संदर्भ विंडो आकार
		},
	}
	
	var resp api.ChatResponse
	if err := client.Chat(ctx, req, &resp); err != nil {
		return nil, fmt.Errorf("चैट अनुरोध विफल रहा: %w", err)
	}
	
	return &resp, nil
}

कनेक्शन पूलिंग और पुनर्उपयोग

अनुरोधों के बजाय ओलामा क्लाइंट को पुनर्उपयोग करें:

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
}

पर्यावरण विन्यास

उपयोग के लिए पर्यावरण चर उपयोग करें:

export OLLAMA_HOST=http://localhost:11434
export OLLAMA_NUM_PARALLEL=2
export OLLAMA_MAX_LOADED_MODELS=2

अधिकारिक SDK OLLAMA_HOST को api.ClientFromEnvironment() के माध्यम से सम्मान करता है।

मॉनिटरिंग और लॉगिंग

उत्पादन प्रणालियों के लिए संरचित लॉगिंग को लागू करें:

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
}

निष्कर्ष

  • Go परियोजनाओं के लिए, github.com/ollama/ollama/api सबसे पूर्ण, उत्पादन तैयार विकल्प है। यह Ollama मुख्य परियोजना के साथ बनाए रखा गया है, अधिकारिक CLI द्वारा उपयोग किया जाता है, और व्यापक API कवरेज के साथ गारंटीकृत संगतता प्रदान करता है।

  • उच्च-स्तरीय अमूल्यताओं के लिए, LangChainGo को चेन, उपकरण, वेक्टर स्टोर्स और RAG पाइपलाइन के लिए विचार करें — हालांकि आप कुछ निम्न-स्तरीय नियंत्रण के बदले सुविधा के लिए विचार करेंगे।

  • Qwen3 आपको सोच मोड के लिए स्पष्ट, विश्वसनीय नियंत्रण प्रदान करता है, जो फ्लैग और संदेश स्तर पर टॉगल्स (/think, /no_think) के साथ, जो त्वरित उत्तरों और गहरे तर्क के आवश्यकता वाले एप्लिकेशनों के लिए आदर्श है।

  • GPT-OSS के लिए, आवश्यकता हो तो तर्क आउटपुट को क्लाइंट तरफ से सैनिटाइज करें, क्योंकि सोच बंद करने का फ्लैग सभी बार नियमित रूप से सम्मान नहीं किया जा सकता है।

  • उत्पादन में, त्रुटि संभाल, कनेक्शन पूलिंग, समय सीमा और मॉनिटरिंग को लागू करें ताकि Ollama-पावर्ड एप्लिकेशनों के लिए मजबूत बनाए रखें।

Go के मजबूत प्रकार, उत्कृष्ट समानांतर प्राइमिटिव्स और Ollama के सीधे एपीआई के संयोजन से AI-पावर्ड एप्लिकेशनों बनाने के लिए एक आदर्श स्टैक है — सरल चैटबॉट से जटिल RAG प्रणालियों तक।

मुख्य बिंदु

यहां अपने दृष्टिकोण के चयन के लिए एक त्वरित संदर्भ है:

उपयोग के मामला सिफारिश किया गया दृष्टिकोण क्यों
उत्पादन एप्लिकेशन github.com/ollama/ollama/api अधिकारिक समर्थन, पूर्ण API कवरेज, मुख्य परियोजना के साथ बनाए रखा
RAG/चेन/उपकरण पाइपलाइन LangChainGo उच्च-स्तरीय अमूल्यताएं, वेक्टर स्टोर्स के साथ एकीकरण
सीखना/प्रयोग करना क्रूर REST के साथ net/http पूर्ण पारदर्शिता, कोई निर्भरता नहीं, शैक्षिक
त्वरित प्रोटोटाइप अधिकारिक SDK सरलता और शक्ति के बीच संतुलन
स्ट्रीमिंग चैट UI अधिकारिक SDK के साथ कॉलबैक बिल्ट-इन स्ट्रीमिंग समर्थन, स्पष्ट API

मॉडल चयन मार्गदर्शन:

  • Qwen3: उन एप्लिकेशनों के लिए सबसे अच्छा है जिनमें नियंत्रित सोच मोड की आवश्यकता होती है, विश्वसनीय बहु-चरण चैट
  • GPT-OSS: मजबूत प्रदर्शन होता है लेकिन तर्क/तर्क आउटपुट के लिए घोषणात्मक नियंत्रण की आवश्यकता होती है
  • अन्य मॉडल: विस्तार से परीक्षण करें; सोच व्यवहार मॉडल परिवार के अनुसार भिन्न होता है

संदर्भ और आगे के पढ़ने के लिए

आधिकारिक दस्तावेज

Go SDK विकल्प

मॉडल-विशिष्ट संसाधन

संबंधित विषय

अन्य उपयोगी लिंक