<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Local LLM on kenji.blog</title><link>http://kenji.blog/hi/tags/local-llm/</link><description>Recent content in Local LLM on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>hi</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 02:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/hi/tags/local-llm/index.xml" rel="self" type="application/rss+xml"/><item><title>Ollama का उपयोग करके स्थानीय LLM का आसान सेटअप और API इंटीग्रेशन</title><link>http://kenji.blog/hi/p/ollama-local-llm-api-guide/</link><pubDate>Fri, 11 Sep 2026 02:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/ollama-local-llm-api-guide/</guid><description>&lt;img src="http://kenji.blog/p/ollama-local-llm-api-guide/img/eyecatch.jpg" alt="Featured image of post Ollama का उपयोग करके स्थानीय LLM का आसान सेटअप और API इंटीग्रेशन" />&lt;h1 id="परचय-हम-सथनय-llm-क-आवशयकत-कय-ह">परिचय: हमें स्थानीय LLM की आवश्यकता क्यों है?
&lt;/h1>&lt;p>बड़े भाषा मॉडल (LLM) के उदय ने हमारे जीवन और विकास के तरीकों में नाटकीय बदलाव लाए हैं। ChatGPT, Claude और Gemini जैसी शक्तिशाली क्लाउड-आधारित AI सेवाएँ हर दिन विकसित हो रही हैं और अत्यधिक उन्नत तर्क क्षमताएँ प्रदान कर रही हैं। हालाँकि, क्लाउड-आधारित LLM हर उपयोग के मामले में सर्वोत्तम नहीं हैं। क्लाउड LLM में निम्नलिखित चुनौतियाँ मौजूद हैं:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>गोपनीयता और सुरक्षा संबंधी समस्याएँ&lt;/strong>: गोपनीय या व्यक्तिगत जानकारी वाले डेटा को बाहरी सर्वर पर भेजना अक्सर कॉर्पोरेट अनुपालन (compliance) और सुरक्षा के दृष्टिकोण से अस्वीकार्य होता है।&lt;/li>
&lt;li>&lt;strong>लागत की अनिश्चितता&lt;/strong>: API उपयोग शुल्क टोकन की संख्या पर निर्भर करता है, इसलिए बड़े पैमाने पर डेटा प्रोसेसिंग या लगातार अनुरोध करने वाले सिस्टम में, रनिंग कॉस्ट के आसमान छूने का जोखिम होता है।&lt;/li>
&lt;li>&lt;strong>लेटेंसी और नेटवर्क पर निर्भरता&lt;/strong>: ऑफलाइन वातावरण में उपयोग या एज डिवाइस (edge devices) पर निष्पादन के लिए जहां बहुत कम लेटेंसी की आवश्यकता होती है, नेटवर्क संचार एक बाधा बन जाता है।&lt;/li>
&lt;li>&lt;strong>वेंडर लॉक-इन (Vendor Lock-in)&lt;/strong>: किसी विशिष्ट प्रदाता के मॉडल पर निर्भर रहने से, आपको भविष्य में सेवा की समाप्ति, नियमों में बदलाव, या मॉडल अपडेट के कारण अनपेक्षित व्यवहार परिवर्तनों से प्रभावित होने का जोखिम रहता है।&lt;/li>
&lt;/ol>
&lt;p>इन चुनौतियों को हल करने के साधन के रूप में &amp;ldquo;स्थानीय LLM (Local LLM)&amp;rdquo; ध्यान आकर्षित कर रहा है। अपने स्वयं के हार्डवेयर पर मॉडल चलाकर, आप बिना किसी बाहरी सर्वर पर डेटा भेजे और बिना किसी मासिक लागत की चिंता किए, स्वतंत्र रूप से AI का उपयोग कर सकते हैं।&lt;/p>
&lt;p>इस लेख में, हम &amp;ldquo;&lt;strong>Ollama&lt;/strong>&amp;rdquo; के बारे में विस्तार से बताएंगे, जो एक ऐसा उपकरण है जो आपको आश्चर्यजनक रूप से आसानी से स्थानीय LLM को स्थापित करने, प्रबंधित करने और API के साथ एकीकृत करने की अनुमति देता है। हम इसके मूल सिद्धांतों, आंतरिक वास्तुकला (internal architecture), Python और Node.js का उपयोग करके उन्नत API एकीकरण, और प्रदर्शन ट्यूनिंग (performance tuning) के लिए गणना सूत्रों (formulas) तक सब कुछ कवर करेंगे।&lt;/p>
&lt;hr>
&lt;h1 id="ollama-कय-ह-इसक-आतरक-वसतकल">Ollama क्या है? इसकी आंतरिक वास्तुकला
&lt;/h1>&lt;p>Ollama एक ऐसा प्लेटफॉर्म है जो स्थानीय वातावरण में ओपन-सोर्स बड़े भाषा मॉडल (जैसे Llama 3, Phi-3, Mistral, Gemma आदि) को आसानी से चलाने और प्रबंधित करने के लिए उपयोग किया जाता है। पहले, एक स्थानीय LLM वातावरण स्थापित करने के लिए बहुत जटिल प्रक्रियाओं की आवश्यकता होती थी, जैसे Python वातावरण सेट करना, CUDA टूलकिट स्थापित करना, PyTorch की निर्भरता (dependencies) को हल करना, Hugging Face से विशाल मॉडल फाइलें डाउनलोड करना और प्रारूप रूपांतरण (जैसे Safetensors से GGUF) करना।&lt;/p>
&lt;p>Ollama इन जटिलताओं को छुपाता है और आपको Docker जैसे उपयोग में आसानी के साथ LLM को संभालने की अनुमति देता है। आप केवल एक कमांड से मॉडल डाउनलोड (&lt;code>pull&lt;/code>), निष्पादित (&lt;code>run&lt;/code>), और एक HTTP सर्वर के रूप में शुरू कर सकते हैं।&lt;/p>
&lt;h2 id="कर-तकनक-llamacpp-क-रपर">कोर तकनीक: llama.cpp का रैपर
&lt;/h2>&lt;p>Ollama के अनुमान इंजन (inference engine) के बैकएंड के रूप में काम करने वाली कोर तकनीक &amp;ldquo;&lt;strong>llama.cpp&lt;/strong>&amp;rdquo; है, जो C/C++ में लागू एक उच्च गति वाली LLM अनुमान लाइब्रेरी है। llama.cpp में Apple Silicon (Metal), NVIDIA GPU (CUDA), AMD GPU (ROCm), या यहां तक कि केवल CPU वातावरण में हार्डवेयर के प्रदर्शन को अधिकतम करते हुए मॉडल को निष्पादित करने की क्षमता है।&lt;/p>
&lt;p>Ollama में llama.cpp शामिल है और यह एक ऐसी वास्तुकला को अपनाता है जहां Go भाषा में लिखा गया एक सर्वर प्रक्रिया REST API प्रदान करता है और बैकग्राउंड में llama.cpp अनुमान इंजन को कॉल करता है।&lt;/p>
&lt;p>नीचे दिया गया Mermaid आरेख Ollama की समग्र वास्तुकला को दर्शाता है।&lt;/p>
&lt;div class="mermaid">graph TD
A["क्लाइंट ऐप्स (Python / Node.js)"] -- "HTTP/REST API" --> B["Ollama सर्वर (Go)"]
B --> C["मॉडल मैनेजर (GGUF हैंडलिंग)"]
B --> D["अनुमान इंजन (llama.cpp)"]
D --> E["GPU एक्सेलेरेशन (CUDA / Metal / ROCm)"]
D --> F["CPU फ़ॉलबैक (AVX2 / AVX-512)"]
C --> G["स्थानीय मॉडल स्टोरेज"]&lt;/div>
&lt;p>इस वास्तुकला के साथ, डेवलपर्स C++ बिल्ड या GPU ड्राइवर सेटिंग्स के बारे में चिंता किए बिना, मानक HTTP अनुरोधों के माध्यम से उन्नत अनुमान क्षमताओं का उपयोग कर सकते हैं।&lt;/p>
&lt;hr>
&lt;h1 id="ollama-क-सथपन-और-पररभक-सटअप">Ollama की स्थापना और प्रारंभिक सेटअप
&lt;/h1>&lt;p>Ollama की स्थापना बहुत सरल है। प्रत्येक OS के लिए अनुकूलित बायनेरिज़ प्रदान किए जाते हैं।&lt;/p>
&lt;h2 id="macos--windows">macOS / Windows
&lt;/h2>&lt;p>बस आधिकारिक वेबसाइट (&lt;a class="link" href="https://ollama.com/" target="_blank" rel="noopener"
>https://ollama.com/&lt;/a>) से इंस्टॉलर डाउनलोड करें और इसे चलाएं। macOS संस्करण स्वचालित रूप से Apple Silicon के Metal API को पहचानता है, और Windows संस्करण NVIDIA GPU (CUDA) को पहचानता है, और उपलब्ध होने पर हार्डवेयर त्वरण (hardware acceleration) को सक्षम बनाता है।&lt;/p>
&lt;h2 id="linux">Linux
&lt;/h2>&lt;p>Linux वातावरण (जैसे Ubuntu) में, आप निम्न वन-लाइनर कमांड चलाकर आवश्यक घटकों को स्थापित कर सकते हैं और Ollama सर्वर को systemd सेवा के रूप में प्रारंभ कर सकते हैं।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -fsSL https://ollama.com/install.sh &lt;span class="p">|&lt;/span> sh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>स्थापना पूर्ण होने के बाद, टर्मिनल में संस्करण (version) की जाँच करें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ollama --version
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>यदि संस्करण जानकारी प्रदर्शित होती है, तो यह सफलतापूर्वक स्थापित हो गया है।&lt;/p>
&lt;h2 id="docker-क-उपयग-करक-नषपदन">Docker का उपयोग करके निष्पादन
&lt;/h2>&lt;p>यदि आप अपने मौजूदा वातावरण को प्रदूषित नहीं करना चाहते हैं या इसे कंटेनर-आधारित बुनियादी ढांचे (infrastructure) में एकीकृत करना चाहते हैं, तो आप आधिकारिक Docker छवि का भी उपयोग कर सकते हैं। GPU का उपयोग करने के लिए NVIDIA Container Toolkit स्थापित होना आवश्यक है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># केवल CPU के साथ निष्पादित करने के लिए&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># NVIDIA GPU का उपयोग करने के लिए&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker run -d --gpus&lt;span class="o">=&lt;/span>all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>डिफ़ॉल्ट रूप से, Ollama सर्वर &lt;code>http://localhost:11434&lt;/code> पर सुनता है।&lt;/p>
&lt;hr>
&lt;h1 id="मडल-परबधन-और-बनयद-cli-कमड">मॉडल प्रबंधन और बुनियादी CLI कमांड
&lt;/h1>&lt;p>Ollama का सबसे बड़ा आकर्षण यह है कि इसका मॉडल प्रबंधन बहुत सहज (intuitive) है। आप Docker इमेजेज को संभालने की तरह ही विभिन्न मॉडलों का परीक्षण कर सकते हैं।&lt;/p>
&lt;h2 id="1-मडल-चलन-run">1. मॉडल चलाना (&lt;code>run&lt;/code>)
&lt;/h2>&lt;p>यह सबसे अधिक उपयोग किया जाने वाला कमांड है। यदि निर्दिष्ट मॉडल मौजूद नहीं है, तो यह स्वचालित रूप से डाउनलोड (&lt;code>pull&lt;/code>) हो जाएगा, और फिर एक इंटरैक्टिव प्रॉम्प्ट शुरू हो जाएगा।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ollama run llama3.1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>उपरोक्त कमांड चलाने पर Meta का नवीनतम मॉडल Llama 3.1 (8B पैरामीटर संस्करण) शुरू हो जाएगा। प्रॉम्प्ट पर कोई संदेश टाइप करें, और मॉडल की प्रतिक्रिया स्ट्रीमिंग द्वारा प्रदर्शित होगी। बाहर निकलने के लिए &lt;code>/bye&lt;/code> या &lt;code>Ctrl+D&lt;/code> टाइप करें।&lt;/p>
&lt;h2 id="2-मडल-डउनलड-करन-pull">2. मॉडल डाउनलोड करना (&lt;code>pull&lt;/code>)
&lt;/h2>&lt;p>यदि आप मॉडल को बैकग्राउंड में डाउनलोड करना चाहते हैं, तो &lt;code>pull&lt;/code> कमांड का उपयोग करें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ollama pull phi3:instruct
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ollama pull mistral:v0.3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Ollama की मॉडल लाइब्रेरी में, आप &lt;code>मॉडल_का_नाम:टैग&lt;/code> प्रारूप में संस्करण या परिमाणीकरण (quantization) स्तर निर्दिष्ट कर सकते हैं। यदि टैग छोड़ दिया जाता है, तो &lt;code>latest&lt;/code> लागू किया जाता है, लेकिन आप स्पष्ट रूप से एक विशिष्ट परिमाणीकरण मॉडल (उदा: &lt;code>llama3:8b-instruct-q4_0&lt;/code>) भी निर्दिष्ट कर सकते हैं।&lt;/p>
&lt;h3 id="परमणकरण-quantization-कय-ह">परिमाणीकरण (Quantization) क्या है?
&lt;/h3>&lt;p>आइए परिमाणीकरण के बारे में थोड़ा बात करते हैं। एक सामान्य LLM में एक वजन (weight) पैरामीटर 16-बिट फ्लोटिंग पॉइंट (FP16) आदि के रूप में रखा जाता है। 8 बिलियन (8B) पैरामीटर मॉडल के लिए, अकेले वजन लगभग 16GB VRAM की खपत करेगा। परिमाणीकरण वह तकनीक है जो इसे 4-बिट (Q4) या 8-बिट (Q8) पूर्णांक प्रकार (integer type) में संपीड़ित करती है।&lt;/p>
&lt;p>परिमाणीकरण मॉडल सटीकता के क्षरण (degradation) को कम करते हुए आवश्यक मेमोरी की मात्रा और मेमोरी बैंडविड्थ को नाटकीय रूप से कम कर सकता है। Ollama द्वारा वितरित मॉडल डिफ़ॉल्ट रूप से GGUF प्रारूप में हैं जो इष्टतम रूप से परिमाणित (अक्सर 4-बिट) होते हैं।&lt;/p>
&lt;h2 id="3-मडल-क-सच-बनन-list">3. मॉडलों की सूची बनाना (&lt;code>list&lt;/code>)
&lt;/h2>&lt;p>स्थानीय रूप से डाउनलोड किए गए मॉडलों की सूची और उनके आकार को प्रदर्शित करता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ollama list
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>आउटपुट उदाहरण:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">NAME ID SIZE MODIFIED
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">llama3.1:latest 43f7a214e532 4.7 GB 2 hours ago
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">phi3:instruct a2c89ceaed85 2.3 GB 3 days ago
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="4-मडल-हटन-rm">4. मॉडल हटाना (&lt;code>rm&lt;/code>)
&lt;/h2>&lt;p>डिस्क स्थान खाली करने के लिए उन मॉडलों को हटा दें जिनकी अब आवश्यकता ক্ষমতায় नहीं है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ollama rm phi3:instruct
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h1 id="modelfile-क-उपयग-करक-मडल-क-कसटमइज-करन">Modelfile का उपयोग करके मॉडल को कस्टमाइज़ करना
&lt;/h1>&lt;p>Ollama में, आप मौजूदा मॉडलों में सिस्टम प्रॉम्प्ट को इंजेक्ट करने, हाइपरपैरामीटर समायोजित करने और &amp;ldquo;&lt;strong>Modelfile&lt;/strong>&amp;rdquo; नामक तंत्र का उपयोग करके अपना स्वयं का कस्टम मॉडल बनाने के लिए कार्य कर सकते हैं। यह Docker की Dockerfile की अवधारणा के बिल्कुल समान है।&lt;/p>
&lt;p>नीचे दिया गया आरेख दिखाता है कि बेस मॉडल से कस्टम मॉडल कैसे प्राप्त (derive) किया जाता है।&lt;/p>
&lt;div class="mermaid">graph LR
A["बेस मॉडल (llama3.1)"] -->|"सिस्टम प्रॉम्प्ट जोड़ें"| B["मध्यवर्ती कॉन्फ़िगरेशन"]
B -->|"Temperature और Top_p सेट करें"| C["कस्टम मॉडल (kansai-coder)"]
C -->|"चलाएं (Run)"| D["इंटरएक्टिव CLI / API"]&lt;/div>
&lt;p>उदाहरण के रूप में, आइए एक प्रोग्रामिंग असिस्टेंट मॉडल बनाएं जो कंसाई बोली (Kansai dialect) में उत्तर देता है।&lt;/p>
&lt;p>अपनी कार्यशील निर्देशिका (working directory) में &lt;code>Modelfile&lt;/code> नाम की एक टेक्स्ट फ़ाइल बनाएँ और इसे निम्नानुसार लिखें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"># बेस मॉडल निर्दिष्ट करें
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">FROM llama3.1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># रचनात्मकता (temperature) जैसे हाइपरपैरामीटर सेट करें
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PARAMETER temperature 0.7
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PARAMETER top_p 0.9
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PARAMETER repeat_penalty 1.1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PARAMETER num_ctx 4096
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># सिस्टम प्रॉम्प्ट सेट करें
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">SYSTEM &amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">आप एक विश्व-स्तरीय सीनियर सॉफ्टवेयर इंजीनियर हैं।
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">उपयोगकर्ता के तकनीकी सवालों के जवाब हमेशा &amp;#39;कंसाई बोली&amp;#39; में दोस्ताना तरीके से दें।
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">यदि आप कोई कोड उदाहरण दिखाते हैं, तो सर्वोत्तम प्रथाओं का पालन करते हुए आधुनिक कोड प्रदान करें।
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>इस Modelfile से एक नया मॉडल बनाएँ (बिल्ड करें)।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ollama create kansai-coder -f Modelfile
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>बिल्ड पूरा होने के बाद, इसे चलाकर परीक्षण करें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ollama run kansai-coder
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt;&amp;gt;&amp;gt; Python में किसी सूची &lt;span class="o">(&lt;/span>list&lt;span class="o">)&lt;/span> को क्रमबद्ध &lt;span class="o">(&lt;/span>sort&lt;span class="o">)&lt;/span> कैसे करें?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>यह कस्टमाइज़्ड व्यवहार दिखाएगा जैसे, &amp;ldquo;यह आसान है, तुम Python के &lt;code>sorted()&lt;/code> फ़ंक्शन या &lt;code>sort()&lt;/code> विधि का उपयोग कर सकते हो!&amp;rdquo; इस तरह, आपके उपयोग के मामले के अनुरूप अनगिनत एजेंट स्थानीय रूप से बनाए और प्रबंधित किए जा सकते हैं।&lt;/p>
&lt;hr>
&lt;h1 id="ollama-rest-api-क-वसतत-वयखय">Ollama REST API की विस्तृत व्याख्या
&lt;/h1>&lt;p>हालाँकि CLI के साथ बातचीत करना सुविधाजनक है, लेकिन वास्तविक एप्लिकेशन विकास में Ollama का असली मूल्य इसका शक्तिशाली REST API है। आप सर्वर प्रक्रिया (डिफ़ॉल्ट रूप से &lt;code>http://localhost:11434&lt;/code>) पर HTTP अनुरोध भेजकर अनुमान परिणाम (inference results) प्राप्त कर सकते हैं।&lt;/p>
&lt;p>तीन मुख्य एंडपॉइंट निम्नलिखित हैं:&lt;/p>
&lt;ol>
&lt;li>&lt;code>/api/generate&lt;/code>: एकल प्रॉम्प्ट से टेक्स्ट जनरेशन&lt;/li>
&lt;li>&lt;code>/api/chat&lt;/code>: OpenAI API के समान चैट (संवाद) जनरेशन&lt;/li>
&lt;li>&lt;code>/api/embeddings&lt;/code>: वेक्टर एम्बेडिंग्स जनरेट करना&lt;/li>
&lt;/ol>
&lt;h2 id="apigenerate-क-उपयग-करक-टकसट-जनरट-करन">/api/generate का उपयोग करके टेक्स्ट जनरेट करना
&lt;/h2>&lt;p>यह सबसे बुनियादी जनरेशन एंडपॉइंट है। आइए cURL का उपयोग करके एक अनुरोध भेजें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -X POST http://localhost:11434/api/generate -d &lt;span class="s1">&amp;#39;{
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> &amp;#34;model&amp;#34;: &amp;#34;llama3.1&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> &amp;#34;prompt&amp;#34;: &amp;#34;Explain the concept of quantum entanglement in simple terms.&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> &amp;#34;stream&amp;#34;: false
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;code>&amp;quot;stream&amp;quot;: false&lt;/code> निर्दिष्ट करने से, सभी जनरेशन पूर्ण होने के बाद JSON एक साथ वापस आ जाता है। डिफ़ॉल्ट रूप से (&lt;code>true&lt;/code>), उत्पन्न टोकन JSON Lines प्रारूप में क्रमिक रूप से भेजे जाते हैं, जो स्ट्रीमिंग UI को लागू करने के लिए उपयुक्त है।&lt;/p>
&lt;p>प्रतिक्रिया का उदाहरण (आंशिक रूप से छोड़ा गया):&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;model&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;llama3.1&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;created_at&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;2026-09-11T10:00:00.000Z&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;response&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Quantum entanglement is like having a pair of magical dice...&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;done&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;context&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">128006&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">882&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">128007&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">271&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">10445&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;total_duration&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">4567890000&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;load_duration&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">1234000&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;prompt_eval_count&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">14&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;eval_count&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">256&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;eval_duration&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">4321000000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;code>context&lt;/code> एरे पिछले वार्तालाप की स्थिति को एन्कोड करता है, और इसे अगले अनुरोध में शामिल करके, आप संदर्भ बनाए रख सकते हैं। हालाँकि, वार्तालाप इतिहास को अधिक आसानी से प्रबंधित करने के लिए, निम्न &lt;code>/api/chat&lt;/code> का उपयोग किया जाता है।&lt;/p>
&lt;h2 id="apichat-क-उपयग-करक-वरतलप-chat-जनरट-करन">/api/chat का उपयोग करके वार्तालाप (chat) जनरेट करना
&lt;/h2>&lt;p>चूंकि हाल ही के LLM को चैट प्रारूप में फाइन-ट्यून किया गया है, इसलिए एप्लिकेशन विकास के लिए &lt;code>/api/chat&lt;/code> की अनुशंसा की जाती है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -X POST http://localhost:11434/api/chat -d &lt;span class="s1">&amp;#39;{
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> &amp;#34;model&amp;#34;: &amp;#34;llama3.1&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> &amp;#34;messages&amp;#34;: [
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> { &amp;#34;role&amp;#34;: &amp;#34;system&amp;#34;, &amp;#34;content&amp;#34;: &amp;#34;You are a helpful AI assistant.&amp;#34; },
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> { &amp;#34;role&amp;#34;: &amp;#34;user&amp;#34;, &amp;#34;content&amp;#34;: &amp;#34;What is the capital of France?&amp;#34; },
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> { &amp;#34;role&amp;#34;: &amp;#34;assistant&amp;#34;, &amp;#34;content&amp;#34;: &amp;#34;The capital of France is Paris.&amp;#34; },
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> { &amp;#34;role&amp;#34;: &amp;#34;user&amp;#34;, &amp;#34;content&amp;#34;: &amp;#34;What is its famous tower?&amp;#34; }
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> ],
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> &amp;#34;stream&amp;#34;: false
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>इस प्रकार, &lt;code>role&lt;/code> (system, user, assistant) वाले संदेश ऑब्जेक्ट्स की एक सरणी (array) पास करके, आप जटिल वार्तालाप संदर्भों को आसानी से संभाल सकते हैं।&lt;/p>
&lt;hr>
&lt;h1 id="python-एपलकशन-क-सथ-एककरण">Python एप्लिकेशन के साथ एकीकरण
&lt;/h1>&lt;p>Python AI विकास में सबसे मानक भाषा है। Python से Ollama का उपयोग करने के कई तरीके हैं, लेकिन आधिकारिक &lt;code>ollama-python&lt;/code> पैकेज का उपयोग करना सबसे आसान और विश्वसनीय तरीका है।&lt;/p>
&lt;h2 id="सथपन">स्थापना
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install ollama
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="सकरनस-synchronous-api-क-उपयग">सिंक्रोनस (Synchronous) API का उपयोग
&lt;/h2>&lt;p>यह चैट उत्पन्न करने के लिए मूल कोड है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">ollama&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># चैट इतिहास को रखने के लिए एक सूची (list)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">messages&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>&lt;span class="s1">&amp;#39;role&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;system&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;content&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;आप एक बेहतरीन सहायक हैं।&amp;#39;&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">chat_with_ollama&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">user_input&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messages&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">({&lt;/span>&lt;span class="s1">&amp;#39;role&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;user&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;content&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">user_input&lt;/span>&lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Ollama API को कॉल करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ollama&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">chat&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;llama3.1&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messages&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">messages&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">assistant_reply&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;message&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;content&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messages&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">({&lt;/span>&lt;span class="s1">&amp;#39;role&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;assistant&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;content&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">assistant_reply&lt;/span>&lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">assistant_reply&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">chat_with_ollama&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;मशीन लर्निंग के तीन प्रमुख दृष्टिकोण (approaches) क्या हैं?&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="एसकरनस-सटरमग-async-streaming-क-उपयग">एसिंक्रोनस स्ट्रीमिंग (Async Streaming) का उपयोग
&lt;/h2>&lt;p>वेब एप्लिकेशन (FastAPI या Starlette) या Discord / Slack बॉट विकसित करते समय, ब्लॉकिंग से बचने के लिए एसिंक्रोनस API और स्ट्रीमिंग का उपयोग करना महत्वपूर्ण है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">asyncio&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">ollama&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AsyncClient&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">async&lt;/span> &lt;span class="k">def&lt;/span> &lt;span class="nf">generate_stream&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AsyncClient&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># यदि आप stream=True निर्दिष्ट करते हैं, तो एक अतुल्यकालिक जनरेटर (async generator) वापस आ जाता है&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">async&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">chunk&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="n">client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">chat&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;llama3.1&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messages&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[{&lt;/span>&lt;span class="s1">&amp;#39;role&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;user&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;content&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;कृपया Python डेकोरेटर को विस्तार से समझाएं।&amp;#39;&lt;/span>&lt;span class="p">}],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">stream&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># प्रत्येक भाग (chunk) को क्रमिक रूप से मानक आउटपुट (standard output) में प्रदर्शित करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">chunk&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;message&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;content&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">end&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">flush&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="c1"># अंत में एक नई लाइन&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># एसिंक्रोनस फ़ंक्शन चलाएं&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">asyncio&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">generate_stream&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>इस तरह से कोड लिखकर, आप आसानी से ऐसा UX लागू कर सकते हैं जहां वर्ण धीरे-धीरे प्रदर्शित होते हैं, ठीक ChatGPT UI की तरह।&lt;/p>
&lt;h2 id="langchain-और-llamaindex-क-सथ-एककरण">LangChain और LlamaIndex के साथ एकीकरण
&lt;/h2>&lt;p>RAG (Retrieval-Augmented Generation) सिस्टम बनाते समय अक्सर उपयोग किए जाने वाले LangChain और LlamaIndex में भी, Ollama मूल रूप से समर्थित है।&lt;/p>
&lt;p>LangChain का उदाहरण:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">langchain_community.llms&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Ollama&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">llm&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Ollama&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;llama3.1&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">llm&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">invoke&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Explain dark matter.&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>आप बिना कोई बाहरी API कुंजी सेट किए LangChain की शक्तिशाली चेन और एजेंट सुविधाओं को स्थानीय रूप से चला सकते हैं।&lt;/p>
&lt;hr>
&lt;h1 id="nodejs-एपलकशन-क-सथ-एककरण">Node.js एप्लिकेशन के साथ एकीकरण
&lt;/h1>&lt;p>फ्रंट-एंड इंजीनियरों और फुल-स्टैक डेवलपर्स के लिए, TypeScript/Node.js वातावरण से स्थानीय LLM को कॉल करने में सक्षम होना एक बड़ा फायदा है। हम आधिकारिक &lt;code>ollama&lt;/code> NPM पैकेज का उपयोग करेंगे।&lt;/p>
&lt;h2 id="सथपन-1">स्थापना
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">npm install ollama
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="typescript-क-उपयग-करक-चटबट-करयनवयन-क-उदहरण">TypeScript का उपयोग करके चैटबॉट कार्यान्वयन का उदाहरण
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-typescript" data-lang="typescript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="nx">ollama&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">Message&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="kr">from&lt;/span> &lt;span class="s1">&amp;#39;ollama&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">async&lt;/span> &lt;span class="kd">function&lt;/span> &lt;span class="nx">runChatbot() {&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">messages&lt;/span>: &lt;span class="kt">Message&lt;/span>&lt;span class="p">[]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nx">role&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;system&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">content&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;You are a concise expert.&amp;#39;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span> &lt;span class="nx">role&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;user&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">content&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;Explain RESTful APIs.&amp;#39;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">await&lt;/span> &lt;span class="nx">ollama&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">chat&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">model&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;llama3.1&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">messages&lt;/span>: &lt;span class="kt">messages&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">stream&lt;/span>: &lt;span class="kt">false&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Assistant:&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">response&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">message&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">content&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Error communicating with Ollama:&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">error&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">runChatbot&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="सटरमग-समरथत-express-सरवर-बनन">स्ट्रीमिंग-समर्थित Express सर्वर बनाना
&lt;/h2>&lt;p>वेब फ्रंट-एंड को स्ट्रीमिंग प्रतिक्रियाएं देने वाले बैक-एंड API कार्यान्वयन का एक उदाहरण। भाग (chunks) भेजने के लिए SSE (Server-Sent Events) या नियमित HTTP स्ट्रीमिंग का उपयोग किया जाता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="nx">express&lt;/span> &lt;span class="nx">from&lt;/span> &lt;span class="s1">&amp;#39;express&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">import&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">Ollama&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="nx">from&lt;/span> &lt;span class="s1">&amp;#39;ollama&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">app&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">express&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">app&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">use&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">express&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">json&lt;/span>&lt;span class="p">());&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kr">const&lt;/span> &lt;span class="nx">ollama&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nx">Ollama&lt;/span>&lt;span class="p">({&lt;/span> &lt;span class="nx">host&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;http://127.0.0.1:11434&amp;#39;&lt;/span> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">app&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;/api/stream-chat&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kr">async&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">req&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nx">prompt&lt;/span> &lt;span class="p">}&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">req&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// HTTP रिस्पांस हेडर सेट करना (चंक ट्रांसफर)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">setHeader&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Content-Type&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;text/plain; charset=utf-8&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">setHeader&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Transfer-Encoding&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;chunked&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">stream&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kr">await&lt;/span> &lt;span class="nx">ollama&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">generate&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">model&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;llama3.1&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">prompt&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nx">prompt&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">stream&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="kr">await&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kr">const&lt;/span> &lt;span class="nx">chunk&lt;/span> &lt;span class="k">of&lt;/span> &lt;span class="nx">stream&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">chunk&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">response&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">end&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">err&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">status&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">500&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Error generating response.&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">res&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">end&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">app&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">listen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3000&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">()&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">log&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Server is running on port 3000&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h1 id="परदरशन-मटरकस-और-गणतय-वशलषण">प्रदर्शन मेट्रिक्स और गणितीय विश्लेषण
&lt;/h1>&lt;p>व्यावहारिक स्तर पर स्थानीय LLM प्रदान करने के लिए लेटेंसी और थ्रूपुट का विश्लेषण आवश्यक है। Ollama की API प्रतिक्रियाओं में प्रदर्शन से संबंधित विस्तृत मेट्रिक्स शामिल होते हैं।&lt;/p>
&lt;h2 id="टकन-जनरशन-गत-गणन-मडल">टोकन जनरेशन गति गणना मॉडल
&lt;/h2>&lt;p>उपयोगकर्ता अनुभव से सीधे जुड़े LLM के प्रतिक्रिया समय को &amp;ldquo;&lt;strong>Time To First Token (TTFT)&lt;/strong>&amp;rdquo; और &amp;ldquo;&lt;strong>Time Per Output Token (TPOT)&lt;/strong>&amp;rdquo; में विभाजित किया जा सकता है।&lt;/p>
&lt;p>कुल जनरेशन समय $T_{total}$ को उत्पन्न टोकन की संख्या $N$ होने पर निम्न प्रकार से तैयार किया जा सकता है:&lt;/p>
$$
T_{total} = t_{ttft} + \sum_{i=1}^{N-1} t_{tpot}^{(i)}
$$
&lt;p>यहाँ, यदि हम प्रत्येक टोकन को उत्पन्न करने में लगने वाले औसत समय को $\bar{t}_{tpot}$ के रूप में अनुमानित करते हैं, तो समीकरण सरल हो जाता है:&lt;/p>
$$
T_{total} \approx t_{ttft} + (N - 1) \times \bar{t}_{tpot}
$$
&lt;p>Ollama के API प्रतिक्रिया फ़ील्ड्स के साथ पत्राचार (correspondence) इस प्रकार है:&lt;/p>
&lt;ul>
&lt;li>&lt;code>prompt_eval_duration&lt;/code>: यह मोटे तौर पर $t_{ttft}$ (प्रॉम्प्ट मूल्यांकन समय) के बराबर है। यह नैनोसेकंड में लौटाया जाता है।&lt;/li>
&lt;li>&lt;code>eval_duration&lt;/code>: संपूर्ण जनरेशन प्रक्रिया में लगने वाला समय।&lt;/li>
&lt;li>&lt;code>eval_count&lt;/code>: उत्पन्न टोकन की संख्या $N$।&lt;/li>
&lt;/ul>
&lt;p>इसलिए, 1 सेकंड प्रति टोकन जनरेशन गति (Tokens Per Second: TPS) की गणना निम्न सूत्र से की जा सकती है:&lt;/p>
$$
TPS = \frac{eval\_count}{(eval\_duration / 10^9)} \quad [\text{tokens/sec}]
$$
&lt;p>उदाहरण के लिए, यदि &lt;code>eval_count: 256&lt;/code> है और &lt;code>eval_duration: 4321000000&lt;/code> (लगभग 4.32 सेकंड) है,
&lt;/p>
$$
TPS = \frac{256}{4.321} \approx 59.24 \text{ tokens/sec}
$$
&lt;p>
होगा। यदि यह स्थानीय वातावरण में 50 टोकन/सेकंड से अधिक है, तो यह उस गति से कहीं अधिक है जिस पर मनुष्य पढ़ सकता है, इसलिए यह कहा जा सकता है कि यह एक बहुत ही आरामदायक प्रतिक्रिया अनुभव प्रदान करता है।&lt;/p>
&lt;h2 id="आवशयक-vram-कषमत-क-अनमन-लगन-क-सतर">आवश्यक VRAM क्षमता का अनुमान लगाने का सूत्र
&lt;/h2>&lt;p>स्थानीय रूप से मॉडल चलाते समय, यह महत्वपूर्ण है कि मॉडल GPU के VRAM में फिट बैठता है या नहीं। यदि यह VRAM में फिट नहीं होता है और सिस्टम की मुख्य मेमोरी (RAM) पर फ़ॉलबैक करता है, तो जनरेशन गति काफी कम हो जाएगी।&lt;/p>
&lt;p>आवश्यक मेमोरी क्षमता $M$ (गीगाबाइट में) का अनुमान लगाने के लिए एक सरल सूत्र इस प्रकार है:&lt;/p>
$$
M \approx \frac{P \times Q}{8 \times 1024} + C
$$
&lt;ul>
&lt;li>$P$: मॉडल के मापदंडों (parameters) की संख्या (उदाहरण: 8B = $8000 \times 10^6$)&lt;/li>
&lt;li>$Q$: परिमाणीकरण (quantization) के बिट्स की संख्या (उदाहरण: 4-bit, 8-bit, 16-bit)&lt;/li>
&lt;li>$C$: कॉन्टेक्स्ट विंडो के लिए अतिरिक्त मेमोरी (KV कैश आदि। यह मॉडल और सेटिंग्स पर निर्भर करता है, लेकिन आमतौर पर लगभग 1 से 2GB की उम्मीद की जाती है)&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>गणना का उदाहरण&lt;/strong>: यदि Llama 3 (8B पैरामीटर) को 4-bit परिमाणीकरण के साथ चलाया जाता है:
&lt;/p>
$$
M_{model} = \frac{8,000 \times 4}{8 \times 1024} = \frac{32,000}{8192} \approx 3.9 \text{ GB}
$$
&lt;p>
यदि आप इसमें कॉन्टेक्स्ट मेमोरी जोड़ते हैं, तो आप देख सकते हैं कि यदि आपके पास लगभग 5GB से 6GB VRAM है, तो आप GPU पर मॉडल को पूरी तरह से तैनात (Full Offload) कर सकते हैं। यहां तक कि हाल ही के मिड-रेंज GPU (जैसे RTX 4060) जिनमें 8GB VRAM है, वे एक शक्तिशाली LLM चलाने में सक्षम हैं।&lt;/p>
&lt;hr>
&lt;h1 id="उननत-उपयग-क-ममल-और-नषकरष">उन्नत उपयोग के मामले और निष्कर्ष
&lt;/h1>&lt;p>Ollama को स्थानीय नेटवर्क के भीतर API के रूप में उजागर (expose) करके, केवल चैटबॉट्स के अलावा कई तरह के अनुप्रयोग संभव हो जाते हैं।&lt;/p>
&lt;h3 id="1-सथनय-rag-retrieval-augmented-generation-बनन">1. स्थानीय RAG (Retrieval-Augmented Generation) बनाना
&lt;/h3>&lt;p>Ollama के &lt;code>/api/embeddings&lt;/code> एंडपॉइंट (जैसे &lt;code>nomic-embed-text&lt;/code> एम्बेडिंग मॉडल) को ChromaDB या Qdrant जैसे स्थानीय वेक्टर डेटाबेस के साथ जोड़कर, आप एक सुरक्षित RAG सिस्टम पूरी तरह से ऑफलाइन बना सकते हैं जो आंतरिक गोपनीय दस्तावेजों को पढ़ सकता है और सवालों के जवाब दे सकता है।&lt;/p>
&lt;h3 id="2-ide-और-एडटरस-क-लए-ai-अससटट">2. IDE और एडिटर्स के लिए AI असिस्टेंट
&lt;/h3>&lt;p>VS Code एक्सटेंशन (जैसे Continue.dev) या Neovim प्लग-इन के बैकएंड के रूप में Ollama को निर्दिष्ट करके, आप स्थानीय मॉडल (जैसे &lt;code>codellama&lt;/code> या &lt;code>deepseek-coder&lt;/code>) का उपयोग करके GitHub Copilot की तरह ही मुफ़्त में कोड पूरा करने (code completion) और कोड स्पष्टीकरण (code explanation) कर सकते हैं।&lt;/p>
&lt;h3 id="3-ऑटमशन-सकरपटस-म-एककरण">3. ऑटोमेशन स्क्रिप्ट्स में एकीकरण
&lt;/h3>&lt;p>Python या शेल स्क्रिप्ट्स में Ollama के API अनुरोधों को शामिल करके, आप अपने दैनिक कार्यप्रवाह के हर हिस्से में AI की शक्ति ला सकते हैं, जैसे कि स्वचालित लॉग सारांश (log summarization), Git कमिट संदेशों की स्वचालित जनरेशन, और बॉयलरप्लेट टेक्स्ट का वर्गीकरण (classification)।&lt;/p>
&lt;h2 id="नषकरष">निष्कर्ष
&lt;/h2>&lt;p>Ollama के आगमन से, स्थानीय LLM स्थापित करने की बाधा बहुत कम हो गई है। Docker कंटेनरों को प्रबंधित करने जैसी सरल कमांड प्रणाली और एक REST API जो बाहरी अनुप्रयोगों से आसानी से उपयोग की जा सकती है, इसका संयोजन स्थानीय AI विकास में वर्तमान वास्तविक मानक (de facto standard) माना जा सकता है।&lt;/p>
&lt;p>क्लाउड LLM की लागत और सुरक्षा बाधाओं से जूझ रहे डेवलपर्स के लिए, मैं आपको इस लेख में दिए गए चरणों का उपयोग करके Ollama के साथ एक स्थानीय LLM वातावरण बनाने और इसे अपने एप्लिकेशन में एकीकृत करने के लिए प्रोत्साहित करता हूँ। आप निश्चित रूप से AI की संभावनाओं को अधिक स्वतंत्र रूप से और अपने करीब महसूस कर पाएंगे।&lt;/p></description></item></channel></rss>