Интернет для модели
Поиск и чтение публичных страниц из вашего периметра: движки, белый и чёрный списки, типы содержимого, стоп-слова — и то, что настроить нельзя.
Задача, код и база знаний — то, что у команды есть. Интернет — то, чего у неё нет: документация библиотеки, разбор ошибки, стандарт, чужой 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. Всё остальное — не веб-адрес.
Отказы приходят модели с причиной, и модель говорит её человеку; каждый вызов, включая отклонённый, — в журнале подключения и в учёте платформы, как у любого инструмента коннектора.
Настройка
- Установите интеграцию «Интернет» из маркетплейса на локальной странице коннектора. До установки видно, что она получит: публичный интернет в пределах ваших списков, адреса движков, ключ только для Brave.
- Создайте подключение к проекту разработки. Движок по умолчанию — DuckDuckGo, адреса движков уже подставлены; для SearXNG впишите адрес своего экземпляра, для Brave — ключ.
- Заполните списки. Разумная отправная точка для команды — белый список из документации ваших технологий и стандартов; открытый интернет — для команд, которым нужен именно он.
Из командной строки то же самое: connector install web, затем
connector instance add web --config engine=duckduckgo --config deny=pastebin.com.
Интеграции нужен коннектор версии 0.7 или новее: правило web и проверка публичности адреса появились в нём. Старый коннектор откажется ставить интеграцию и назовёт обе версии.
Чего интеграция не делает
- Не ходит в интранет и на localhost — ни по списку, ни по просьбе модели.
- Не читает PDF и картинки: в этой версии — HTML, текст и JSON.
- Не кеширует страницы и не индексирует сайты заранее: читается то, что понадобилось для ответа, и счёт приходит за это.
- Не подменяет ваш фаервол. Списки — граница на уровне интеграции; сетевая граница остаётся вашей, см. «Изоляцию».