首页 / 文章 / Phlox-GW:具备预算控制、限制机制与高可用性的开源大语言模型网关

Phlox-GW:具备预算控制、限制机制与高可用性的开源大语言模型网关

自托管一个具备退款功能、速率限制、个人信息保护机制、审计日志的LLM网关,支持OpenAI和Anthropic接口,并采用Postgres作为后端数据库。

2581 词

开源的LLM网关通常会将“企业级”控制功能——如退款机制、预算管理、单点登录、行为规范、审计追踪、高可用集群、速率限制、路由功能——封装在付费许可证之后提供。Phlox-GW(Phlox Gateway)则将这些控制功能置于一个完全开源的网关中,专为团队自托管基础设施设计:它提供了一个统一的前端入口,支持OpenAI和Anthropic的接口,并具备协议转换功能,从而使Claude Code等客户端能够与来自不同后端的模型进行交互。

Phlox-GW是为macOS、Linux(包括WSL)和Windows平台设计的单一Go语言二进制文件。小型部署可使用SQLite运行单个实例;而大型部署则可在共享的PostgreSQL上构建多节点集群。还有一个名为Phlox AI Platform的关联项目,在需要完整聊天界面时可与该网关配合使用;本指南主要介绍网关本身。

Phlox-GW界面导览

运营控制面板

管理员可以查看用户数、服务提供商数量、API密钥数量、事件数量以及总花费等概要数据,还能看到涵盖30天的每日成本、代币数、请求量、错误次数及平均延迟时间的图表。

成本与预算监控

每月预算会分配给特定人员或部门。用户会被标记所属部门,以便将各项支出汇总到相应部门。一旦超过警告阈值会发出通知;达到硬性限制则会在下一个周期或限额提升之前阻止付费模型的使用。正是这种退款机制使得团队更倾向于使用网关而非直接使用服务提供商的密钥。

速率限制

限制可针对用户、部门、服务提供商或模型层面设置,表现为每分钟请求次数(RPM)和/或每分钟代币数(TPM)。

通过集群实现高可用性与扩展性

在 PostgreSQL 上使用单个 Go 进程就已经足够应对多数需求。若需要更高的可用性或支持数千个并发会话,则可增加多个共享同一 PostgreSQL 实例的节点,并在前面部署网络负载均衡器,通过健康检查机制移除异常节点。

审计功能

审计记录会保存登录信息和配置操作的相关数据:时间、操作者、操作类型、目标对象、详细信息以及 IP 地址。

保护隐私的请求日志记录

每次网关调用都会记录元数据——包括时间、请求 ID、用户、部门、API 密钥、服务提供商、模型类型、协议以及端点地址——但不会存储请求内容或响应内容,从而在保障内容隐私的同时为运维人员提供事件追溯记录。

管控机制/个人身份信息遮蔽与拦截

根据配置,中间件可在敏感模式被检测到时对消息进行遮蔽或拦截,既防止信息泄露给服务提供商,也避免信息泄露给客户端。

自助式 API 密钥

已登录用户可以创建带可选过期时间的命名密钥,撤销这些密钥,并查看其最后使用时间。管理员可通过整体视图来分配预算/限制并撤销密钥。完整的密钥信息在创建时会显示一次。

自助式使用情况监控

用户无需等待财务数据导出,即可查看自己的请求次数、输入/输出令牌数、支出情况以及各模型的成本明细。

安装 Phlox-GW

用于工作站评估时,该二进制文件为独立版本,首次启动时会创建一个 SQLite 数据库。从源代码构建则需要最新的 Go 工具链以及用于 UI 资产的 npm。典型的启动步骤如下:

curl \
  --proto '=https' \
  --tlsv1.2 \
  -fsSL \
  https://raw.githubusercontent.com/robert-mcdermott/phlox-gw/main/install.sh \
  | sh

创建一个数据目录,然后启动服务:

  mkdir -p "/Users/<your-username>/.local/share/phlox-gw"
  cd "/Users/<your-username>/.local/share/phlox-gw"
  phlox-gw

将浏览器指向本地用户界面,创建第一个管理员账号,然后在那里继续进行配置。生产环境安装通常会设置 Postgres DSN、监听地址、负载均衡器处的 TLS 终止点以及会话密钥等环境变量——完整的变量列表请参见仓库文档。

配置 Phlox-GW

并没有强制要求的配置文件:环境变量加上网页界面就足以完成设置。

添加/配置提供者

需为每个上游服务(支持 OpenAI、Anthropic 或其他类型)注册基础 URL 及凭证,这些信息由网关存储,而非每台笔记本电脑。

添加并配置模型

将提供者的模型编号映射为网关可识别的名称,设定费用计算方式,同时在多个后端可以处理同一逻辑模型时选择路由/故障转移对象。

在测试环境中验证服务提供商与模型

内置的测试环境会通过选定的服务提供商/模型路径发送试聊消息,以便在将客户端指向网关之前发现连接问题。

添加用户

创建账户(或在支持的情况下连接单点登录/OIDC),分配角色和部门,并设置预算/限制。

创建预算

为个人和部门设定每月的最高限额及警告阈值;按需使用时,计费模型会遵守这些限制。

使用 Phlox-GW

创建 API 密钥

在自助服务面板中生成密钥,复制一次后将其存储在客户端的密钥库中。

测试网关端点

导出密钥:

export PHLOX_API_KEY="pgw-sk-<rest-of-your-api-key>"

使用与 OpenAI 兼容的聊天补全功能测试本地网关:

curl -Ns http://127.0.0.1:8080/v1/chat/completions \
  -H "Authorization: Bearer $PHLOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "local-ollama/glm-5.2:cloud",
    "messages": [{"role": "user", "content": "What is the capital of France?"}],
    "stream": false
  }'

通过转换后的端点发送类似 Anthropic 风格的消息:

curl -sS http://127.0.0.1:8080/anthropic/v1/messages \
  -H "x-api-key: $PHLOX_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "local-ollama/glm-5.2:cloud",
    "max_tokens": 64,
    "messages": [{ "role": "user", "content": "What is the capital of Texas?" }]
  }'|jq

将 Claude Code 与 Phlox-GW 结合使用

将 Claude Code(或类似工具)指向与 Anthropic 兼容的基址 URL 和网关密钥:

env \
  ANTHROPIC_BASE_URL="http://127.0.0.1:8080/anthropic" \
  ANTHROPIC_API_KEY="$PHLOX_API_KEY" \
  ANTHROPIC_MODEL="azure/gpt-5.5" \
  claude

协议转换功能使得基于 Anthropic 接口设计的客户端能够访问网关所路由到的上游服务。

查看使用情况

用户可刷新令牌消耗与支出相关的数据面板;使用量激增通常对应已知的批量任务或失控的智能体。

管理员如何监控使用情况与支出

管理员可通过舰队控制面板、部门汇总数据以及错误/延迟图表来监控情况。预算超支和速率限制触发属于重要的运营事件,而非单纯的表格数据异常。

安全规范——敏感信息遮蔽

启用可匹配敏感信息、个人标识符或内部主机名的模式。针对每种模式类型选择隐藏内容还是阻止访问。在正式应用于生产环境之前,先在测试环境中使用模拟样本进行验证。

日志记录与审计

请求日志记录

仅包含元数据的请求日志有助于事故响应和费用争议处理,且不会保留私密提示文本。

审计日志记录

配置和认证事件能够直接回答“昨天是谁更改了路由?”这一问题,无需深入查询应用程序日志。

总结

Phlox-GW 将费用争议处理、预算管理、速率限制、安全约束、审计追踪以及集群功能整合到一个开放的二进制文件中,并通过 OpenAI 和 Anthropic 的接口提供支持。评估阶段可使用 SQLite,而在对可用性要求较高的场景下则应切换到 Postgres 和 NLB;同时应将提供商凭证和政策集中存储,而非分散在各个笔记本电脑的配置文件中。

首次生产环境部署的操作检查清单:(1) 为每个设计模型定价,确保预算具有实际意义;(2) 在第一个发票周期开始前将用户分配到相应部门;(3) 从第一天起启用元数据请求日志并开展审计;(4) 在测试环境中用合成个人身份信息样本检测安全机制;(5) 在承诺高可用性之前,先部署由两节点Postgres支持的架构,并配置经过健康检查的负载均衡;(6) 明确记录Claude Code/SDK客户端应如何设置基础URL和密钥,防止未经授权的使用者通过原始提供商凭证绕过网关。在实际代理流量运行一周后重新评估RPM/TPM限制——初始设定的限制对于突发性的工具调用往往过于宽松,而对于交互式聊天则可能过于严格。需制定相应的操作手册,规定在不同时间点更换网关密钥和提供商机密信息,避免因一次泄露导致双重故障。最后,即使没有特殊要求也需定期按部门导出支出数据。

目前还没有人提出要求;等到出现第一张意外的账单后财务部门才会询问,而且如果标签设置正确的话,网关已经拥有相关数据。

当业务规模超出单个团队时,应将网关视为一个产品界面:制定版本路由策略,在服务提供商出现区域性故障时检查备用节点,并针对上游产生的429错误与网关设定的限制分开设置警报。对于上游的流量限制和本地策略上限,需要采取不同的应对措施——要么增加容量,要么对表现不佳的代理进行优化。应将Phlox-GW的指标与服务提供商的状态页面整合在同一监控界面中,这样操作人员就不会把实际上是模型区域故障导致的“网关延迟”误认为是其他问题。养成这些习惯后,网关就能始终作为控制平面存在,而不会变成另一个难以理解的代理节点。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性、在可能的情况下排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在变成Slack讨论帖之前就能被发现。

文档网关的SLO与其他边缘服务相同:/v1和/anthropic接口的可用性,尽可能排除上游模型处理时间后的p95延迟值,以及按部门划分的预算使用率。通过这三项指标,大多数“系统出问题”的反馈在演变成Slack讨论串之前就能被发现。