Túneis Ollama - Documentação do Entity Enricher

Túneis Ollama

Ligue o Ollama local do seu portátil ao Entity Enricher com um único comando. Use os modelos que já tem, mantenha determinados inputs na sua máquina e revogue o acesso instantaneamente — tudo através de uma única ligação HTTPS de saída.

            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

O nome de anfitrião sintético ollama.<org-slug>.tunnel nunca é resolvido por DNS. Um transporte personalizado no processo do Entity Enricher interceta pedidos para *.tunnel e encaminha-os através do WebSocket ativo correspondente.

Porquê usar um tunnel?

Utilize os models que já tem

Execute enriquecimentos contra modelos de pesos abertos já descarregados no seu portátil (Llama 3, Qwen, DeepSeek, Mistral, …) sem os voltar a descarregar no servidor.

Manter certas entradas na sua máquina

Para prompts sensíveis, encaminhe enriquecimentos específicos através da sua própria GPU. A plataforma continua a registar o custo, os tokens e os metadados — apenas a inferência em si permanece local.

Experimente um novo modelo em 30 segundos

Descarregue um modelo com `ollama pull` no seu portátil, clique em Descobrir Modelos e ele aparece no seletor do Entity Enricher com o comprimento de contexto e as capacidades reais.

Descarregue trabalho em picos

Quando um provider alojado o limita por taxa, faça failover para um modelo local em túnel durante o resto de um batch.

Início rápido

Dois comandos no seu portátil, um clique no navegador. Todo o fluxo demora cerca de um minuto.

  1. 1

    Criar um tunnel na interface

    Abra Chaves de API → Túneis Ollama e clique em Novo Túnel Ollama. Escreva uma etiqueta para reconhecer este dispositivo mais tarde (por exemplo, "MacBook do Anthony").

    [Marcador de captura de ecrã — separador Túneis com o botão "New Ollama Tunnel" destacado]
  2. 2

    Instale a CLI no seu portátil

    Cole isto num terminal. O script verifica uma assinatura cosign antes de instalar.

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

    O instalador imprime o que está prestes a fazer (URL de download, assinatura, caminho de instalação) e faz uma pausa de 5 segundos para lhe dar uma janela de Ctrl+C. O código-fonte encontra-se em TOT-Concept/ee-tunnel (MIT). Os utilizadores de Windows usam install.ps1 em alternativa.

  3. 3

    Emparelhe através do seu navegador

    Execute ee-tunnel pair. Abre-se um separador do navegador em /tunnel/connect com um código de 6 caracteres. Confirme a etiqueta do dispositivo e clique em Ligar.

    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...
    [Marcador de captura de ecrã — página de confirmação /tunnel/connect com código de dispositivo]

    Nunca copia nem cola um token. O navegador vê apenas os metadados do túnel; a CLI recebe as suas credenciais através do seu próprio canal de polling.

  4. 4

    Ligue e descubra modelos

    Execute ee-tunnel. O indicador de estado no separador Túneis muda para Ligado em segundos. Depois clique em Descobrir modelos no fornecedor Ollama em Modelos e preços para importar automaticamente todos os modelos de chat instalados localmente.

    [Marcador de vídeo — Descobrir Modelos a importar 4 modelos Ollama locais para a plataforma]

Como funciona o emparelhamento

O emparelhamento usa um fluxo de código de dispositivo ao estilo OAuth (formato RFC 8628). O utilizador escreve um código curto num navegador em vez de copiar e colar um token. O navegador só vê os metadados do túnel; a CLI recebe o seu token de atualização diretamente pelo seu próprio canal de polling — resgate único.

 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                │                              │

Como um pedido flui através do tunnel

Depois de ligado, o seu Ollama em túnel é apenas mais um provedor de LLM no que diz respeito ao resto da plataforma. Multiexpertise, fusão, lote — tudo funciona sem alterações.

  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

Multiplexagem

Vários enriquecimentos em curso partilham um único WebSocket de túnel. Cada pedido recebe um UUID; as frames são desmultiplexadas por id em ambas as extremidades, para que as chamadas concorrentes (por exemplo, multi-especialização) funcionem naturalmente.

As respostas em streaming (stream=true do Ollama) transitam como uma sequência de frames response_chunk, para que as atualizações da interface, token a token, permaneçam incrementais mesmo através do túnel.

Ciclo de vida

01

Criar

Um proprietário da organização clica em "Novo Túnel Ollama", introduz um rótulo e confirma. A plataforma atribui as credenciais.

02

Emparelhar

No seu portátil, execute o instalador de uma linha e `ee-tunnel pair`. Abre-se um separador do navegador — confirme com a mesma conta Entity Enricher.

03

Ligar

Execute `ee-tunnel`. A CLI abre um único WebSocket HTTPS de saída. O novo fornecedor aparece na sua lista de modelos em segundos.

04

Utilizar

Clique em Descobrir Modelos — todos os modelos no seu Ollama local são importados automaticamente com o comprimento de contexto e as capacidades reais. Enriqueça como habitualmente.

