पाइथन में ओलामा वेब सर्च एपीआई का उपयोग

पाइथन और ओलामा के साथ AI खोज एजेंट बनाएं

Page content

Ollama के Python लाइब्रेरी में अब नेटिव Ollama वेब सर्च (https://www.glukhov.org/hi/post/2025/12/ollama-web-search-in-python/ “Ollama web search in python”) क्षमताएं शामिल हैं। कुछ ही लाइनों के कोड के साथ, आप अपने स्थानीय LLMs को वेब से रियल-टाइम जानकारी के साथ बढ़ा सकते हैं, जिससे हॉल्युसिनेशन कम होंगे और सटीकता बढ़ेगी।

digital space

शुरू करने के लिए

Ollama Python लाइब्रेरी के वेब सर्च संस्करण को कैसे इंस्टॉल करें? संस्करण 0.6.0 या उससे ऊपर का उपयोग करके pip install 'ollama>=0.6.0'। इस संस्करण में web_search और web_fetch फंक्शंस शामिल हैं।

pip install 'ollama>=0.6.0'

Python environments और packages को manage करने के लिए, uv का उपयोग करें, जो एक तेज Python package manager है, या venv का उपयोग करके एक virtual environment सेट अप करें ताकि आप अपने dependencies को isolated रख सकें।

अपने Ollama account से एक API key बनाएं और इसे एक environment variable के रूप में सेट करें:

export OLLAMA_API_KEY="your_api_key"

Windows PowerShell पर:

$env:OLLAMA_API_KEY = "your_api_key"

बेसिक वेब सर्च

Ollama के साथ वेब सर्च करने का सबसे सरल तरीका:

import ollama

# Simple web search
response = ollama.web_search("What is Ollama?")
print(response)

Output:

results = [
    {
        "title": "Ollama",
        "url": "https://ollama.com/",
        "content": "Cloud models are now available in Ollama..."
    },
    {
        "title": "What is Ollama? Features, Pricing, and Use Cases",
        "url": "https://www.walturn.com/insights/what-is-ollama",
        "content": "Our services..."
    },
    {
        "title": "Complete Ollama Guide: Installation, Usage & Code Examples",
        "url": "https://collabnix.com/complete-ollama-guide",
        "content": "Join our Discord Server..."
    }
]

Result Count को Control करना

import ollama

# Get more results
response = ollama.web_search("latest AI news", max_results=10)

for result in response.results:
    print(f"📌 {result.title}")
    print(f"   {result.url}")
    print(f"   {result.content[:100]}...")
    print()

Full Page Content को Fetch करना

Ollama Python में web_search vs web_fetch क्या है? web_search इंटरनेट को क्वेरी करता है और कई सर्च रिजल्ट्स के साथ टाइटल्स, URLs, और स्निपेट्स रिटर्न करता है। web_fetch एक विशिष्ट URL के पूरे कंटेंट को रिट्रीव करता है, जिसमें पेज टाइटल, मार्कडाउन कंटेंट, और लिंक्स शामिल हैं। web_fetch द्वारा रिटर्न किया गया मार्कडाउन कंटेंट और अधिक प्रोसेसिंग के लिए आदर्श है—अगर आपको अन्य संदर्भों में HTML को मार्कडाउन में कन्वर्ट करने की आवश्यकता है, तो हमारे गाइड पर देखें converting HTML to Markdown with Python.

from ollama import web_fetch

result = web_fetch('https://ollama.com')
print(result)

Output:

WebFetchResponse(
    title='Ollama',
    content='[Cloud models](https://ollama.com/blog/cloud-models) are now available in Ollama\n\n**Chat & build with open models**\n\n[Download](https://ollama.com/download) [Explore models](https://ollama.com/models)\n\nAvailable for macOS, Windows, and Linux',
    links=['https://ollama.com/', 'https://ollama.com/models', 'https://github.com/ollama/ollama']
)

Search और Fetch को Combine करना

एक सामान्य पैटर्न यह है कि पहले सर्च करें, फिर रिलेवेंट रिजल्ट्स से पूरे कंटेंट को फेट्च करें:

from ollama import web_search, web_fetch

# Search for information
search_results = web_search("Ollama new features 2025")

# Fetch full content from the first result
if search_results.results:
    first_url = search_results.results[0].url
    full_content = web_fetch(first_url)

    print(f"Title: {full_content.title}")
    print(f"Content: {full_content.content[:500]}...")
    print(f"Links found: {len(full_content.links)}")

एक Search Agent बनाना

Ollama search agents के लिए कौन से Python models सबसे अच्छे काम करते हैं? टूल-यूज क्षमताओं वाले models सबसे अच्छे काम करते हैं, जिसमें qwen3, gpt-oss, और cloud models जैसे qwen3:480b-cloud और deepseek-v3.1-cloud शामिल हैं। इन models से structured outputs की आवश्यकता वाले अधिक उन्नत उपयोग के मामलों के लिए, हमारे गाइड पर देखें LLMs with Structured Output using Ollama and Qwen3.

पहले एक capable model को pull करें:

ollama pull qwen3:4b

Simple Search Agent

यह एक बेसिक search agent है जो स्वचालित रूप से यह निर्णय ले सकता है कि कब सर्च करना है:

from ollama import chat, web_fetch, web_search

available_tools = {'web_search': web_search, 'web_fetch': web_fetch}

messages = [{'role': 'user', 'content': "what is ollama's new engine"}]

while True:
    response = chat(
        model='qwen3:4b',
        messages=messages,
        tools=[web_search, web_fetch],
        think=True
    )

    if response.message.thinking:
        print('🧠 Thinking:', response.message.thinking[:200], '...')

    if response.message.content:
        print('💬 Response:', response.message.content)

    messages.append(response.message)

    if response.message.tool_calls:
        print('🔧 Tool calls:', response.message.tool_calls)
        for tool_call in response.message.tool_calls:
            function_to_call = available_tools.get(tool_call.function.name)
            if function_to_call:
                args = tool_call.function.arguments
                result = function_to_call(**args)
                print('📥 Result:', str(result)[:200], '...')
                # Truncate result for limited context lengths
                messages.append({
                    'role': 'tool',
                    'content': str(result)[:2000 * 4],
                    'tool_name': tool_call.function.name
                })
            else:
                messages.append({
                    'role': 'tool',
                    'content': f'Tool {tool_call.function.name} not found',
                    'tool_name': tool_call.function.name
                })
    else:
        break

Python में बड़े वेब सर्च रिजल्ट्स को कैसे handle करें? रिजल्ट्स को कंटेक्स्ट लिमिट्स में फिट करने के लिए उन्हें ट्रंकेट करें। सिफारिश की जाने वाली विधि यह है कि मॉडल को पास करने से पहले रिजल्ट स्ट्रिंग को लगभग 8000 अक्षरों (2000 टोकन्स × 4 अक्षर) तक स्लाइस करें।

Error Handling के साथ Advanced Search Agent

यह एक बेहतर error handling के साथ उन्नत संस्करण है:

from ollama import chat, web_fetch, web_search
import json

class SearchAgent:
    def __init__(self, model: str = 'qwen3:4b'):
        self.model = model
        self.tools = {'web_search': web_search, 'web_fetch': web_fetch}
        self.messages = []
        self.max_iterations = 10

    def query(self, question: str) -> str:
        self.messages = [{'role': 'user', 'content': question}]

        for iteration in range(self.max_iterations):
            try:
                response = chat(
                    model=self.model,
                    messages=self.messages,
                    tools=[web_search, web_fetch],
                    think=True
                )
            except Exception as e:
                return f"Error during chat: {e}"

            self.messages.append(response.message)

            # If no tool calls, we have a final answer
            if not response.message.tool_calls:
                return response.message.content or "No response generated"

            # Execute tool calls
            for tool_call in response.message.tool_calls:
                result = self._execute_tool(tool_call)
                self.messages.append({
                    'role': 'tool',
                    'content': result,
                    'tool_name': tool_call.function.name
                })

        return "Max iterations reached without final answer"

    def _execute_tool(self, tool_call) -> str:
        func_name = tool_call.function.name
        args = tool_call.function.arguments

        if func_name not in self.tools:
            return f"Unknown tool: {func_name}"

        try:
            result = self.tools[func_name](**args)
            # Truncate for context limits
            result_str = str(result)
            if len(result_str) > 8000:
                result_str = result_str[:8000] + "... [truncated]"
            return result_str
        except Exception as e:
            return f"Tool error: {e}"

# Usage
agent = SearchAgent(model='qwen3:4b')
answer = agent.query("What are the latest features in Ollama?")
print(answer)

क्या मैं Ollama Python web search को async code के साथ use कर सकता हूँ? हाँ, Ollama Python लाइब्रेरी async operations का समर्थन करती है। async applications में non-blocking web search और fetch operations के लिए AsyncClient का उपयोग करें। serverless contexts में Python और अन्य languages के बीच performance comparisons के लिए, हमारे analysis पर देखें AWS Lambda performance across JavaScript, Python, and Golang.

import asyncio
from ollama import AsyncClient

async def async_search():
    client = AsyncClient()

    # Perform multiple searches concurrently
    tasks = [
        client.web_search("Ollama features"),
        client.web_search("local LLM tools"),
        client.web_search("AI search agents"),
    ]

    results = await asyncio.gather(*tasks)

    for i, result in enumerate(results):
        print(f"Search {i + 1}:")
        for r in result.results[:2]:
            print(f"  - {r.title}")
        print()

# Run async search
asyncio.run(async_search())

Async Search Agent

import asyncio
from ollama import AsyncClient

async def async_research_agent(question: str):
    client = AsyncClient()
    messages = [{'role': 'user', 'content': question}]

    while True:
        response = await client.chat(
            model='qwen3:4b',
            messages=messages,
            tools=[client.web_search, client.web_fetch],
        )

        messages.append(response.message)

        if not response.message.tool_calls:
            return response.message.content

        # Execute tool calls concurrently
        tool_tasks = []
        for tool_call in response.message.tool_calls:
            if tool_call.function.name == 'web_search':
                task = client.web_search(**tool_call.function.arguments)
            elif tool_call.function.name == 'web_fetch':
                task = client.web_fetch(**tool_call.function.arguments)
            else:
                continue
            tool_tasks.append((tool_call.function.name, task))

        # Gather results
        for tool_name, task in tool_tasks:
            result = await task
            messages.append({
                'role': 'tool',
                'content': str(result)[:8000],
                'tool_name': tool_name
            })

# Run
answer = asyncio.run(async_research_agent("What's new in Python 3.13?"))
print(answer)

संदर्भ लंबाई और प्रदर्शन

मुझे पाइथन सर्च एजेंट्स के लिए किस संदर्भ लंबाई सेट करनी चाहिए? तर्कसंगत प्रदर्शन के लिए संदर्भ लंबाई को लगभग 32000 टोकन सेट करें। सर्च एजेंट्स पूर्ण संदर्भ लंबाई के साथ सबसे अच्छी तरह से काम करते हैं क्योंकि web_search और web_fetch हजारों टोकन वापस कर सकते हैं।

from ollama import chat, web_search

# सर्च-हैवी टास्क्स के लिए उच्च संदर्भ सेट करें
response = chat(
    model='qwen3:4b',
    messages=[{'role': 'user', 'content': 'नवीनतम AI विकासों का अनुसंधान करें'}],
    tools=[web_search],
    options={
        'num_ctx': 32768,  # 32K संदर्भ
    }
)

MCP सर्वर एकीकरण

Ollama एक पाइथन MCP सर्वर प्रदान करता है जो किसी भी MCP क्लाइंट में वेब सर्च सक्षम बनाता है। वेब सर्च और स्क्रैपिंग क्षमताओं के साथ पाइथन में MCP सर्वर बनाने के लिए एक व्यापक गाइड के लिए, हमारी विस्तृत ट्यूटोरियल देखें पाइथन में MCP सर्वर बनाना.

Cline एकीकरण

Cline सेटिंग्स में MCP सर्वर कॉन्फ़िगर करें:

MCP सर्वर प्रबंधित करें → MCP सर्वर कॉन्फ़िगर करें → जोड़ें:

{
  "mcpServers": {
    "web_search_and_fetch": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "path/to/web-search-mcp.py"],
      "env": { "OLLAMA_API_KEY": "your_api_key_here" }
    }
  }
}

