Skip to content

searcher ​

Сервис поиска в интернете и загрузки страниц. Единственный сервис, который не следует контракту EVA, и это важно понимать.

Назначение ​

Выполняет две вещи: ищет в интернете и возвращает короткий список результатов, либо открывает страницу в настоящем браузере, дожидается отрисовки и сохраняет её содержимое в виде Markdown.

В платформе источник называется Searcher.

Инструменты ​

ИнструментНазначение
internet_searchПоиск. Параметры: строка запроса, механизм поиска, число результатов
page_downloadЗагрузка страниц. Параметры: список адресов, список имён, путь сохранения, что именно сохранять
describe_toolСлужебный. Возвращает схемы параметров и ответа для указанного инструмента

Ответ поиска это список записей с заголовком, адресом и коротким описанием.

Что за ним стоит ​

СоставляющаяЗначениеОбязателен
SearXNGМеханизм поиска по умолчаниюДа для поиска
Brave Search APIВторой механизм поискаНет, ключ в поставке пустой
Chrome и chromedriverНужны для загрузки страниц, поставляются вместе с сервисомДа для загрузки
KafkaНе используется инструментами MCP, но создаётся при запуске процессаФактически да для запуска
Модели машинного обученияНе используютсяНет

На схеме есть обращение к локальной модели, в коде его нет

Архитектурная схема продукта показывает стрелку от Searcher к локальной языковой модели. В коде сервиса нет ни одного обращения к языковой модели: ни дополнения текста, ни переупорядочивания результатов, ни составления краткого изложения.

Чем он принципиально отличается от остальных ​

Это главное, что нужно знать про этот сервис.

Как у остальныхКак здесь
Есть привязка сессии init_eva_sessionОтсутствует
Работа с файлами чата через слой S3Отсутствует
Результат записывается в папку artifact чатаЗаписывается на диск самого сервиса
Единый формат ответа с признаком успехаДругой формат
Устойчивые коды ошибокОтсутствуют, ошибка приходит строкой

Загрузка страницы не доходит до пользователя

Загруженные страницы сохраняются на диск контейнера сервиса, а модели возвращаются пути внутри этого контейнера. Через чат пользователь эти файлы получить не может. Поиск работает и полезен, а загрузка страниц в связке с чатом сегодня неприменима.

Ограничения и особенности поведения ​

ОграничениеПодробности
Таймаут отрисовки страницы15 секунд. По истечении возвращается то, что успело отрисоваться, и это считается успехом
Таймаут поиска10 секунд, без повторных попыток
Число результатовНе ограничивается сверху
Имя сохранённого файлаСобирается из адреса и обрезается. Переданные имена в ответе повторяются, но на имя файла не влияют
Создание каталогаНе выполняется. Если каталога нет, работа завершится общей ошибкой
Путь сохраненияПриходит от модели и не проверяется. Выход за пределы рабочего каталога возможен
Одновременная работаПо одному рабочему потоку на поиск и на загрузку
Ожидание результатаАктивный опрос без таймаута. Зависший обработчик держит вызов до срабатывания 30-секундного ограничения платформы
БраузерНовый процесс на каждый вызов. При ошибке между запуском и закрытием процесс остаётся висеть

Замечания по безопасности ​

Ключ Brave Search лежит в файле настроек сервиса. Общий внутренний регламент этих сервисов прямо запрещает хранить секреты в файле настроек.

У сервиса есть отдельный адрес, позволяющий менять настройки работающего процесса и читать их обратно. Авторизации на нём в этом коде нет.

Проверить на стенде

Указания этого сервиса модели содержат прямые повеления вида «ты обязан вызвать инструмент, а не отвечать из собственных знаний». Именно такие формулировки ищет встроенная проверка источников на подмену поведения модели. На стенде источник Searcher показан подключённым, значит проверку он прошёл, но при изменении текстов это стоит перепроверять.

Развёртывание ​

ПараметрЗначение
Транспорт MCPStreamable HTTP, порт 8815
Второй интерфейсHTTP и Kafka на порту 8015
Образpython:3.12 с библиотеками Chrome, браузер скачивается при сборке
Файл для docker composeОтсутствует

Два интерфейса в одном процессе

Сервис одновременно поднимает MCP в отдельном потоке и веб-интерфейс с обработчиком Kafka в основном. Общий регламент этих сервисов требует оставлять только MCP. Практическое следствие: без Kafka процесс, скорее всего, не поднимется, хотя инструментам MCP она не нужна.

Документация платформы EVA