Buff Development
Коннектор

Интернет для модели

Поиск и чтение публичных страниц из вашего периметра: движки, белый и чёрный списки, типы содержимого, стоп-слова — и то, что настроить нельзя.

Задача, код и база знаний — то, что у команды есть. Интернет — то, чего у неё нет: документация библиотеки, разбор ошибки, стандарт, чужой README. Интеграция «Интернет» даёт модели два инструмента — найти и прочитать — и ставит их не на нашем бэкенде, а в вашем коннекторе, под управление вашего администратора.

Прочтите до установки. Адреса называет модель, и они уходят к выбранному движку поиска и на сайты — в их журналы. Прочитанная страница попадает в контекст модели, а сайт может содержать текст, рассчитанный на модель, а не на человека; белый и чёрный списки сужают этот риск, но не снимают его. DuckDuckGo работает через неофициальный эндпоинт и под нагрузкой может ответить проверкой «вы не робот» — тогда переключите движок. Внутренняя сеть закрыта всегда, но всё, что разрешено списками в публичном интернете, модель прочитает.

Почему через коннектор

У среды, в которой работает модель, есть собственная загрузка страниц. Мы её выключили везде — и в «Спросить», и на этапах разработки. Причина проста: с нашего бэкенда ни один ваш список не действует, а с коннектора действует каждый. Без установленной интеграции у модели нет интернета вовсе; с ней — ровно столько, сколько разрешил администратор.

Инструменты

ИнструментЧто делает
web_searchищет в выбранном движке; возвращает заголовки, адреса и выдержки. Результаты с сайтов из чёрного списка (или вне белого) не показываются, и в ответе сказано, сколько скрыто
web_fetchчитает страницу по адресу. HTML приходит текстом с заголовками, списками, таблицами и адресами ссылок; JSON — отформатированным; страница отдаётся целиком, без обрезаний

Оба инструмента только читают, поэтому доступны везде, где модели даются инструменты коннектора: в «Спросить», в исследованиях и на читающих этапах прогонов. Сначала модель ищет, потом читает подходящий результат — как человек.

Вопрос, ответ на который есть только в интернете: модель нашла страницу инструментом поиска, прочитала её и ответила по ней.

Движки

ДвижокКлючЧто важно знать
DuckDuckGo (по умолчанию)не нуженработает сразу после установки, но через неофициальный HTML-эндпоинт: под нагрузкой отвечает проверкой «вы не робот», и интеграция скажет об этом прямо, а не «ничего не найдено»
SearXNGне нуженваш собственный метапоиск в периметре — стабильно и приватно; в его settings.yml должен быть включён формат json (search.formats), иначе он ответит 403, и интеграция назовёт эту настройку
Brave Search APIнуженкоммерческий API с бесплатным тарифом; ключ хранится в коннекторе и уходит только к Brave, никогда — на сайты

Движок — обычный настроенный хост коннектора: у него свой адрес, свои пути и свой ключ. Сайты — другое дело.

Куда модель может ходить

Правило для сайтов называется web и отличается от всех остальных правил коннектора: адрес называет модель, а не вы. Поэтому вместо адреса у вас списки.

Белый список. Если он заполнен, модель ходит только на эти сайты, и чёрный список не действует. Чёрный список действует, когда белый пуст: всё, кроме перечисленного. Пустые оба списка — открытый публичный интернет.

Форма записи одна для обоих, та же, что у поисковых инструментов крупных провайдеров:

ЗаписьЧто покрывает
example.comсайт и все его поддомены (docs.example.com тоже)
docs.example.comтолько этот поддомен — не родитель и не соседи
example.com/blogвсё под этим путём: /blog, /blog/post-1, …
example.com/*/articles* — ровно один сегмент пути

Без схемы (https:// в записи — ошибка, о которой скажет форма), без порта, без * в самом домене (поддомены и так включены) и только ASCII: буква из другого алфавита, похожая на латинскую, — это другой домен, и запись с ней отклоняется, чтобы список не обещал того, чего не делает.

Типы содержимого. Что модели можно отдавать, по заголовку Content-Type ответа: text/html, application/json, text/*. Пусто — любые. Проверяется до того, как тело ответа прочитано.

Стоп-слова. Запрос поиска или адрес с любым из этих слов отклоняется на месте, без единого обращения наружу; регистр не важен.

Форма настройки: движок — выбором, списки — через запятую, типы содержимого и стоп-слова.

Что настроить нельзя

Внутренняя сеть закрыта всегда. Перед каждым запросом коннектор разрешает имя сайта и отказывается, если хотя бы один из адресов — не публичный: loopback, приватные диапазоны, link-local (где живут метаданные облаков), CGNAT. Соединение устанавливается ровно с тем адресом, который прошёл проверку, так что имя не может «передумать» между проверкой и подключением. Это правило не выключается ни списком, ни настройкой: у обычных подключений коннектора приватные сети разрешены — в этом их смысл, — а у интернета нет.

Перенаправления проходят проверку каждое. Коннектор не следует за 302 сам: интеграция делает каждый переход отдельным запросом, и публичный сайт, отправляющий читателя на адрес внутри вашей сети, упирается в тот же отказ.

Учётные данные на сайты не уходят. Запрос по правилу web не может нести ни один из ваших ключей — даже если модель попросит. Ключ Brave уходит только к Brave.

Только http и https. Всё остальное — не веб-адрес.

Отказы приходят модели с причиной, и модель говорит её человеку; каждый вызов, включая отклонённый, — в журнале подключения и в учёте платформы, как у любого инструмента коннектора.

Настройка

  1. Установите интеграцию «Интернет» из маркетплейса на локальной странице коннектора. До установки видно, что она получит: публичный интернет в пределах ваших списков, адреса движков, ключ только для Brave.
  2. Создайте подключение к проекту разработки. Движок по умолчанию — DuckDuckGo, адреса движков уже подставлены; для SearXNG впишите адрес своего экземпляра, для Brave — ключ.
  3. Заполните списки. Разумная отправная точка для команды — белый список из документации ваших технологий и стандартов; открытый интернет — для команд, которым нужен именно он.

Из командной строки то же самое: connector install web, затем connector instance add web --config engine=duckduckgo --config deny=pastebin.com.

Интеграции нужен коннектор версии 0.7 или новее: правило web и проверка публичности адреса появились в нём. Старый коннектор откажется ставить интеграцию и назовёт обе версии.

Чего интеграция не делает

  • Не ходит в интранет и на localhost — ни по списку, ни по просьбе модели.
  • Не читает PDF и картинки: в этой версии — HTML, текст и JSON.
  • Не кеширует страницы и не индексирует сайты заранее: читается то, что понадобилось для ответа, и счёт приходит за это.
  • Не подменяет ваш фаервол. Списки — граница на уровне интеграции; сетевая граница остаётся вашей, см. «Изоляцию».

On this page