我构建了一个 Serverless OpenAI Gateway,以降低 30% 成本并清理 PII(开源)
Source: Dev.to
如果你在构建 LLM 包装器或内部工具,可能已经注意到两件事在蚕食你的利润(以及你的睡眠):
- 冗余的 API 成本 – 用户会重复提问相同的问题,导致你一次又一次为相同的 token 向 OpenAI 付费。
- 合规焦虑 – 用户可能会把客户的姓名、邮箱或税号粘贴到你的聊天机器人中,而这些信息随后会被发送到第三方服务器(OpenAI、DeepSeek 等)。
大多数现有方案要么是笨重的企业网关(Java/Docker),要么是昂贵的 SaaS 产品。我决定打造一个轻量级、无服务器的替代方案,完全在 Cloudflare Workers 的 Edge 上运行。
解决方案概览
Sanitiza.AI 是一个开源网关,缓存请求 并在离开你的网络前 清除 PII。目标是零 DevOps:不需要 Docker 容器,不需要 Redis 实例——仅仅是纯粹的无服务器函数。
运行时与技术栈
| 组件 | 选择 |
|---|---|
| 运行时 | Cloudflare Workers(TypeScript) |
| 框架 | Hono(轻量级 Web 框架,类似 Express) |
| 存储 | Cloudflare KV(用于缓存的键值存储) |
| 哈希 | 原生 Web Crypto API(SHA‑256) |
智能缓存(用于 RAG 应用)
在检索增强生成(RAG)工作负载中,冗余请求非常常见。网关会对请求体(prompt + system 指令)生成 SHA‑256 哈希,并将其用作缓存键。
// Generate a unique fingerprint for the request
async function generateHash(message: string): Promise {
const msgBuffer = new TextEncoder().encode(message);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
缓存流程
| 结果 | 操作 | 成本 |
|---|---|---|
| 命中 | 立即返回已存储的 JSON( 实时计算器:请查看仓库中的演示。) |
Edge 上的性能
| 指标 | 数值 |
|---|---|
| 冷启动 | ~0 ms(几乎瞬时) |
| 缓存响应时间 |
它兼容 OpenAI、DeepSeek、Groq 以及其他任何兼容的 API。
贡献
我正在寻找贡献者来实现 语义缓存(使用 Cloudflare Vectorize),以捕获相似但不完全相同的提示。如果你有 Rust/WASM 或向量数据库的经验,欢迎交流!
如果你觉得这个项目有用,请给仓库点个 ⭐——这对我们帮助很大!