Как дать LLM доступ к вебу: SearXNG, Tavily или grounder
Чтобы модель искала и читала веб, есть три частых пути. Разберём, чем они отличаются и что реально работает из России без VPN.
Сначала - что вообще значит «дать модели веб»
Языковая модель это файл весов. Она не открывает сайты и не делает сетевых запросов: всё, что она «знает», зафиксировано на дату обучения. «Доступ к вебу» это не свойство самой модели, а отдельный конвейер вокруг неё: поиск (превратить вопрос в запрос и получить ссылки), загрузка (скачать страницы), очистка (убрать навигацию и рекламу, оставить текст), ранжирование (оставить только релевантные фрагменты) и подстановка в промпт. Модель делает только последний шаг.
Инструменты, которые советуют для этой задачи, различаются тем, сколько шагов конвейера они берут на себя и откуда физически читают веб. Отсюда четыре разных семейства: локальный self-hosted поиск, поисковый API для агентов, скрапер для чтения страниц и сервис веб-граундинга, который отдаёт готовый пакет под контекст модели. Разберём каждое честно и сведём в таблицу.
Локальный поиск: SearXNG
SearXNG это бесплатный self-hosted метапоиск: вы поднимаете его у себя, он рассылает ваш запрос по многим поисковым движкам, агрегирует выдачу и отдаёт её без трекинга и без оплаты за вызовы. На нём же построены self-hosted сборки вроде Perplexica (в его README прямо сказано «Web search powered by SearxNG») - именно потому, что он бесплатный и открытый.
Важная оговорка: SearXNG отдаёт вам только первый шаг - ссылки и сниппеты. Загрузку страниц, очистку и ранжирование под окно контекста вы пишете сами:
# Шаг 1 и только он: спросить у SearXNG ссылки на выдачу import requests def searxng_search(query, instance="http://localhost:8080"): r = requests.get(f"{instance}/search", params={"q": query, "format": "json"}, timeout=15) r.raise_for_status() return [hit["url"] for hit in r.json().get("results", [])[:5]] # Дальше вы сами качаете каждую страницу, чистите вёрстку, ранжируете # фрагменты и режете их под окно контекста - это уже не SearXNG.
Для читателя из России есть ещё два подводных камня. Первый: и поиск, и загрузка страниц идут из вашей сети, поэтому закрытые в РФ сайты так и не откроются - метапоиск не телепортирует ваш трафик за границу. Второй - эксплуатация: публичные инстансы ограничивают и блокируют автоматические запросы, а режим format=json на многих из них выключен, так что надёжности ради вы поднимаете свой инстанс и обслуживаете его. Почему серверная схема удобнее локальной, разбираем отдельно: веб-поиск для локальной LLM без VPN.
Поисковый API для агентов: Tavily и Exa
Tavily
Tavily это поисковый API, заточенный под LLM и агентов: возвращает результаты поиска плюс извлечённое содержимое страниц, есть официальный MCP-сервер и бесплатные кредиты на старте. Удобен, когда вы пишете агента и вам нужен готовый поиск, не поднимая ничего у себя. Минус для РФ: это зарубежный сервис с оплатой по вызовам, и к нему ещё надо дотянуться и как-то оплатить его из России. Выдача приходит в произвольном объёме, не обрезанная под окно вашей модели.
Exa
Exa это нейропоисковый (семантический) API с официальным MCP: он ищет по смыслу, а не по точному совпадению слов, и хорош там, где ответ на странице сформулирован иначе, чем ваш запрос. Тоже оплата по вызовам и тоже зарубежный биллинг. Если вам нужен именно смысловой поиск, Exa сделан ровно под это - честно говорим, что это его сильная сторона, а не наша.
Скрапер для чтения страниц: Firecrawl
Firecrawl решает другую половину задачи: он превращает страницу в чистый markdown, готовый для LLM, и умеет обходить верхние результаты выдачи. Это скорее «прочитать», чем «найти». Хорош, когда нужно собрать корпус для RAG или аккуратно вытащить содержимое известных страниц. Есть облачная (платная) версия и open-source редакция, которую можно поднять у себя. Учтите: он отдаёт целую страницу markdown, а не обрезанный под контекст пакет, так что шаг «уложить в окно модели» всё равно остаётся на вас.
Веб-граундинг под контекст модели: grounder
grounder переносит и поиск, и чтение страниц на свои серверы за пределами России, а модели возвращает не сырой HTML, а несколько релевантных фрагментов со ссылками на источники, обрезанных под ваше окно контекста параметром max_tokens. Для маленькой модели это ключевое: чистые фрагменты влезают в окно 8k, тогда как пара целых страниц его переполнит и модель вернёт ошибку или пустоту.
Подключается по MCP - одним блоком конфига, без локального браузера и скрапера. Тариф плоский помесячный, оплата в USDT или TON, что снимает проблему зарубежной карты. Тонкий клиент ставится через uvx и просто передаёт вызовы на серверы grounder:
// MCP-конфиг клиента: LM Studio, Claude Desktop, Cursor { "mcpServers": { "grounder": { "command": "uvx", "args": ["grounder-mcp"], "env": { "GROUNDER_API_KEY": "gnd_live_ваш_ключ" } } } }
Так как страницы открывают серверы снаружи РФ, закрытые у вас сайты читаются без VPN - вашей машине достаточно доступа к grounder.dev. Пошаговая настройка: как подключить нейросеть к интернету.
Сравнение
| Способ | Что покрывает | Влезает в маленькое окно | Закрытые в РФ сайты | Оплата | Настройка и обслуживание |
|---|---|---|---|---|---|
| SearXNG | поиск (ссылки) | собираете сами | не откроет, читает из вашей сети | бесплатно, self-host | поднять и обслуживать |
| Tavily | поиск + извлечение | нет, выдача без обрезки | читает снаружи, но API зарубежный | по вызовам, зарубежный биллинг | ключ API |
| Exa | нейропоиск по смыслу | нет, выдача без обрезки | читает снаружи, но API зарубежный | по вызовам, зарубежный биллинг | ключ API |
| Firecrawl | чтение страниц в markdown | нет, целая страница | читает снаружи, но API зарубежный | по вызовам / self-host | ключ API или self-host |
| grounder | поиск + чтение + очистка + ранжирование | да, max_tokens | открывает, читает снаружи РФ | плоский тариф, USDT / TON | один блок MCP |
Что выбрать
У каждого подхода своё место, и «лучшего вообще» тут нет - есть подходящий под вашу ситуацию:
- SearXNG - если у вас нет блокировок и вы хотите полностью локальный, приватный self-host и готовы сами собрать загрузку, очистку и ранжирование. Бесплатно и без vendor lock-in.
- Tavily или Exa - если вам нужен готовый хостовый поисковый API для агента, вы можете дотянуться до зарубежного сервиса и оплатить его по вызовам. Exa берите под смысловой поиск, Tavily - под поиск с извлечением содержимого.
- Firecrawl - если задача не «найти», а «прочитать»: превратить известные страницы в чистый markdown, собрать корпус для RAG.
- grounder - если вы в России и вам нужно, чтобы модель читала в том числе закрытые сайты без VPN, получала готовый под её окно пакет и всё это по плоскому тарифу с оплатой в USDT или TON.
Скажем прямо про предел grounder: это внешний сервис, а не self-host, поэтому «ничего не уходит с моей машины» - это не про него, тут честнее SearXNG. И он бессилен при полном отключении интернета, когда оператор оставляет только белый список российских доменов: наружу тогда не пробивается никто. grounder решает ежедневные блокировки, а не тотальный shutdown. Подробнее про эту связку: нейросети без VPN в России.
grounder это наш продукт, так что у нас есть коммерческий интерес. При этом сам конвейер (поиск, загрузка, очистка, ранжирование) и ограничения каждого инструмента верны независимо от того, что вы выберете: SearXNG, Tavily, Exa и Firecrawl - реальные и рабочие варианты, у каждого своя сильная сторона. Актуальные лимиты и цены зарубежных сервисов проверяйте на их официальных страницах.
Частые вопросы
Что лучше для локальной LLM: SearXNG, Tavily или grounder?
SearXNG хорош, если нет блокировок и нужен полный self-host. Tavily удобен как поисковый API для агентов. grounder ближе тем, кто в России хочет читать в том числе закрытые сайты без VPN и по плоскому тарифу.
Можно ли дать LLM доступ к вебу без VPN?
Да, если поиск и чтение выполняет сервис за пределами России. Тогда вашему компьютеру VPN не нужен.