Подключите локальный Ollama на вашем ноутбуке к Entity Enricher одной командой. Используйте уже установленные модели, оставляйте определённые данные на своём компьютере и мгновенно отзывайте доступ — всё через одно исходящее HTTPS-соединение.
Production (Hetzner) Your Laptop / your server
┌─────────────────────────┐ ┌────────────────────┐
│ Org enrichment │ │ ee-tunnel CLI │
│ │ │ │ │ │
│ ▼ │ │ ▼ │
│ Ollama provider URL: │ │ Ollama :11434 │
│ http://ollama.<org> │ │ ┌──────────────┐ │
│ .tunnel/v1/chat │ │ │ qwen3:36b │ │
│ │ │ │ │ llama3:70b │ │
│ ▼ │ │ │ ... │ │
│ WebSocket bridge │◀───────▶│ └──────────────┘ │
└─────────────────────────┘ └────────────────────┘
one outbound :443/wss connectionСинтетическое имя хоста ollama.<org-slug>.tunnel никогда не разрешается через DNS. Специальный транспорт в процессе Entity Enricher перехватывает запросы к *.tunnel и направляет их через соответствующий активный WebSocket.
Запускайте обогащения на моделях с открытыми весами, уже загруженных на вашем ноутбуке (Llama 3, Qwen, DeepSeek, Mistral, …), без их повторной загрузки на сервере.
Для конфиденциальных промптов направляйте конкретные обогащения через собственный GPU. Платформа по-прежнему фиксирует стоимость, токены и метаданные — локальным остаётся только сам вывод модели.
Загрузите модель командой `ollama pull` на своём ноутбуке, нажмите «Найти модели», и она появится в селекторе Entity Enricher с реальной длиной контекста и возможностями.
Когда размещённый провайдер ограничивает частоту ваших запросов, переключитесь на локальную модель через туннель до конца пакета.
Две команды на вашем ноутбуке, один клик в браузере. Весь процесс занимает около минуты.
Откройте API Keys → Ollama Tunnels и нажмите New Ollama Tunnel. Введите метку, чтобы позже узнать это устройство (например, «MacBook Энтони»).
Вставьте это в терминал. Скрипт проверяет подпись cosign перед установкой.
curl -fsSL https://entityenricher.ai/install.sh | sh
Установщик выводит, что он собирается сделать (URL загрузки, подпись, путь установки), и делает паузу в 5 секунд, чтобы у вас было окно для нажатия Ctrl+C. Исходный код находится по адресу TOT-Concept/ee-tunnel (MIT). Пользователи Windows используют install.ps1 вместо этого.
Запустите ee-tunnel pair. В браузере откроется вкладка /tunnel/connect с кодом из 6 символов. Подтвердите название устройства и нажмите Connect.
ee-tunnel pair --server https://entityenricher.ai Open this URL in your browser to confirm pairing: https://entityenricher.ai/tunnel/connect?code=9KV-DU6 Code: 9KV-DU6 Waiting for confirmation...
Вы никогда не копируете токен вручную. Браузер видит только метаданные tunnel; CLI получает свои учётные данные по собственному каналу опроса.
Запустите ee-tunnel. Индикатор статуса на вкладке Tunnels за секунды переключится на Connected. Затем нажмите Discover Models у провайдера Ollama в разделе Models & Pricing, чтобы автоматически импортировать все локально установленные чат-модели.
Связывание использует поток device-code в стиле OAuth (по образцу RFC 8628). Пользователь вводит короткий код в браузере вместо копирования токена. Браузер видит только метаданные туннеля; CLI получает свой refresh-токен напрямую по собственному каналу опроса — одноразовое использование.
laptop entity-enricher browser
│ │ │
│── ee-tunnel pair ──────▶ │ │
│ --server URL │ │
│ │ │
│ POST /api/tunnel/ │ │
│ device-code │ │
│ ───────────────────────▶ │ │
│ ◀── { device_code, │ │
│ user_code='9KV-DU6', │ │
│ verification_uri } │ │
│ │ │
│ prints URL, opens │ │
│ browser at /tunnel/ │ │
│ connect?code=… ──────────────────────────────────────▶│
│ │ │
│ │ POST /api/tunnel/confirm/ │
│ │ {user_code} │
│ │ body: { label } │
│ │ Authorization: Bearer │
│ │ <user JWT, role=owner> │
│ │ ◀──────────────────────────── │
│ │ • create tunnel_credentials │
│ │ • mark device_code complete │
│ │ with refresh_token │
│ │ ────────────────────────────▶│
│ │ 200 { tunnel metadata } │
│ │ │
│ POST /api/tunnel/poll │ │
│ ───────────────────────▶ │ │
│ ◀── { status:'ok', │ │
│ refresh_token, │ │
│ server_url, │ │
│ tunnel_id } │ │
│ │ │
│ persist token mode 0600 │ │
│ ✓ Paired │ │После подключения ваш туннелированный Ollama становится для остальной части платформы обычным LLM-провайдером. Мультиэкспертиза, слияние, пакеты — всё работает без изменений.
enrichment job
│
▼
agent_factory → Ollama provider, base_url=http://ollama.acme.tunnel
│
▼
custom httpx transport ← intercepts *.tunnel hosts
│
▼
TunnelSession (one per laptop)
│ frames request: { id, method, path, headers, body_b64 }
▼
WebSocket ──────────────────────▶ ee-tunnel CLI
│
▼
localhost:11434
(your local Ollama)
│
response_start, response_chunk, ...
◀──────────────────────────────────┘
│
▼
pydantic_ai consumes streaming body → enrichment recordНесколько выполняющихся обогащений используют один WebSocket туннеля. Каждый запрос получает UUID; кадры демультиплексируются по id на обеих сторонах, поэтому параллельные вызовы (например, из нескольких областей экспертизы) работают естественно.
Потоковые ответы (stream=true в Ollama) передаются как последовательность кадров response_chunk, поэтому обновления интерфейса по токенам остаются инкрементальными даже через туннель.
Владелец организации нажимает «Новый туннель Ollama», вводит название и подтверждает. Платформа выделяет учётные данные.
На вашем ноутбуке запустите установщик в одну строку и `ee-tunnel pair`. Откроется вкладка браузера — подтвердите тем же аккаунтом Entity Enricher.
Запустите `ee-tunnel`. CLI открывает один исходящий HTTPS WebSocket. Новый провайдер появляется в вашем списке моделей за считанные секунды.
Нажмите «Найти модели» — каждая модель в вашем локальном Ollama автоматически импортируется с реальной длиной контекста и возможностями. Обогащайте как обычно.
Один клик в интерфейсе разрывает WebSocket и немедленно аннулирует учётные данные.
Туннель был разработан так, чтобы добавлять как можно меньшую поверхность атаки. В более ранней версии этой функции использовался публичный SSH-сервер на новом порту; мы заменили его внутрипроцессным мультиплексором WebSocket, чтобы полностью устранить поверхность атаки SSH.
Всё проходит через существующий ingress :443 — тот же TLS-эндпоинт, что и у веб-приложения. Никакого SSH-сервера, никакого открытого порта Ollama.
CLI инициирует WebSocket. Ваш ноутбук никогда не принимает входящие подключения — настройки брандмауэра вашей домашней сети менять не нужно.
Туннель привязан к одной организации. Другие арендаторы платформы не могут видеть, выбирать или вызывать его. Системные администраторы по замыслу имеют видимость между организациями.
Отзыв удаляет учётные данные из базы данных. Следующий запрос завершается ошибкой 401. Активный WebSocket отключается в течение ~1 секунды.
Процесс OAuth в браузере обрабатывает учётные данные от начала до конца. Браузер никогда не видит ваш токен обновления; CLI получает его напрямую через свой канал опроса.
5 активных туннелей на организацию по умолчанию; ограничение входящего WebSocket-фрейма 16 МБ; структурированные ошибки 402 при превышении квоты.
Защита от SSRF. Функция туннеля также закрывает существовавшую ранее уязвимость: поле specific_endpoint у провайдеров Ollama теперь проверяется по регулярному выражению из списка разрешённых, поэтому приватные IP-адреса, loopback и имена сервисов Docker compose больше не могут использоваться как URL провайдера.
| Команда | Что это делает |
|---|---|
| ee-tunnel pair --server URL | Связка через браузер и OAuth. Автоматически открывает URL для проверки. |
| ee-tunnel pair --server URL <token> | Ручное сопряжение с токеном обновления, скопированным из интерфейса (запасной вариант для сред без графического интерфейса). |
| ee-tunnel | Подключайтесь и работайте. Переподключение с экспоненциальной задержкой (1 с → 30 с) при временных обрывах. |
| ee-tunnel status | Показать состояние сопряжения, URL сервера, настроенный URL Ollama, метку. |
| ee-tunnel disconnect | Забыть локальные учётные данные. Не отзывает их на стороне сервера; для этого используйте интерфейс. |
| ee-tunnel version | Версия для печати. |
Если ваш Ollama слушает другой порт, задайте EE_TUNNEL_OLLAMA_URL или передайте --ollama URL при сопряжении.
macOS · ~/Library/Application Support/ee-tunnel/
Linux · ~/.config/ee-tunnel/
Windows · %APPDATA%\ee-tunnel\
| Активные tunnel на организацию | 5 (по умолчанию) |
| TTL токена обновления | 365 дней |
| TTL токена доступа | 15 минут |
| TTL связывания | 10 минут |
| Макс. размер входящего WebSocket-кадра | 16 МБ |
| Размер исходящего фрагмента (CLI) | 16 КБ |
| Интервал heartbeat | 30 секунд |
Нет. CLI инициирует исходящее WebSocket-соединение. Ваш ноутбук никогда не принимает входящие подключения, а порт Ollama остаётся привязанным к localhost.
CLI корректно завершает работу при отключении. Возобновление работы ноутбука и повторный запуск ee-tunnel восстанавливает подключение с существующими учётными данными. Обогащения, выполняемые при отключённом туннеле, завершаются с чистой ошибкой ConnectError.
Нет. Каждый туннель привязан к одной организации. Другие арендаторы платформы не могут его видеть, выбирать или вызывать. Системные администраторы видят все туннели по замыслу (как и глобальные ключи API).
Почти всегда — нужен только исходящий :443. Тот же путь, что использует веб-приложение.
Нажмите «Сменить токен» на вкладке «Туннели». Старый токен аннулируется немедленно; в окне отобразится новая команда сопряжения для вашего ноутбука.
Да — CLI пересылает произвольный HTTP. Укажите в EE_TUNNEL_OLLAMA_URL любую локальную конечную точку, совместимую с OpenAI. Подойдёт всё, что поддерживает /v1/chat/completions или /api/tags от Ollama.
CLI и установщик распространяются по лицензии MIT и находятся в публичном репозитории, чтобы каждый мог проверить, что запускается на его машине.
Источник: github.com/TOT-Concept/ee-tunnel
Релизы: github.com/TOT-Concept/ee-tunnel/releases — каждый бинарный файл подписывается с помощью cosign перед публикацией.
Проверьте установщик: curl -fsSL https://entityenricher.ai/install.sh | less