Codex एकीकरण

~/.codex/config.toml में जोड़ें:

[mcp_servers.web_search]
command = "uv"
args = ["run", "path/to/web-search-mcp.py"]
env = { "OLLAMA_API_KEY" = "your_api_key_here" }

अपने खुद के MCP सर्वर बनाना

#!/usr/bin/env python3
"""Ollama वेब सर्च के लिए सरल MCP सर्वर।"""

import os
from mcp.server import Server
from mcp.types import Tool, TextContent
from ollama import web_search, web_fetch

app = Server("ollama-web-search")

@app.tool()
async def search_web(query: str, max_results: int = 5) -> str:
    """इंटरनेट पर जानकारी खोजें।"""
    results = web_search(query, max_results=max_results)

    output = []
    for r in results.results:
        output.append(f"**{r.title}**\n{r.url}\n{r.content}\n")

    return "\n---\n".join(output)

@app.tool()
async def fetch_page(url: str) -> str:
    """एक वेब पेज की पूर्ण सामग्री प्राप्त करें।"""
    result = web_fetch(url)
    return f"# {result.title}\n\n{result.content}"

if __name__ == "__main__":
    app.run()

व्यावहारिक उदाहरण

ये उदाहरण Ollama के वेब सर्च API के वास्तविक दुनिया अनुप्रयोगों को दर्शाते हैं। आप इन पैटर्न्स को विस्तारित कर सकते हैं ताकि अधिक जटिल प्रणालियाँ बनाई जा सकें—for instance, सर्च परिणामों को पाइथन में PDF जनरेशन के साथ मिलाकर रिसर्च रिपोर्ट्स बनाना।

