一个网关,统管
你运行的每个 AI Runtime
ModelDock 运行在你的本机与局域网,对外暴露统一的 OpenAI 兼容网关。用形如 instance:model 的模型 ID(或别名),即可路由、审计并保护对 Ollama、LM Studio、DashScope、Codex 与 Claude Code 的请求 —— 上游凭据永不离开你的设备。
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 会显式报错,绝不静默吞掉。
ollama-local:qwen3:14bOllama → qwen3:14bdashscope-prod:qwen-plusDashScope → qwen-plusclaudecode-local:sonnetClaude Code → sonnetdefault-code别名 → 主模型 + Fallback 链为在本地跑 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 解耦 —— 真正的运行时只在组合层接入。
鉴权与 Scope
先用 argon2 hash 校验 mdk_ Key,再检查所需 Scope,然后才进入后续流程。
Policy 与 LAN 闸门
按 Key 的 Policy 依据 model / alias / instance / cloud / high-risk 授权目标,LAN 闸门强制执行暴露策略 —— fail-closed(默认拒绝)。
解析与路由
别名解析为主模型加 Fallback 链;ModelRouter 解析 instance:model 并选定对应的 Provider 实例。
转发与 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