只需一条命令即可将本机 Ollama 接入 Entity Enricher。使用你已有的 model,将特定输入保留在本机,并可即时撤销访问权限——全部通过单一出站 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、……)运行富化,无需在服务器上重新下载。
对于敏感的 prompt,可将特定的 enrichment 路由到你自己的 GPU 上。平台仍会记录成本、token 和元数据——只有推理本身保留在本地。
在你的笔记本电脑上用 `ollama pull` 拉取一个模型,点击“发现模型”,它就会带着真实的上下文长度和能力出现在 Entity Enricher 的选择器中。
当托管提供方对你进行限流时,在该批次的剩余部分故障转移到通过隧道连接的本地模型。
在笔记本电脑上运行两条命令,在浏览器中点击一次。整个流程大约一分钟。
打开 API Keys → Ollama Tunnels,然后点击 New Ollama Tunnel。输入一个标签,以便日后识别此设备(例如 “Anthony's 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...
您无需复制粘贴 token。浏览器只会看到 tunnel 元数据;CLI 通过自己的轮询通道接收其凭据。
运行 ee-tunnel。隧道标签页中的状态标记会在几秒内切换为 Connected。然后在 Models & Pricing 中的 Ollama 提供商上点击 Discover Models,即可自动导入所有本地安装的聊天模型。
配对采用 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 提供商。多专业领域、融合、批量——一切都照常运作。
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多个进行中的丰富任务共用一个 tunnel WebSocket。每个请求都会获得一个 UUID;两端按 id 对帧进行解复用,因此并发调用(例如多专业领域)能自然工作。
流式响应(Ollama 的 stream=true)以一系列 response_chunk 帧的形式传输,因此即使通过 tunnel,逐 token 的 UI 更新也能保持增量更新。
组织所有者点击“新建 Ollama 隧道”,输入标签并确认。平台随即分配凭证。
在您的笔记本电脑上,运行一行式安装程序并执行 `ee-tunnel pair`。浏览器会打开一个标签页——请使用同一个 Entity Enricher 账户进行确认。
运行 `ee-tunnel`。CLI 会打开一个出站 HTTPS WebSocket 连接。新的提供商会在几秒内出现在您的模型列表中。
点击“Discover Models”——本地 Ollama 中的每个 model 都会以真实的上下文长度和能力自动导入。像往常一样进行 enrichment。
在界面中点击一下即可断开 WebSocket 并立即使凭据失效。
该 tunnel 的设计旨在尽量减少攻击面。该功能的早期草案在一个新端口上使用了公共 SSH 服务器;我们用进程内的 WebSocket 多路复用器取代了它,从而彻底消除了 SSH 攻击面。
所有流量都通过现有的 :443 入口——与 Web 应用相同的 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。
| 命令 | 它的功能 |
|---|---|
| ee-tunnel pair --server URL | 浏览器 OAuth 配对。自动打开验证 URL。 |
| ee-tunnel pair --server URL <token> | 使用从界面复制的刷新令牌手动配对(无界面环境的备用方案)。 |
| ee-tunnel | 连接并提供服务。在瞬时断开时以指数退避(1 秒 → 30 秒)重新连接。 |
| ee-tunnel status | 显示配对状态、服务器 URL、已配置的 Ollama URL 和标签。 |
| ee-tunnel disconnect | 清除本地凭据。不会在服务器端撤销;如需撤销请使用 UI。 |
| 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 MB |
| 出站分块大小 (CLI) | 16 KB |
| 心跳间隔 | 30 秒 |
不会。CLI 发起的是对外的 WebSocket 连接。您的笔记本电脑从不接受入站连接,且您的 Ollama 端口始终绑定在 localhost 上。
CLI 会在断开连接时正常退出。唤醒笔记本电脑并重新运行 ee-tunnel 即可使用现有凭据重新连接。在隧道断开期间运行的丰富化任务会以一个明确的 ConnectError 失败。
不能。每个 tunnel 都绑定到单个 organization。平台上的其他租户无法查看、选择或调用它。按设计,系统管理员可以查看所有 tunnel(与全局 API 密钥相同)。
几乎总是如此——只需要出站 :443 端口。与 Web 应用使用的路径相同。
在 Tunnels 选项卡上点击“轮换令牌”。旧令牌会立即失效;弹窗会显示一条用于你笔记本电脑的全新配对命令。
是——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