Ollama Tunnel - Entity Enricher ドキュメント

Ollama Tunnel

ノートPCのローカルの Ollama を、コマンド1つで 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 経由でルーティングします。

なぜtunnelを使うのか?

すでにお持ちのモデルを使用する

ラップトップにすでにプルされているオープンウェイトモデル(Llama 3、Qwen、DeepSeek、Mistral、…)に対して、サーバー上で再ダウンロードすることなくエンリッチメントを実行します。

特定の入力をご自身のマシン上に保持します

機密性の高いpromptについては、特定のenrichmentをご自身のGPU経由でルーティングできます。プラットフォームは引き続きコスト、トークン、メタデータを記録します — 推論そのものだけがローカルにとどまります。

30秒で新しいモデルを試す

ラップトップで `ollama pull` を使ってモデルをプルし、Discover Models をクリックすると、実際のコンテキスト長と機能を備えたモデルが Entity Enricher のセレクターに表示されます。

バースト的な処理をオフロード

ホスト型providerによってレート制限された場合、batchの残りの処理はtunnel接続したローカルmodelにフェイルオーバーします。

クイックスタート

ラップトップで2つのコマンド、ブラウザで1クリック。全体のフローは約1分で完了します。

  1. 1

    UIでtunnelを作成する

    API Keys → Ollama Tunnels を開き、New Ollama Tunnel をクリックします。後でこのデバイスを識別できるようにラベルを入力してください(例: 「Anthony's MacBook」)。

    [スクリーンショットのプレースホルダー — 「New Ollama Tunnel」ボタンがハイライトされた Tunnels タブ]
  2. 2

    ノートパソコンに CLI をインストールします

    これをターミナルに貼り付けてください。スクリプトはインストール前にcosign署名を検証します。

    curl -fsSL https://entityenricher.ai/install.sh | sh

    インストーラーは実行しようとしている内容(ダウンロード URL、署名、インストールパス)を表示し、Ctrl+C を押す猶予として 5 秒間一時停止します。ソースコードは TOT-Concept/ee-tunnel(MIT)にあります。Windows ユーザーは代わりに install.ps1 を使用してください。

  3. 3

    ブラウザでペアリング

    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/connect 確認ページ]

    トークンをコピー&ペーストすることは一切ありません。ブラウザはtunnelのメタデータのみを参照し、CLIは独自のポーリングチャネル経由で認証情報を受け取ります。

  4. 4

    接続してモデルを検出

    ee-tunnel を実行します。Tunnelsタブのステータスピルが数秒以内に Connected に切り替わります。次に Models & Pricing のOllamaプロバイダーで Discover Models をクリックすると、ローカルにインストールされたすべてのチャットモデルが自動インポートされます。

    [動画のプレースホルダー — Discover Models が 4 つのローカル Ollama モデルをプラットフォームに取り込む様子]

ペアリングの仕組み

ペアリングはOAuthスタイルのデバイスコードフロー(RFC 8628形式)を使用します。ユーザーはトークンをコピー&ペーストする代わりに、ブラウザに短いコードを入力します。ブラウザはトンネルのメタデータのみを参照し、CLIは独自のポーリングチャネルを介してリフレッシュトークンを直接受け取ります(一度限りの引き換え)。

 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 プロバイダーの1つになります。マルチ専門領域、フュージョン、バッチ — すべてがそのまま動作します。

  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

多重化

実行中の複数のエンリッチメントが1つのトンネルWebSocketを共有します。各リクエストにはUUIDが付与され、フレームは両端でIDによって逆多重化されるため、並行呼び出し(例:複数専門領域)が自然に機能します。

ストリーミング応答(Ollama の stream=true)は response_chunk フレームの連なりとして送られるため、トンネル経由でもトークン単位の UI 更新が逐次的に行われます。

ライフサイクル

01

作成

組織のオーナーが「New Ollama Tunnel」をクリックし、ラベルを入力して確定します。プラットフォームが認証情報を割り当てます。

02

ペアリング

お使いのノートPCで、1行のインストーラーと `ee-tunnel pair` を実行します。ブラウザのタブが開くので、同じ Entity Enricher アカウントで確認します。

03

接続

`ee-tunnel` を実行します。CLIは単一のアウトバウンドHTTPS WebSocketを開きます。新しいプロバイダーは数秒以内にモデルリストに表示されます。

04

使用

「Discover Models」をクリックすると、ローカルの Ollama にあるすべてのモデルが、実際のコンテキスト長と機能とともに自動的にインポートされます。あとは通常どおりエンリッチメントを実行してください。

05

取り消す

UI で1回クリックするだけで WebSocket が切断され、認証情報が即座に無効化されます。

セキュリティ

トンネルは、攻撃対象領域をできる限り増やさないように設計されています。この機能の初期案では新しいポートでパブリックなSSHサーバーを使用していましたが、SSHの攻撃対象領域を完全に排除するため、これをインプロセスのWebSocketマルチプレクサーに置き換えました。

