Веб-поиск и загрузка страниц
Агент умеет искать в интернете и читать страницы. Для этого у него есть четыре инструмента:
| Инструмент | Что делает |
|---|---|
web_search | ищет в интернете и возвращает результаты со ссылками |
fetch_content | загружает страницу и преобразует её в Markdown; клонирует GitHub-репозиторий |
get_search_content | постранично выдаёт сохранённый результат поиска или загрузки |
source_check | ищет источники по утверждению и возвращает цитаты из них |
Веб-поиск работает сразу после установки, ключи не нужны.
Попросите агента: «Подключи Brave Search с моим ключом» или «Отключи веб-поиск». Он внесёт изменения в web-search.json.
Где хранятся настройки
Веб-доступ настраивается в одном файле — web-search.json в каталоге агента:
| ОС | Путь по умолчанию |
|---|---|
| Linux, macOS | ~/.local/share/veai-ai-agent/agent/web-search.json |
| Windows | C:\Users\<имя>\.local\share\veai-ai-agent\agent\web-search.json |
Если задана переменная XDG_DATA_HOME с абсолютным путём, каталог агента — $XDG_DATA_HOME/veai-ai-agent/agent.
Это единственный пользовательский файл вне .veai/. Настройки веб-поиска в .veai/settings.json не читаются.
Изменения действуют со следующей сессии. Запущенная сессия продолжает работать со старыми значениями.
Значения по умолчанию
При каждом запуске агент добавляет в файл недостающие ключи:
{
"provider": ["exa", "duckduckgo"],
"workflow": "none",
"toolActivation": "eager",
"autoOpenBrowser": false,
"fetch": { "allowedModes": ["readable", "raw"] },
"githubClone": { "clonePath": "<временный каталог ОС>/veai-github-repos" },
"commands": {
"websearch": { "enabled": false },
"curator": { "enabled": false },
"search": { "enabled": false },
"google-account": { "enabled": false }
}
}
- Существующие значения не перезаписываются.
- Удалённый ключ вернётся при следующем запуске. Чтобы изменить значение, задайте другое, а не удаляйте ключ.
- Не меняйте
toolActivation: с другими значениями инструменты поиска становятся недоступны.
Куда уходят запросы
Поиск. По умолчанию каждый запрос отправляется одновременно двум провайдерам, и их результаты объединяются:
- Exa — анонимный доступ без ключа. Exa ограничивает анонимные запросы по IP-адресу, по умолчанию около 50 в день; все, кто выходит в интернет через один офисный NAT, делят этот лимит. Некоторые сети Exa блокирует полностью.
- DuckDuckGo — агент читает HTML-страницу результатов напрямую, без API и без ключа.
Поисковые запросы покидают ваш компьютер и попадают в эти сервисы.
Загрузка страниц. fetch_content запрашивает URL напрямую с вашего компьютера, сторонние сервисы не используются.
GitHub. Для ссылки на репозиторий fetch_content делает неглубокий клон во временный каталог veai-github-repos — через gh, если он установлен, иначе через git по HTTPS. Если клонировать не удалось, агент получает дерево файлов и README через GitHub API.
Подключить другой поисковый провайдер
Одного ключа недостаточно: нужно также изменить provider. Добавляйте ключи в существующий файл, сохраняя остальное содержимое.
Exa с ключом — без ограничения по IP (ключ на exa.ai):
{ "exaApiKey": "<ключ>", "provider": ["exa", "duckduckgo"] }
Чтобы искать только через Exa, укажите "provider": "exa".
Brave Search (ключ на api.search.brave.com):
{ "braveApiKey": "<ключ>", "provider": ["brave", "duckduckgo"] }
Tavily (ключ на tavily.com):
{ "tavilyApiKey": "<ключ>", "provider": ["tavily", "duckduckgo"] }
Собственный SearXNG — в экземпляре должен быть включён JSON-формат ответа:
{ "searxngBaseUrl": "https://search.example.com", "provider": "searxng" }
Переменная окружения SEARXNG_BASE_URL имеет приоритет над searxngBaseUrl.
Ключи можно передать и через переменные окружения — EXA_API_KEY, BRAVE_API_KEY, TAVILY_API_KEY, — но provider всё равно нужно задать в файле.
Отключить веб-поиск
{ "webSearch": { "enabled": false } }
Так отключаются web_search и source_check. Загрузка страниц (fetch_content, get_search_content) продолжает работать.
Если поиск не работает
Если все запросы поиска завершились ошибкой, агент сообщит об этом и назовёт ошибку каждого провайдера.
| Что в ошибке | Причина | Что сделать |
|---|---|---|
сетевые ошибки (fetch failed, ENOTFOUND, ECONNREFUSED, тайм-ауты) у всех провайдеров | нет подключения или нужен прокси | проверьте подключение; для корпоративного прокси добавьте в файл "proxy": "http://host:port" |
Exa MCP error 403 | Exa блокирует вашу сеть | используйте только DuckDuckGo ("provider": "duckduckgo"), подключите Brave, Tavily или SearXNG |
Exa MCP rate limit reached (429) | исчерпан дневной анонимный лимит для вашего IP | подождите до завтра, добавьте exaApiKey или другой провайдер |
| ошибка DuckDuckGo или нет результатов | DuckDuckGo изменил страницу или показал проверку | повторите позже или подключите другой провайдер |
ошибка разбора web-search.json | файл не является корректным JSON | исправьте файл вручную — агент его не чинит |
Репозитории GitHub не клонируются
Если gh настроен на протокол SSH, а рабочего SSH-ключа нет, клонирование не удаётся, и агент видит репозиторий только через API. Проверьте протокол:
gh config get git_protocol -h github.com
Чтобы переключить gh на HTTPS для github.com:
gh config set git_protocol https -h github.com
Команда меняет настройку gh для всех инструментов.