Веб-поиск
Инструмент web_search_tool позволяет агентам PRX искать в интернете актуальную информацию. Он поддерживает два провайдера поиска -- DuckDuckGo (бесплатно, без API-ключа) и Brave Search (требуется API-ключ) -- и возвращает структурированные результаты поиска, которые агент может использовать для ответов на вопросы о недавних событиях, поиска документации или исследования тем.
Веб-поиск защищён feature-гейтом и требует web_search.enabled = true в конфигурации. При включении PRX также опционально регистрирует инструмент web_fetch для извлечения полного содержимого страниц по URL, найденным в результатах поиска.
Комбинация web_search_tool и web_fetch даёт агентам полноценный конвейер веб-исследований: поиск релевантных страниц, затем извлечение содержимого из наиболее перспективных результатов.
Конфигурация
[web_search]
enabled = true
provider = "duckduckgo" # "duckduckgo" (бесплатно) или "brave" (требуется API-ключ)
max_results = 5 # Максимум результатов на поиск (1-10)
timeout_secs = 10 # Таймаут запроса в секундах
# Brave Search (требуется API-ключ)
# provider = "brave"
# brave_api_key = "BSA-xxxxxxxxxxxx"
# Web fetch (извлечение содержимого страниц)
fetch_enabled = true # Включить инструмент web_fetch
fetch_max_chars = 50000 # Максимум символов, возвращаемых web_fetchСравнение провайдеров
| Возможность | DuckDuckGo | Brave Search |
|---|---|---|
| Стоимость | Бесплатно | Бесплатный уровень (2000 запросов/месяц), платные планы |
| API-ключ | Не требуется | Обязателен (brave_api_key) |
| Качество результатов | Хорошее для общих запросов | Более высокое качество, лучшая структурированность |
| Лимиты частоты | Неявные (может ограничивать) | Явные (зависят от плана) |
| Конфиденциальность | Ориентирован на конфиденциальность | Ориентирован на конфиденциальность |
| Структурированные данные | Базовые (заголовок, URL, сниппет) | Богатые (заголовок, URL, сниппет, дополнительные описания) |
Выбор провайдера
- DuckDuckGo -- провайдер по умолчанию, работает из коробки без настройки помимо
enabled = true. Подходит для большинства сценариев и не требует аккаунта или API-ключа. - Brave Search предоставляет более качественные результаты и богатые метаданные. Используйте его, когда качество поиска критично или когда необходим инструмент
web_fetchдля надёжного извлечения содержимого.
Использование
web_search_tool
Инструмент поиска возвращает список результатов с заголовками, URL и сниппетами:
{
"name": "web_search_tool",
"arguments": {
"query": "Rust async runtime comparison tokio vs async-std 2026",
"max_results": 5
}
}Пример ответа:
{
"success": true,
"output": "1. Comparing Tokio and async-std in 2026 - https://blog.example.com/rust-async\n Snippet: A detailed comparison of the two main Rust async runtimes...\n\n2. Tokio documentation - https://docs.rs/tokio\n Snippet: Tokio is an asynchronous runtime for Rust...\n\n..."
}web_fetch
После нахождения релевантных URL через поиск агент может извлечь содержимое:
{
"name": "web_fetch",
"arguments": {
"url": "https://blog.example.com/rust-async"
}
}Инструмент web_fetch:
- Проверяет домен URL по
browser.allowed_domains - Загружает содержимое страницы
- Извлекает читаемый текст (убирая HTML, скрипты, стили)
- Обрезает до
fetch_max_chars - Возвращает извлечённое содержимое
WARNING
web_fetch требует одновременно web_search.fetch_enabled = true и установки browser.allowed_domains. Загружаемый URL должен совпадать с одним из разрешённых доменов.
Параметры
Параметры web_search_tool
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
query | string | Да | -- | Строка поискового запроса |
max_results | integer | Нет | Значение из конфигурации (5) | Максимальное количество возвращаемых результатов (1-10) |
Возвращает:
| Поле | Тип | Описание |
|---|---|---|
success | bool | true если поиск завершён |
output | string | Форматированные результаты поиска с заголовками, URL и сниппетами |
error | string? | Сообщение об ошибке при неудачном поиске (таймаут, ошибка провайдера и т.д.) |
Параметры web_fetch
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
url | string | Да | -- | URL для загрузки и извлечения содержимого |
Возвращает:
| Поле | Тип | Описание |
|---|---|---|
success | bool | true если страница загружена и разобрана |
output | string | Извлечённый текстовый контент, обрезанный до fetch_max_chars |
error | string? | Сообщение об ошибке при неудачной загрузке (домен не разрешён, таймаут и т.д.) |
Типичный сценарий исследования
Полный сценарий веб-исследования обычно следует такому паттерну:
- Поиск: Агент использует
web_search_toolдля нахождения релевантных страниц - Оценка: Агент просматривает сниппеты поиска для определения наиболее релевантных результатов
- Загрузка: Агент использует
web_fetchдля извлечения полного содержимого выбранных страниц - Синтез: Агент объединяет информацию из нескольких источников в ответ
Агент размышляет: Пользователь спросил о возможностях последнего релиза Rust.
1. [web_search_tool] query="Rust 1.82 release features changelog"
2. [просмотр результатов, выбор 2 лучших URL]
3. [web_fetch] url="https://blog.rust-lang.org/2026/..."
4. [web_fetch] url="https://releases.rs/docs/1.82.0/"
5. [синтез ответа из загруженного содержимого]Безопасность
Учётные данные провайдера
- DuckDuckGo: Учётные данные не требуются. Запросы отправляются на эндпоинты API DuckDuckGo.
- Brave Search:
brave_api_keyхранится в конфигурационном файле. Используйте зашифрованное хранилище секретов PRX для его защиты:
[web_search]
brave_api_key = "enc:xxxxxxxxxxxxx" # Зашифровано ChaCha20-Poly1305Ограничения доменов для web_fetch
Инструмент web_fetch соблюдает список browser.allowed_domains. Это предотвращает загрузку агентом содержимого с произвольных URL, что может:
- Подвергнуть агента воздействию вредоносного контента (инъекция промптов через веб-страницы)
- Вызвать подделку запросов на стороне сервера (SSRF) при загрузке внутренних URL
- Привести к утечке информации через DNS или HTTP-запросы к доменам, контролируемым злоумышленником
[browser]
allowed_domains = ["docs.rs", "crates.io", "github.com", "*.rust-lang.org"]Защита таймаутом
И поиск, и загрузка имеют настраиваемые таймауты для предотвращения зависания на медленных или неответающих серверах:
web_search.timeout_secs(по умолчанию: 10 секунд) -- таймаут поискового запроса- Сетевые таймауты применяются также к
web_fetch
Ограничения размера содержимого
Настройка fetch_max_chars (по умолчанию: 50 000 символов) предотвращает исчерпание памяти от чрезмерно больших веб-страниц. Содержимое сверх лимита обрезается.
Политика безопасности
Инструменты веб-поиска проходят через движок политик безопасности:
[security.tool_policy.tools]
web_search_tool = "allow"
web_fetch = "supervised" # Требовать одобрение перед загрузкойСвязанные разделы
- HTTP-запросы -- программные HTTP-запросы к API
- Инструмент браузера -- полная автоматизация браузера для JavaScript-сайтов
- Справочник конфигурации -- поля
[web_search]и[browser] - Управление секретами -- зашифрованное хранилище API-ключей
- Обзор инструментов -- все инструменты и система реестра