这个项目能做什么

llama-swap 是一个代理,用于在一台机器上运行多个生成式 AI 模型并按需切换。它位于任何 OpenAI 或 Anthropic API 兼容的推理服务器之前,读取每个传入请求中的 `model` 字段,并启动或替换为该请求提供服务所需的上游服务器。该项目用 Go 编写,以一个二进制文件加一个配置文件的形式发布,并声明没有外部依赖。 支持的上游包括 llama.cpp 及其分支、vllm、stable-diffusion.cpp、whisper.cpp、audio.cpp 和 ComfyUI。由于该代理是协议级的,而不是绑定到特定引擎,README 指出推理服务器可以独立升级。 API 接口 - OpenAI 风格端点:`v1/completions`、`v1/chat/completions`、`v1/responses`、`v1/embeddings`、`v1/models`、`v1/audio/speech`、`v1/audio/transcriptions`、`v1/audio/voices`、`v1/images/generations` 和 `v1/images/edits`。 - Anthropic 风格端点:`v1/messages` 和 `v1/messages/count_tokens`。 - llama-server 额外端点:`v1/rerank`、`v1/reranking`、`/rerank`、`/infill`、`/completion`、`/models` 和 `/props`。 - 来自 stable-diffusion.cpp 服务器的 SDAPI 端点,以及 audio.cpp 任务端点和 `/comfyui/` 自定义端点。 - 管理端点:`/ui`、`/upstream/:model_id`、`/running`、`POST /api/models/unload`(所有模型)和 `POST /api/models/unload/:model_id`,通过 `/api/profiles` 列出和激活配置文件,`/health`,以及用于 Prometheus 系统和 GPU 指标的 `/metrics`。 - 日志端点:`/logs` 用于缓冲的纯文本日志,`/logs/stream` 用于实时流式传输,并有 `/logs/stream/proxy`、`/logs/stream/upstream` 和 `/logs/stream/{model_id}` 变体;`?no-history` 仅流式传输新行。 配置和功能 最小配置声明一个 `models` 映射,其中每个条目都有一个 ID 和一个 `cmd`;`${PORT}` 会被替换为自动分配的端口。可选设置包括用于在闲置后自动卸载的 `ttl`、`unloadTimeout`、用于熟悉模型名称的 `aliases`、`env` 变量、用于优雅关闭 Docker/Podman 的 `cmdStop`、`useModelName`、请求 `filters`(`stripParams`、`setParams`、`setParamsByID`)、用于启动时预加载的 `hooks`、`macros`,以及用于运行并发模型并自定义交换逻辑的 `matrix` DSL。可以定义 API 密钥以限制端点访问,配置文件允许在运行时切换模型 ID 路由。 捆绑的 Web UI 提供 playground、token 指标、请求/响应检查、手动模型加载和卸载,以及实时日志流式传输。Help 页面会针对 llama-swap 自己的文档运行一个本地支持工具的模型,相同的工具也作为 MCP 端点暴露在 `/api/mcp`。 安装 列出的选项包括 Docker、Homebrew、MacPorts、WinGet、发布二进制文件(Linux、macOS、Windows、FreeBSD),以及使用 Go 和 Node.js 从源代码构建。Nightly Docker 镜像有两个系列:统一镜像捆绑了 llama-server、ik-llama-server、stable-diffusion.cpp、whisper.cpp、audio.cpp 和 llama-swap(CUDA 12、CUDA 13 和 Vulkan 变体,推荐),以及基于 llama.cpp 自己的 `llama-server` 容器的旧版镜像。统一镜像可以通过映射到命令行标志的 `LLAMA_SWAP_*` 环境变量进行配置。 运维注意事项 README 建议在将 llama-swap 放在 nginx 后面时禁用响应缓冲,因为缓冲会破坏 SSE 和流式聊天补全;llama-swap 还会在 SSE 响应上设置 `X-Accel-Buffering: no`。对于基于 Python 的服务器,例如 vllm 或 tabbyAPI,建议在 Podman 或 Docker 下运行它们,以实现环境隔离和正确的 `SIGTERM` 处理。