Gavio:面向生产 LLM 应用的开源拦截器管道
一款跨 Python、Java、JavaScript 的开源 AI 网关,以可组合拦截器为 LLM 调用统一提供 PII…
Show HN 上出现了一款名为 Gavio 的开源项目,作者将其定位为「生产级 AI 网关的开放标准」。它位于应用与任意 LLM 服务商之间,通过一条可组合的拦截器链,把 PII 脱敏、密钥扫描、重试、限流、缓存、成本追踪、审计日志等常见生产诉求一次性封装好,并声称在 Python、Java、JavaScript 三套 SDK 中保持行为一致。
核心定位与特性
Gavio 试图解决的是团队在接入 LLM 时反复「重造轮子」的问题:出站前脱敏 PII、遇 429 限流时重试、主服务商不可用时回退到备选、记录审计轨迹、控制调用成本。官方文档将这些能力拆成可插拔的拦截器(Interceptor),按需组合即可。
其主要特性包括:
- 服务商无关:支持 OpenAI、Anthropic、Gemini、Azure、Ollama 以及 Mock 适配器,切换服务商只需修改配置。
- 零强制依赖:核心使用标准库 HTTP,不引入任何厂商 SDK。
- 开发模式:内置 Mock 服务商,无需 API Key、无需联网即可在本地运行整条流水线。
- 审计默认开启:每次调用都生成元数据 + SHA-256 内容哈希记录,原始文本永不落盘。
- Inspector 可视化:开发态提供实时链路追踪、逐拦截器瀑布图、PII 脱敏 diff 与流水线检查,监听本地 7411 端口。
- 生产态能力:多智能体调用图、会话视图、轨迹回放与改写重发、RED 指标、哈希链校验、PII 清洗后的轨迹导出为测试用例。
项目当前版本为 v0.9.0,自 v0.2.0 起保持 Semver 稳定性,1.0 之前部分 API 仍可能调整。
架构与数据模型
Gavio 由薄核心(Gateway + InterceptorChain + 请求/响应模型)构成。一次请求依次流经「预处理」管道、命中 Provider Adapter,再逆向流过「后处理」管道。拦截器需实现 before() / after() / onError() 三个钩子,顺序由开发者显式声明,例如 PII 脱敏必须在审计之前,审计必须最后执行,以保证记录到的是其他拦截器全部生效后的真实结果。
执行策略(缓存、重试、熔断、负载均衡、回退)包裹在 Provider Adapter 之外:缓存命中或熔断器开启时,请求会完全短路,不再访问服务商。
审计记录只保存元数据:提示词与响应以 SHA-256 哈希形式存储,仅记录 PII 实体类型与计数,不记录原始值;记录之间通过哈希链(编号 F-OBS-02)串联,任何篡改都可被检测。核心数据模型(GavioRequest / GavioResponse / AuditRecord)由 spec/ 中的 JSON Schema 统一定义,三语言共享测试向量强制对齐。
快速上手
以 Python 开发模式为例,启用 PiiGuard 后向包含邮箱地址的提示词发起请求,输出会保留原始邮箱,同时审计记录中可见 EMAIL 实体被识别并脱敏的痕迹。JavaScript 与 Java 用法结构对称,仅 API 风格随语言习惯不同。
安装命令如下:
- Python 3.10+:
pip install gavio,可选gavio[redis]提供分布式缓存后端,gavio[presidio]等增强将在后续版本加入。 - JavaScript(Node 18+):
npm install gavio。 - Java 17+(Maven):
io.github.manojmallick:gavio-core:0.9.0。
项目状态与适用场景
Gavio 以 monorepo 形式组织,三个 SDK 版本号同步锁定,分别发布到 PyPI、npm 与 Maven Central,互不耦合。对于需要在多个语言栈中保持一致的 LLM 调用治理、或希望在合规与可观测性上「开箱即用」的团队,它提供了一个低门槛的尝试入口;但作为 v0.9.x 的早期项目,是否能进入生产关键链路,仍需观察其在真实负载下的稳定性与社区维护节奏。
