[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f2hjm8bvgg2x4g":3},{"code":4,"message":5,"data":6,"timestamp":42},10000,"success",{"full_name":7,"position":8,"description":9,"language":10,"stars":11,"forks":12,"stars_gained":13,"age_days":14,"hn_threads":15,"one_liner":22,"summary_md":23,"topic":24,"github_topics":27,"license":36,"homepage":37,"updated_at":38,"history":39},"mostlygeek\u002Fllama-swap",8,"Reliable model swapping for any local OpenAI\u002FAnthropic compatible server - llama.cpp, vllm, etc","Go",6078,521,12,751,[16],{"id":17,"title":18,"points":19,"comments":20,"posted_at":21},47354939,"Llama-swap: Reliable model swapping",2,0,"2026-03-12","一个按需启停本地推理服务的代理，把多个模型统一到一个 OpenAI\u002FAnthropic 兼容地址后面。","如果你在同一台机器上跑多个本地模型，又厌倦了手动管理端口、启动脚本和各种客户端配置，llama-swap 值得一试。它由一个 Go 二进制加一份 YAML 配置组成，只监听一个地址，根据请求里的模型名找到对应后端进程，需要时才启动它。\n\n## 解决什么问题\n\n在一块 GPU 上，开发者可能想同时用聊天模型、嵌入模型，偶尔还要跑图像或语音模型，并且希望同一个客户端都能调用。按常规做法，每个后端都要手动启动在独立端口上，客户端要按模型改配置，空闲进程还可能一直占着下一个模型需要的显存。llama-swap 把这一步换掉：客户端始终面向一个 OpenAI 或 Anthropic 风格的端点，代理按模型名匹配配置中的启动命令，拉起进程后转发响应。最终得到的是一个稳定地址，背后挂着多个模型，切换由代理完成，客户端不用感知。\n\n## 有什么不同\n\nllama-swap 不内置推理引擎，而是把每个模型当成配置里的一条命令。因此它对后端保持中立：README 列出了 llama.cpp 及其分支、vLLM、stable-diffusion.cpp、audio.cpp、ComfyUI、whisper.cpp，并声明可对接任何 OpenAI\u002FAnthropic 兼容服务。升级或替换推理服务时，不需要改动这一层路由配置。\n\n代理暴露的端点也不止聊天：包括 completions、responses、embeddings、语音合成与转写、图像生成与编辑、Anthropic messages 和 token 计数，以及 llama.cpp 的 rerank、infill 等路由。实时 Web UI 提供 playground、token 指标和请求\u002F响应查看，还能手动加载、卸载模型（[README](https:\u002F\u002Fgithub.com\u002Fmostlygeek\u002Fllama-swap\u002Fblob\u002Fmain\u002FREADME.md)）。主要代价在配置：价值取决于每条模型的启动命令写得是否准确，而且它本质上是进程管理器，不是模型管理器，多出来的进程层对纯文本客户端不可见。\n\n## 谁值得试\n\n适合只有一块 GPU、但希望一个本地端点服务多个模型和多个工具的人：编辑器插件、脚本和聊天客户端都指向同一主机，按模型名切换即可。如果只固定运行一个模型、从不切换，代理只会多一跳和一份配置文件，收益有限。Docker 用户有明确路径：统一镜像打包了 llama-server、ik-llama-server、stable-diffusion.cpp、whisper.cpp 和 audio.cpp，分 CUDA 12、CUDA 13 和 Vulkan 版本（[容器镜像](https:\u002F\u002Fgithub.com\u002Fmostlygeek\u002Fllama-swap\u002Fpkgs\u002Fcontainer\u002Fllama-swap)）；旧版镜像跟随 llama.cpp 自己的 server 容器，但没有图像、语音和 ik-llama-server 支持（[旧版基础镜像](https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp\u002Fpkgs\u002Fcontainer\u002Fllama.cpp)）。非容器环境可用 Homebrew、MacPorts、WinGet 或发布二进制，其中 MacPorts 和 WinGet 由社区维护，并非项目官方组成部分（[WinGet issue](https:\u002F\u002Fgithub.com\u002Fmostlygeek\u002Fllama-swap\u002Fissues\u002F327)）。\n\n## 使用条件与边界\n\n核心前提是有本地推理硬件，以及至少一个配置能启动的后端服务；llama-swap 本身不提供模型权重或推理引擎。按需切换意味着某个模型的第一次请求要承担启动时间；在常见配置下，有限的显存同时只能容纳一个模型。统一 Docker 镜像按 GPU 区分：CUDA 13 覆盖 Ampere 到 Blackwell，CUDA 12 面向被 CUDA 13 放弃的旧卡，Vulkan 面向 AMD 等支持 Vulkan 的 GPU，所以镜像和硬件要对上（[README](https:\u002F\u002Fgithub.com\u002Fmostlygeek\u002Fllama-swap\u002Fblob\u002Fmain\u002FREADME.md)）。\n\n日常维护主要是改配置：新增模型或调整启动参数都要编辑模型列表；后端升级由你负责，项目有意不锁定引擎。README 也注明了一些端点限制，例如 `\u002Fprops` 必须带 `?model=` 查询参数，且会忽略 autoload。\n\n## HotRepo 点评\n\n仓库创建于 2024-10-04，HotRepo 唯一记录的榜单观测是 2026-10-25：当日进入每日 Trending 榜，6,073 stars，当天 +12。仅凭这一次快照，无法判断热度能否持续。采用前建议先看与你后端对应的配置示例：项目的价值取决于你的服务启动命令能否被清晰表达，以及预加载行为是否符合你的工作流程。",{"slug":25,"name":26},"ai-engineering","AI 工程",[28,29,30,31,32,33,34,35],"golang","llama","llamacpp","localllama","localllm","openai","openai-api","vllm","MIT",null,"2026-10-25T11:04:50Z",[40],{"date":41,"stars":11,"stars_gained":13},"2026-10-25",1792968754]