llama-swap
本地大模型的「万能切换器」,通过统一 OpenAI API 接口实现多模型热切换与自动编排
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
本地大模型的「万能切换器」,通过统一 OpenAI API 接口实现多模型热切换与自动编排
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有遇到过这样的尴尬时刻:写代码时想让 AI 当助手,做图时想让 AI 当设计师,做总结时又想让 AI 当写作助理——可每次都要手动停掉当前模型、再启动另一个模型,等上半分钟到几分钟,思路早就断了。
llama-swap 正是来解决这个问题的。它是一个运行在本地的大模型代理网关,最核心的能力只有一个:热切换——在模型之间无缝切换,快到像按一下开关,就能立刻换一个新大脑。
随着 llama.cpp、vLLM、tabbyAPI 等本地推理引擎的成熟,越来越多的开发者和 AI 爱好者开始在本地运行大模型。本地部署的好处显而易见:数据完全私有、无需付费、无网络延迟。但与此同时,一个新的痛点也随之浮现——如何高效管理多个本地模型。
llama-swap 的作者 mostlygeek 从 2023 年开始构建这个工具,最初的灵感就是来自实际使用中的痛点:在同一个工作流里,需要在不同任务之间切换不同的模型,但手动管理模型加载/卸载太过繁琐。GitHub 上超过 4300 颗 star 的收藏量说明,这个需求在社区里相当普遍。
可以把 llama-swap 理解为一个智能插线板。插线板上有很多插孔(对应多个模型),每个插孔连着不同的电器(对应不同的推理服务,如 llama-server、vLLM)。当你需要哪个电器工作,只需要拨动开关,插线板自动接通对应的电路,同时把其他不用的电器断电。
这个比喻的关键在于「自动」二字——你不需要手动去拔插头,llama-swap 会根据你发送的 API 请求,自动识别需要哪个模型,然后加载对应模型、卸载不需要的模型,对外暴露的始终是一个统一的 OpenAI API 兼容接口。
llama-swap 的功能远不止简单的模型切换,它实际上是一个功能完整的本地 AI 网关:
1. 全面的 API 兼容
它模拟了 OpenAI 和 Anthropic 的主流 API 端点,包括:
v1/chat/completions — 最常用的聊天补全接口v1/completions — 文本补全v1/embeddings — 向量嵌入v1/images/generations — 图片生成v1/audio/speech 和 v1/audio/transcriptions — 语音合成和转录v1/messages 接口这意味着,你在 OpenAI API 上写的代码,几乎不需要修改,就能把请求转发到本地模型。
2. Swap Matrix:自定义切换逻辑
进阶用户可以通过 YAML 配置文件中的 matrix 字段,定义复杂的模型切换规则。比如,当 prompt 中出现「写代码」时自动切换到代码专用模型,出现「画画」时切换到 SDAPI 兼容的图片生成服务。这是一种领域特定语言(DSL),给了高级用户极大的定制空间。
3. Web UI:可视化控制台
llama-swap 自带一个实时的 Web 界面(Svelte 构建),可以直接在浏览器里测试模型、查看 token 消耗指标、检查请求和响应的详细内容、手动加载/卸载模型,以及实时查看日志流。
图1:Web UI Playground 界面 — 可直接在浏览器中测试所有模型
图2:Token 指标监控 — 实时查看推理消耗
4. Wol-Proxy:GPU 节能神器
附带一个 wol-proxy 工具,可以在 llama-swap 服务器进入休眠时,通过 Wake-on-LAN 唤醒。这个功能非常实用——一块 RTX 4090 在满载空闲时可以吃掉数百瓦电力,而用 wol-proxy 可以在不用时让机器完全休眠,有请求来时才唤醒,每年能省下不少电费。
llama-swap 用 Go 语言编写(go.mod 显示需要 Go 1.26.1),选 Go 的核心理由是高性能 + 零依赖。一个静态编译的二进制文件,不依赖任何外部运行时,可以直接在服务器上运行。
核心代码结构:
proxy/ — 代理核心逻辑,处理请求路由、模型加载/卸载、上游服务器管理internal/ — 配置解析(26412行)、缓存管理、链式过滤器等通用模块ui-svelte/ — 前端界面,用 Svelte 5 + Vite + Tailwind CSS 构建cmd/ — 各种工具命令(测试用 fake-model、基准测试工具等)docker/ — 容器化文件,包括统一镜像(包含 llama-server、stable-diffusion.cpp、whisper.cpp)值得注意的是,它使用了 Gin Web 框架(Go 生态最流行的 HTTP 框架),以及 Charmbracelet Bubbletea(终端 UI 库)来构建 CLI 工具界面。
前端则采用 Svelte 5(不是 React/Vue),配合 Tailwind CSS 做样式,Chart.js 做指标可视化,Katex 做数学公式渲染——整个栈相当现代化。
对于普通用户,推荐用 Docker 一键部署:
docker pull ghcr.io/mostlygeek/llama-swap:unified-cuda
docker run -it --rm --runtime nvidia -p 9292:8080 \
-v /path/to/models:/models \
-v /path/to/config.yaml:/etc/llama-swap/config/config.yaml \
ghcr.io/mostlygeek/llama-swap:unified-cuda
统一镜像里已经内置了 llama-server、stable-diffusion、whisper 等常用推理工具,基本不需要额外配置就能跑起来。
对于深度用户,可以直接用 make clean all 从源码编译(需要 Go + Node.js),获得更大的定制空间。
配置方面,只需要一个 YAML 文件指定模型路径和启动命令,llama-swap 会自动处理端口分配和进程管理。最简配置只有 4 行 YAML。
1. 模型切换仍有冷启动延迟
虽然 llama-swap 尽力让切换「热」,但本质上仍依赖底层推理服务加载模型文件。对于 7B 模型,加载时间可能在 10-30 秒;如果是 70B 级别的大模型,切换时间可能长达数分钟。官方建议通过 Swap Matrix 提前预加载常用模型来缓解这个问题。
2. 不支持分布式推理
llama-swap 设计为单机部署,所有模型必须运行在同一台机器上。如果需要管理多台机器上的模型,它无法胜任。
3. 文档偏英文,中文社区资料少
虽然配置示例中提到「This file is LLM-friendly」,但文档主要是英文,中文资料较少,对国内用户有一定门槛。
llama-swap 的出现,本质上反映了本地 AI 发展的一种趋势:从「单模型实验」走向「多模型协作」。随着开源模型能力越来越强、种类越来越多,如何高效组织多模型工作流将成为刚需。
llama-swap 填补了一个重要的空白:它不是一个推理引擎(这已经有 llama.cpp、vLLM 做了),而是一个模型编排层。它让用户可以用统一的 API 调用风格,管理任意数量的本地模型,而不用关心底层细节。
从 star 历史增长曲线来看,该项目从 2024 年初开始快速获得关注,与 vLLM、llama.cpp 生态的成熟时间线高度吻合——说明它的价值正是踩在了本地大模型生态爆发的节点上。
本报告基于 GitHub 源码和官方文档生成,分析时间:2026-06-02。