新しいパブリックポートはありません

すべては既存の :443 イングレス(ウェブアプリと同じTLSエンドポイント)を経由します。SSHサーバーも、公開されたOllamaポートもありません。

送信のみ

CLIがWebSocketを開始します。ラップトップがインバウンド接続を受け入れることはないため、自宅ネットワークのファイアウォールを変更する必要はありません。

組織スコープ

トンネルは単一の組織に紐付けられます。プラットフォーム上の他のテナントは、それを閲覧、選択、呼び出すことはできません。システム管理者は設計上、組織横断的な可視性を持ちます。

即座に取り消し可能

取り消すと、認証情報がデータベースから削除されます。次のリクエストは401で失敗します。アクティブなWebSocketは約1秒以内に切断されます。

シークレットのコピー&ペースト不要

ブラウザOAuthフローは、認証情報をエンドツーエンドで処理します。ブラウザがリフレッシュトークンを見ることはなく、CLIがポーリングチャネルを通じて直接受け取ります。

クォータとフレーム上限

デフォルトで組織あたり5つのアクティブなトンネル、受信 WebSocket フレームの上限は16 MB、クォータ超過時には構造化された402エラーを返します。

SSRFガード。 tunnel機能は既存のギャップも塞ぎます。Ollama providerのspecific_endpointフィールドは許可リストの正規表現で検証されるようになり、プライベートIP、ループバック、Docker composeのサービス名をprovider URLとして使用することはできません。

CLI リファレンス

コマンド機能内容
ee-tunnel pair --server URLブラウザーOAuthペアリング。検証URLを自動的に開きます。
ee-tunnel pair --server URL <token>UIからコピーしたリフレッシュトークンによる手動ペアリング(ヘッドレス環境向けのフォールバック)。
ee-tunnel接続して提供します。一時的な切断時には、指数バックオフ(1 秒 → 30 秒)で再接続します。
ee-tunnel statusペアリング状態、サーバー URL、設定済みの Ollama URL、ラベルを表示します。
ee-tunnel disconnectローカルの認証情報を破棄します。サーバー側では取り消されません。それにはUIをご利用ください。
ee-tunnel version印刷版。

カスタム Ollama URL

Ollamaが別のポートでリッスンしている場合、EE_TUNNEL_OLLAMA_URLを設定するか、ペアリング時に--ollama URLを渡してください。

ファイルの保存場所

macOS · ~/Library/Application Support/ee-tunnel/
Linux · ~/.config/ee-tunnel/
Windows · %APPDATA%\ee-tunnel\

上限とタイミング

organizationごとの有効なtunnel5(デフォルト)
リフレッシュトークンのTTL365日間
アクセストークンのTTL15分
ペアリング TTL10分
受信 WebSocket フレーム最大サイズ16 MB
送信チャンクサイズ(CLI)16 KB
ハートビート間隔30秒

よくある質問

Ollamaはインターネットに公開されていますか?

いいえ。CLIはアウトバウンドのWebSocketを開始します。お使いのノートPCがインバウンド接続を受け付けることはなく、Ollamaのポートはlocalhostにバインドされたままです。

ノートパソコンがスリープするとどうなりますか?

CLIは切断時に正常に終了します。ラップトップを再開してee-tunnelを再実行すると、既存の認証情報で再接続します。トンネルがダウンしている間に実行中のエンリッチメントは、クリーンなConnectErrorで失敗します。

他のorganizationが私のtunnelを利用できますか?

いいえ。各tunnelは1つのorganizationに紐付けられています。プラットフォーム上の他のテナントはそれを閲覧、選択、呼び出しすることはできません。システム管理者は仕様上すべてのtunnelを閲覧できます(グローバルAPIキーと同様です)。

これは企業のファイアウォールの内側で動作しますか?

ほとんどの場合可能です — 必要なのはアウトバウンドの :443 のみです。Webアプリが使用するものと同じ経路です。

認証情報をローテーションするには?

「Tunnels」タブで「Rotate token」をクリックします。古いトークンは即座に無効化され、モーダルにはお使いのノートパソコン用の新しい pair コマンドが表示されます。

Ollamaなしで利用できますか?

はい — CLI は任意の HTTP を転送します。EE_TUNNEL_OLLAMA_URL に任意のローカルの OpenAI 互換エンドポイントを設定してください。Ollama の /v1/chat/completions または /api/tags に対応するものであれば何でも動作します。

オープンソース

CLIとインストーラーはMITライセンスであり、パブリックリポジトリで公開されているため、誰でも自分のマシン上で実行されるものを監査できます。

ソース: github.com/TOT-Concept/ee-tunnel

リリース: github.com/TOT-Concept/ee-tunnel/releases — 各バイナリは公開前に cosign で署名されています。

インストーラーを監査する: curl -fsSL https://entityenricher.ai/install.sh | less