AI 时代的 NGINX

一个网关,统管
你运行的每个 AI Runtime

ModelDock 运行在你的本机与局域网,对外暴露统一的 OpenAI 兼容网关。用形如 instance:model 的模型 ID(或别名),即可路由、审计并保护对 Ollama、LM Studio、DashScope、Codex 与 Claude Code 的请求 —— 上游凭据永不离开你的设备。

Rust 内核 · Tauri v2 桌面端macOS · Windows · Linux
quickstart.py
from openai import OpenAI
 
client = OpenAI(
base_url="http://127.0.0.1:3737/v1",
api_key="mdk_…",
)
 
resp = client.chat.completions.create(
model="ollama-local:qwen3:14b", # 或使用别名:default-code
messages=[{"role": "user", "content": "Hi"}],
)
统一路由

所有运行时,统一一个 ID

既可用 instance:model 直连某个模型,也可用带有序 Fallback 链的稳定别名。路由器只按第一个冒号切分,所以含冒号的上游模型名也能正常工作 —— 而未知 ID 会显式报错,绝不静默吞掉。

OOllama本地
LLM Studio本地
DDashScope云端
CCodex命令行
CClaude Code命令行
ollama-local:qwen3:14bOllama → qwen3:14b
dashscope-prod:qwen-plusDashScope → qwen-plus
claudecode-local:sonnetClaude Code → sonnet
default-code别名 → 主模型 + Fallback 链
为什么选 ModelDock

为在本地跑 AI 的开发者而生

一个轻量、快速的 Rust 网关。无论模型跑在你的 GPU 上、本地应用里,还是云端 API 背后,你的工具链都保持一致。

OpenAI 兼容 API

标准的 /v1/chat/completions 与 /v1/models 接口,外加 Anthropic 形状的 /v1/messages 路由。把任意现有 SDK 指向 127.0.0.1:3737 即可。

Provider 实例

同一类型可运行多个实例 —— ollama-local、ollama-gpu-node —— 各自拥有独立的 base_url、allowlist、风险等级与 LAN 暴露。Codex 与 Claude Code 为本机单实例。

别名与 Fallback

定义 default-code 之类的稳定别名,带一个主模型加一条有序 Fallback 链。失败请求会沿链重试;但 Policy 与权限错误绝不 Fallback。

Key、Scope 与 Policy

本地生成 mdk_ Key(只保存 argon2 hash 与展示前缀)。按 model / alias / instance / cloud / high-risk / LAN 维度授权,并支持按 Key 的限流与每日 token 配额。

桌面控制中心

一个 Tauri v2 + React 仪表盘,涵盖 Providers、Models & Aliases、API Keys、Audit 与 Logs —— 在一个原生窗口里管理每个运行时。

审计与 Prompt 日志

每次请求一条审计事件,与运行时日志物理分离,并带有 x-modeldock-request-id 响应头。Prompt 日志分级(off / metadata / redacted / full),默认关闭。

工作原理

从请求到运行时的清晰链路

每一次聊天与模型调用都走同一条可预期的管线。路由与具体 Provider 解耦 —— 真正的运行时只在组合层接入。

Client
Auth
Scope
Policy
LAN
Alias
Router + Fallback
Provider
01

鉴权与 Scope

先用 argon2 hash 校验 mdk_ Key,再检查所需 Scope,然后才进入后续流程。

02

Policy 与 LAN 闸门

按 Key 的 Policy 依据 model / alias / instance / cloud / high-risk 授权目标,LAN 闸门强制执行暴露策略 —— fail-closed(默认拒绝)。

03

解析与路由

别名解析为主模型加 Fallback 链;ModelRouter 解析 instance:model 并选定对应的 Provider 实例。

04

转发与 Fallback

Provider 调用运行时并还原网关模型 ID。失败时沿 Fallback 链重试 —— 但 Policy 错误绝不重试。

安全与隐私

隐私是架构本身,而非一个开关

这些边界是产品的核心。你的机器始终是信任边界 —— 这是刻意的设计。

凭据永不经过网关

Codex 与 Claude 的 token、cookie、session 及认证文件,完全由上游 CLI 自行处理。ModelDock 绝不读取、展示、复制或保存它们。

默认沙箱运行

Codex Provider 以只读沙箱运行 app-server,并拒绝命令、文件变更、权限与 MCP elicitation 请求。Claude Code 关闭工具、不持久化会话。

Prompt 日志需显式开启

Prompt 内容日志默认关闭。Provider 密钥通过带掩码的 SecretStore 流转 —— UI 只看到预览,永远看不到明文。

默认只在 localhost

网关绑定 127.0.0.1。开启 LAN 暴露必须显式把 host 设为 0.0.0.0 并启用 allow_lan —— 高风险 Provider 默认完全不暴露到 LAN。

常见问题

常见问题解答

关于 ModelDock 是什么、如何工作的简短而准确的回答。

ModelDock 是什么?

ModelDock 是面向本机与局域网的 AI Runtime 网关 —— AI 时代的 NGINX。它运行在你的机器上,对外暴露一个监听 127.0.0.1:3737 的 OpenAI 兼容 API,统一路由、审计并保护对 Ollama、LM Studio、DashScope、Codex 与 Claude Code 的请求。

ModelDock 是免费和开源的吗?

是的。ModelDock 基于 MIT 协议开源,可免费使用。你可以下载桌面应用,也可以从源码自行构建。

它支持哪些 AI 运行时?

开箱即用支持:Ollama、LM Studio、DashScope、Codex 与 Claude Code。同一类型运行时可运行多个实例,且新增 Provider 无需改动你的客户端代码。

ModelDock 会保存我的 API Key 或上游凭据吗?

上游凭据永不离开你的机器。网关绝不读取、展示、复制或保存 Codex 或 Claude 的 token。本地网关 Key(mdk_)只保存 argon2 hash 与展示前缀,Provider 密钥在界面中以掩码显示。

如何用 OpenAI SDK 调用 ModelDock?

把任意 OpenAI 兼容 SDK 指向 http://127.0.0.1:3737/v1,使用 mdk_ 开头的 Key,并将 model 设为 instance:model(例如 ollama-local:qwen3:14b)或别名(例如 default-code)。

ModelDock 能在哪些平台运行?

ModelDock 以 Tauri v2 桌面应用形式提供,支持 macOS、Windows 与 Linux,其 Rust 内核会在启动时拉起内置网关。

在一个地方运行每一个模型

安装桌面应用,启动内置网关,把你的工具指向同一个本地入口即可。开源且免费。

默认 127.0.0.1:3737 · Rust workspace + Tauri v2