Launch HN: Respan (YC W24) —— 围绕插件构建的开源 Rust AI 网关
Respan 不走“把大量模型提供商和功能打包进一个网关”的路子,而是提供一个精简的核心和公开接口,让团队按自己应用的需要拼装 AI 基础设施。这样一来,用户可以把自建功能做成额外插件,而不用改动网关核心。
演示视频:https://www.youtube.com/watch?v=pVv2ibXiTXM
市面上的 LLM 网关多到数不清,它们大多解决同一个问题:用一个端点调用不同的模型提供商。可一旦要加新功能,难度就高得离谱。结果开发者往往只能再造一个网关,去解决某个具体问题。
从 2024 年起,我们一直基于 LiteLLM 构建网关,目前已经为数千家组织提供服务。每家组织需要的 API key 设置、路由和限额都不一样。为了支撑这些需求,我们不断在 LiteLLM 外面包一层、再加功能,有一段时间,包装代码超过了 10 万行。
今年 1 月,一次例行的 LiteLLM 升级引发了间歇性连接错误,我们只好回滚。原因至今没查清楚。从那以后,我们不再直接升级 LiteLLM,而是手动把上游修复补丁移植过来。这些经历让我们意识到,继续给 LiteLLM 打补丁不是能长期维持的方案,必须重新设计网关。
重新设计时,我们希望加功能变得更容易,同时不破坏已有功能。受 Nginx 启发,我们认为 AI 网关应该有一个非常小的核心,只负责分发事件。
我们认为,网关里的一切都应该是插件,包括提供商(OpenAI、Anthropic、Gemini)、协议(对话、实时语音、MCP)、模态(图像、视频),以及可靠性和安全相关的网关功能(智能路由、回退、通过示例插件实现的 PII 脱敏)。除此之外,我们希望开发者能轻松扩展网关能力:添加自己的插件,而不用改动核心。添加一个提供商——哪怕是你自己的——极其简单,因为各家 API 的特殊行为也是插件,没什么玄机。一个提供商就是一个很短的代码文件,Mistral 的只有 22 行;每一种特殊行为都有单独的测试,比如 Groq 把 token 用量放在自己的字段里。
Respan Gateway 能做的,不只是让你用 OpenAI SDK 调用 Claude 或 Gemini 模型。它会自动处理工具调用、图像和推理协议:基于 OpenAI Realtime API 的应用,通过这个网关也能用 Gemini Live,尽管并非所有功能都能一一对应。一个简单的聊天应用,可以直接使用网关里配置好的 MCP 工具,自己不用实现 MCP。
我们还会把请求解析成一套共享结构。当客户端和提供商使用同一套 API 时,我们会按原生格式保留提供商特有的字段,即使我们的共享结构里没有对应字段。这样网关就能把它们原样写回去,而不是丢掉。
具体流程是这样的:
适配器会把每个 HTTP 或 WebSocket 连接交给第一个能识别它的客户端格式。该格式把请求暴露为一条双向流,承载带类型的输入和输出事件。核心按注册顺序运行插件,插件可以选择提供商、过滤或包装任意一条流、发起额外调用、返回响应,或者拒绝请求。随后由提供商格式建立上游连接。
如果客户端和提供商使用同一格式,且没有插件改动请求内容,原始字节和协议特有字段就可以原样透传。格式不同时,则通过共享类型来翻译消息、工具调用、结果、流和用量。这套流模型既能表示一次性的 HTTP 请求,也能表示长连接的双向会话。
网关已开源,地址是 https://github.com/respanai/respan-gateway,采用 MIT 或 Apache-2.0 许可证。你不需要使用 Respan 的托管平台,可以直接在本地机器上运行。从源码构建,填入你的服务商密钥,再把支持的客户端里的 base URL 换掉即可。客户端原本使用的 API 保持不变。目前仍是 pre-alpha 阶段。
我们的收入来自托管平台(https://www.respan.ai/pricing),它帮你运行网关,原生提供可观测性和评估功能,以及统一计费。
如果你正在为智能体做路由、工具、过滤、可观测性或安全相关的东西,欢迎做成插件。仓库里的 PLUGINS.md 说明了怎么写插件,也链接了我们目前已经做好的插件。把它发展成一个生态基本就是我们的路线图,欢迎大家贡献自己的插件。有任何问题或反馈,我们都很乐意回应!
https://github.com/respanai/respan-gateway