05

Revogar

Um clique na interface encerra o WebSocket e invalida as credenciais de imediato.

Segurança

O túnel foi concebido para adicionar a menor superfície de ataque possível. O rascunho anterior da funcionalidade utilizava um servidor SSH público numa nova porta; substituímo-lo pelo multiplexador WebSocket em processo para eliminar totalmente a superfície de ataque do SSH.

Nenhuma nova porta pública

Tudo passa pelo ingress :443 existente — o mesmo endpoint TLS da aplicação web. Sem servidor SSH, sem porta Ollama exposta.

Apenas saída

A CLI inicia o WebSocket. O seu portátil nunca aceita ligações de entrada — a firewall da sua rede doméstica não precisa de mudar.

Âmbito da org

Um túnel está associado a uma única organização. Outros inquilinos na plataforma não o podem ver, selecionar nem invocar. Os administradores de sistema têm visibilidade entre organizações por conceção.

Revogável instantaneamente

A revogação remove as credenciais da base de dados. O pedido seguinte falha com 401. O WebSocket ativo é removido em ~1 segundo.

Sem segredos copiados e colados

O fluxo browser-OAuth gere as credenciais de ponta a ponta. O browser nunca vê o seu refresh token; a CLI recebe-o diretamente através do seu canal de polling.

Limites de quota e de frames

5 túneis ativos por organização por predefinição; limite de 16 MB por frame WebSocket de entrada; erros 402 estruturados quando a quota é excedida.

Proteção contra SSRF. A funcionalidade de túnel também colmata uma lacuna pré-existente: o campo specific_endpoint nos fornecedores Ollama é agora validado contra uma regex de lista de permissões, para que IPs privados, loopback e nomes de serviços do Docker compose nunca possam ser usados como URL de fornecedor.

Referência da CLI

ComandoO que faz
ee-tunnel pair --server URLEmparelhamento Browser-OAuth. Abre automaticamente o URL de verificação.
ee-tunnel pair --server URL <token>Emparelhamento manual com um refresh token copiado da interface (alternativa para ambientes headless).
ee-tunnelLigue e sirva. Reconecta com recuo exponencial (1s → 30s) em quedas transitórias.
ee-tunnel statusMostrar o estado de emparelhamento, o URL do servidor, o URL do Ollama configurado e a etiqueta.
ee-tunnel disconnectEsquecer as credenciais locais. Não revoga do lado do servidor; utilize a interface para isso.
ee-tunnel versionVersão para impressão.

URL personalizado do Ollama

Se o seu Ollama estiver à escuta numa porta diferente, defina EE_TUNNEL_OLLAMA_URL ou passe --ollama URL no momento do emparelhamento.

Onde ficam os ficheiros

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

Limites e temporização

Tunnels ativos por organização5 (predefinição)
TTL do refresh-token365 dias
TTL do token de acesso15 minutos
TTL de emparelhamento10 minutos
Máximo de frame WebSocket de entrada16 MB
Tamanho do bloco de saída (CLI)16 KB
Intervalo de heartbeat30 segundos

Perguntas comuns

O meu Ollama está exposto à internet?

Não. A CLI inicia um WebSocket de saída. O seu portátil nunca aceita ligações de entrada e a sua porta Ollama permanece associada a localhost.

O que acontece quando o meu portátil entra em suspensão?

A CLI termina de forma controlada quando há desconexão. Retomar o portátil e voltar a executar o ee-tunnel religa com as credenciais existentes. Os enriquecimentos em execução enquanto o túnel está inativo falham com um ConnectError limpo.

Outras organizações podem utilizar o meu túnel?

Não. Cada túnel está associado a uma organização. Outros inquilinos na plataforma não o podem ver, selecionar ou invocar. Os administradores de sistema podem ver todos os túneis intencionalmente (tal como as chaves de API globais).

Isto funciona por trás de uma firewall empresarial?

Quase sempre — apenas é necessária a porta de saída :443. O mesmo caminho que a aplicação web utiliza.

Como faço a rotação de credenciais?

Clique em "Rodar token" no separador Túneis. O token antigo é invalidado imediatamente; a janela mostra um novo comando de emparelhamento para o seu portátil.

Posso utilizar isto sem o Ollama?

Sim — a CLI reencaminha HTTP arbitrário. Defina EE_TUNNEL_OLLAMA_URL para qualquer endpoint local compatível com OpenAI. Tudo o que fale o /v1/chat/completions ou /api/tags do Ollama irá funcionar.

Código aberto

A CLI e o instalador têm licença MIT e residem num repositório público para que qualquer pessoa possa auditar o que corre na sua máquina.

Fonte: github.com/TOT-Concept/ee-tunnel

Versões: github.com/TOT-Concept/ee-tunnel/releases — cada binário é assinado com cosign antes da publicação.

Audite o instalador: curl -fsSL https://entityenricher.ai/install.sh | less