समाचार सारांशकर्ता

from ollama import chat, web_search

def summarize_news(topic: str) -> str:
    # हाल के समाचारों की खोज करें
    results = web_search(f"{topic} latest news", max_results=5)

    # सर्च परिणामों को मॉडल के लिए फॉर्मेट करें
    news_content = "\n\n".join([
        f"**{r.title}**\n{r.content}"
        for r in results.results
    ])

    # मॉडल से सारांश करने के लिए कहें
    response = chat(
        model='qwen3:4b',
        messages=[{
            'role': 'user',
            'content': f"इन {topic} के बारे में समाचार आइटम्स का सारांश दें:\n\n{news_content}"
        }]
    )

    return response.message.content

summary = summarize_news("artificial intelligence")
print(summary)

रिसर्च सहायक

from ollama import chat, web_search, web_fetch
from dataclasses import dataclass

@dataclass
class ResearchResult:
    question: str
    sources: list
    answer: str

def research(question: str) -> ResearchResult:
    # संबंधित जानकारी की खोज करें
    search_results = web_search(question, max_results=3)

    # शीर्ष स्रोतों से पूर्ण सामग्री प्राप्त करें
    sources = []
    full_content = []

    for result in search_results.results[:3]:
        try:
            page = web_fetch(result.url)
            sources.append(result.url)
            full_content.append(f"Source: {result.url}\n{page.content[:2000]}")
        except:
            continue

    # व्यापक उत्तर जनरेट करें
    context = "\n\n---\n\n".join(full_content)

    response = chat(
        model='qwen3:4b',
        messages=[{
            'role': 'user',
            'content': f"""निम्नलिखित स्रोतों के आधार पर इस प्रश्न का उत्तर दें: {question}

स्रोत:
{context}

स्रोतों के संदर्भ के साथ एक व्यापक उत्तर प्रदान करें।"""
        }]
    )

    return ResearchResult(
        question=question,
        sources=sources,
        answer=response.message.content
    )

