Ollama предоставила бесплатный API для веб-поиска

Ollama официально запустила встроенную поддержку веб-поиска через REST API. Это не просто внешний плагин — это часть экосистемы: API интегрирован в Python и JavaScript SDK, а также доступен через MCP (Model Control Protocol) сервер. Цель — снизить галлюцинации и дать моделям доступ к свежим данным без ручного RAG-пайплайна.

Факты по делу:

Поиск возвращает контент объёмом до нескольких тысяч токенов, поэтому рекомендуемое контекстное окно — минимум 32K токенов.

Поддержка есть для любых моделей, включая open-weight, например Qwen 3 (4B) — в официальном примере как раз на нём строится простой search agent.

Интеграция возможна через:

Прямой вызов REST API

Python/JS библиотеки Ollama

OpenAI-совместимый endpoint (полезно для gpt-oss и подобных)

MCP-сервер — для совместимости с Cline, Goose, Codex и другими инструментами.

Важный нюанс: в документации нет информации о rate limits. Неясно, сколько запросов в минуту/день разрешено, особенно для self-hosted или cloud-версий. Пока предполагаем, что лимиты мягкие — но это нужно тестировать. Как сказано в официальном блог-посте:

Ollama provides a generous free tier of web searches for individuals to use, and higher rate limits are available via Ollama’s cloud.

Если что, стоимость Ollama Cloud – 20$ в месяц, и пока что сервис находится в preview.

Вот как выглядит простой поиск:

curl https://ollama.com/api/web_search —header «Authorization: Bearer $OLLAMA_API_KEY» -d ‘{ «query»: «what is ollama?» }’

А вот так выглядит полноценный агент, который ходит в интернет:

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) if response.message.content: print(‘Content: ‘, 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]+’…’) # Result is truncated 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

Блог-пост | Документация

Русскоязычное сообщество про AI в разработке

Друзья! Эту новость подготовила команда ТГК «AI for Devs» — канала, где мы рассказываем про AI-ассистентов, плагины для IDE, делимся практическими кейсами и свежими новостями из мира ИИ. Подписывайтесь, чтобы быть в курсе и ничего не упустить!

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии