>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
TypeScript

如何停止为神经网络编写适配器并掌控 Token 成本

最近,我在重写 Claude 集成到新版本客户端,突然想到了一些事情。有一天客户要求接入 GPT-4o,另一天又要求接入 Anthropic,一周后财务部门就会问测试费用中那几百美元的账单是怎么来的。每次我都得添加错误处理逻辑、管理密钥、手动计算 Token 费用。

这个重复性的工作可以通过 The Open Co 团队的 LLM Gateway 来解决。该项目作为一个统一的 API 网关,接收标准 OpenAI 格式的调用请求,并将其路由到相应的提供商。

一个请求,适配任意模型

核心概念很简单。你无需集成多个 SDK,只需向本地或云端网关发送一个 HTTP 请求。控制器会自动识别目标提供商、转换格式并返回响应。

目前支持的主流提供商包括:

  • OpenAI
  • Anthropic
  • Google Vertex AI
  • 其他具有兼容 API 的服务

以下是标准网关请求的样子:

curl -X POST https://api.llmgateway.io/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $LLM_GATEWAY_API_KEY" \
  -d '{
  "model": "gpt-4o",
  "messages": [
    {"role": "user", "content": "Hello, how are you?"}
  ]
}'

如果你需要切换到 Claude 3.5 Sonnet,应用程序中的 JSON 结构保持不变,只需更改请求体中的模型名称即可。

成本追踪和延迟指标

当多个服务或开发人员使用神经网络时,控制限额变得困难。有时候有人运行了一个包含错误提示词的脚本,形成无限循环,一小时内就烧掉了一个月的预算。

网关负责处理追踪工作。每笔交易都会保存到数据库,系统自动计算:

  • 输入和输出 Token 数量
  • 每次调用的总成本
  • 模型响应时间
  • 按密钥和项目汇总的总体统计

通过 Web 面板,你可以查看现成的图表,立即看出哪个具体模型消耗了大部分预算。

项目结构与 Docker 部署

作者使用 TypeScript 构建了一个 monorepo。底层使用了成熟可靠的技术:

  • Hono 处理 API 请求代理
  • Next.js 管理 Web 界面和 Playground
  • Drizzle ORMPostgreSQLRedis 数据库协作
  • TypeScript 确保组件的端到端类型安全

你可以通过 Docker 在几分钟内部署自己的服务。作者已经组装好了包含主要组件的现成镜像。

docker volume create llmgateway_postgres
docker volume create llmgateway_redis

docker run -d \
  --name llmgateway \
  --restart unless-stopped \
  -p 3002:3002 \
  -p 3003:3003 \
  -p 3005:3005 \
  -p 3006:3006 \
  -p 4001:4001 \
  -p 4002:4002 \
  -v llmgateway_postgres:/var/lib/postgresql/data \
  -v llmgateway_redis:/var/lib/redis \
  -e AUTH_SECRET="$(openssl rand -base64 32 | tr -d '\n')" \
  -e GATEWAY_API_KEY_HASH_SECRET="$(openssl rand -base64 32 | tr -d '\n')" \
  ghcr.io/theopenco/llmgateway-unified:latest

文档中的一个小细节:不要直接将主机上的文件夹挂载到 /var/lib/postgresql/data 中。由于容器中 PostgreSQL 权限初始化的特殊性,进程可能会崩溃。上面命令中的命名卷可以避免这个问题。

如果你想先不部署就体验系统,开发者提供了云端版本,地址是 llmgateway.io。

免费版限制

该仓库采用双许可证模式。主代码采用 AGPLv3 发行,但源代码中的某些文件夹属于 Enterprise 版本。

免费开源版本中,调用历史保留 30 天。如果你需要无限期的日志保留、高级用户计费或组织内的团队隔离,则需要购买商业许可证。

谁将从这个工具中受益

如果你的应用程序每天只向单个模型发起三次请求,就没有必要设置单独的代理。你只是在增加一个额外的故障点,并带来微不足道的网络延迟。

网关在以下场景中会大显身手:

  • 项目使用来自不同提供商的模型
  • 需要跨不同服务透明追踪 Token 成本
  • 需要在自有环境中部署代理
  • 计划在故障时快速切换到备用模型

你可以在 GitHub 上试用该项目。README 相当简洁,但即使没有冗长的说明文档,这个项目也很容易理解。

相关项目