# उपयोग
result = research("Ollama के नए मॉडल शेड्यूलिंग का काम कैसे चलता है?")
print(f"प्रश्न: {result.question}")
print(f"स्रोत: {result.sources}")
print(f"उत्तर: {result.answer}")

अनुशंसित मॉडल

मॉडल पैरामीटर सबसे अच्छा उपयोग के लिए
qwen3:4b 4B तेज़ स्थानीय खोज
qwen3 8B सामान्य उद्देश्य एजेंट
gpt-oss विभिन्न रिसर्च टास्क्स
qwen3:480b-cloud 480B जटिल तर्क (क्लाउड)
gpt-oss:120b-cloud 120B लंबे रूप में रिसर्च (क्लाउड)
deepseek-v3.1-cloud - उन्नत विश्लेषण (क्लाउड)

सर्वोत्तम प्रथाएँ

  1. परिणाम काटें: हमेशा वेब परिणामों को संदर्भ सीमाओं (~8000 चर) में फिट करने के लिए काटें
  2. त्रुटि हैंडलिंग: नेटवर्क विफलताओं के लिए टूल कॉल्स को try/except में लपेटें
  3. रेट लिमिटिंग: Ollama के वेब सर्च के लिए API रेट लिमिट्स का सम्मान करें
  4. संदर्भ लंबाई: सर्च एजेंट्स के लिए ~32000 टोकन का उपयोग करें
  5. स्केल के लिए Async: समकालिक ऑपरेशन्स के लिए AsyncClient का उपयोग करें
  6. टेस्टिंग: अपने सर्च एजेंट्स की विश्वसनीयता सुनिश्चित करने के लिए यूनिट टेस्ट्स लिखें
  7. पाइथन बेसिक्स: सिंटैक्स और सामान्य पैटर्न के लिए एक पाइथन चिट शीट तैयार रखें

उपयोगी लिंक्स