<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Infrastructure on Hypho - AI Agent 技术博客</title><link>https://blog.hypho.cn/tags/infrastructure/</link><description>Recent content in Infrastructure on Hypho - AI Agent 技术博客</description><image><title>Hypho - AI Agent 技术博客</title><url>https://blog.hypho.cn/papermod-cover.png</url><link>https://blog.hypho.cn/papermod-cover.png</link></image><generator>Hugo -- 0.148.2</generator><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 10:10:00 +0800</lastBuildDate><atom:link href="https://blog.hypho.cn/tags/infrastructure/index.xml" rel="self" type="application/rss+xml"/><item><title>GoModel：一个人用 Go 写的高性能 AI 网关，511 Stars，LiteLLM 的替代方案</title><link>https://blog.hypho.cn/posts/gomodel-ai-gateway-go/</link><pubDate>Thu, 23 Apr 2026 10:10:00 +0800</pubDate><guid>https://blog.hypho.cn/posts/gomodel-ai-gateway-go/</guid><description>一个华沙的独立开发者用 4 个月时间写了一个 AI 网关项目 GoModel，支持 11 家模型供应商、语义缓存和 Guardrails，GitHub 获 511 Stars。本文解析它的架构设计和实用价值。</description><content:encoded><![CDATA[<p>如果你在生产环境里接入了两个以上的 LLM 提供商（OpenAI、Anthropic、Gemini、Groq……），大概率已经踩过这些坑：供应商的 API 格式不统一、重试逻辑要写 N 份、想把 Claude 和 GPT 的调用日志合并看也做不到、换个供应商代码要改一大坨。</p>
<p>这就是 AI Gateway 存在的意义——在你和所有模型供应商之间加一层抽象，对外暴露统一的 OpenAI 兼容 API，你改供应商只需要改配置，不用动业务代码。</p>
<p>这个赛道最知名的是 <a href="https://github.com/BerriAI/litellm">LiteLLM</a>（Python），今天要聊的是一个用 Go 写的竞争方案——<strong>GoModel</strong>，4 个月时间，511 Stars，GitHub 最后一次提交就在昨天。</p>
<h2 id="背景多供应商困境">背景：多供应商困境</h2>
<p>先说个真实的场景。</p>
<p>你做 AI 产品，接入了 GPT-4o 做主力、Claude Sonnet 做复杂推理、Gemini 2.5 Flash 做快速摘要。三个供应商，三套 SDK，三套错误处理，三套重试策略，三套计费逻辑。然后产品经理说：「能不能把这个月各模型 token 消耗做个报表？」</p>
<p>你翻了三天日志，发现各家日志格式完全不一样，计量单位都不统一。这就是为什么需要一个 AI Gateway——它把所有调用收敛到一个统一的接口，同时帮你把日志、计费、缓存这些事情做好。</p>
<p>LiteLLM 是这个方向最成熟的开源方案，但它是 Python 写的，GIL 限制了并发能力，而且配置相对复杂。</p>
<h2 id="gomodel-是什么">GoModel 是什么</h2>
<p><a href="https://github.com/ENTERPILOT/GOModel/">GoModel</a> 是来自波兰华沙的独立开发者 Jakub（GitHub @santiago-pl）的作品，2024 年 12 月开始开发，定位是<strong>高性能 AI Gateway</strong>，用 Go 编写，对外暴露完整的 OpenAI 兼容 API。</p>
<p>核心特性：</p>
<ul>
<li><strong>11 家供应商支持</strong>：OpenAI、Anthropic、Google Gemini、xAI Grok、OpenRouter、Z.ai、Azure OpenAI、Oracle Cloud AI、Ollama、vLLM</li>
<li><strong>OpenAI 兼容端点全覆盖</strong>：<code>/v1/chat/completions</code>、<code>/v1/embeddings</code>、<code>/v1/files</code>、<code>/v1/batches</code></li>
<li><strong>双层响应缓存</strong>：精确匹配缓存 + 语义缓存（基于向量相似度），官方案例中语义缓存将命中率从 18% 提升到 60-70%</li>
<li><strong>Guardrails</strong>：可配置的请求/响应过滤管道</li>
<li><strong>Provider Passthrough</strong>：原生端点透传（<code>/p/{provider}/...</code>），绕过网关直接访问供应商特性</li>
<li><strong>Admin API</strong>：用量统计、Token 消耗追踪、审计日志</li>
</ul>
<p>说白了就是：LiteLLM 能做的 GoModel 基本都能做，但用 Go 写的，高并发下性能更好，内存占用地更低。</p>
<h2 id="技术设计亮点">技术设计亮点</h2>
<h3 id="语义缓存的两层架构">语义缓存的两层架构</h3>
<p>让我展开说说缓存这块，因为它解决的是一个真实痛点。</p>
<p>Layer 1 是精确匹配缓存，Hash 请求体（包括 path、workflow 和 body），字节相同就直接返回缓存结果，延迟在亚毫秒级。但它的局限性也很明显——只有完全相同的请求才能命中。</p>
<p>Layer 2 是语义缓存，把用户最后一条消息用 Embedding 模型向量化，然后在向量数据库里做 KNN 相似度搜索。&ldquo;法国的首都是什么&quot;和&quot;法国首都城市是哪个&quot;语义等价，能命中同一缓存。官方数据是预期命中率达到 60-70%，相比精确匹配的 18% 提升显著。</p>
<p>支持的向量后端包括 Qdrant、Pgvector、Pinecone 和 Weaviate，配置一个 <code>config.yaml</code> 即可切换。</p>
<h3 id="响应式-provider-注册">响应式 Provider 注册</h3>
<p>大多数网关需要你在配置文件里写清楚要用哪些模型，GoModel 的设计更灵活——只需要提供供应商的 API Key，运行时自动从供应商拉取模型列表，注册到网关里。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker run --rm -p 8080:8080 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -e <span class="nv">OPENAI_API_KEY</span><span class="o">=</span><span class="s2">&#34;sk-***&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -e <span class="nv">ANTHROPIC_API_KEY</span><span class="o">=</span><span class="s2">&#34;sk-ant-***&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -e <span class="nv">GEMINI_API_KEY</span><span class="o">=</span><span class="s2">&#34;***&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  enterpilot/gomodel
</span></span></code></pre></div><p>模型注册是动态的，不需要重启服务。如果你有多个 OpenAI 兼容的 endpoint（比如一个给 GPT-4o，一个给某开源模型），可以用 <code>OPENAI_EAST_API_KEY</code> + <code>OPENAI_EAST_BASE_URL</code> 这样带后缀的环境变量注册多个同名类型供应商。</p>
<h3 id="guardrails-实用场景">Guardrails 实用场景</h3>
<p>Guardrails 在 AI Gateway 语境里通常指内容安全过滤。GoModel 支持在请求到达模型之前和响应回到客户端之前各加一道过滤。</p>
<p>典型使用场景：你在做一个客服 AI，用户输入可能包含 prompt injection 攻击，Guardrails 可以自动检测并拒绝请求，而不是让恶意指令被当作正常 prompt 发给模型。</p>
<h3 id="admin-api-的计量价值">Admin API 的计量价值</h3>
<p>这个对 B 端场景很关键——你把 API 租给不同客户使用时，需要知道每个客户消耗了多少 token。GoModel 的 <code>/admin/api/v1/usage/summary</code> 和 <code>/admin/api/v1/usage/daily</code> 提供了开箱即用的计量接口，不用自己接 DataDog 或者自己写日志分析。</p>
<h2 id="实际部署体验">实际部署体验</h2>
<p>Docker 部署一条命令起服务：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker run --rm -p 8080:8080 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -e <span class="nv">LOGGING_ENABLED</span><span class="o">=</span><span class="nb">true</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -e <span class="nv">LOGGING_LOG_BODIES</span><span class="o">=</span><span class="nb">true</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -e <span class="nv">OPENAI_API_KEY</span><span class="o">=</span><span class="s2">&#34;sk-***&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  enterpilot/gomodel
</span></span></code></pre></div><p>注意文档里特意提到<strong>不要在命令行直接写 API Key</strong>（<code>docker run -e KEY=xxx</code> 会让密钥出现在进程列表里），生产环境建议用 <code>--env-file .env</code> 从文件加载。</p>
<p>健康检查和 Prometheus metrics 都有， <code>/metrics</code> 端点直接对 Prometheus 暴露，配合 Grafana 五分钟能搭出一个用量监控面板。</p>
<p>生产级存储支持 SQLite（默认）、PostgreSQL 和 MongoDB。</p>
<h2 id="局限性也要说清楚">局限性也要说清楚</h2>
<p>GoModel 目前 Star 511，和 LiteLLM 的 2.2 万+不在一个量级上。LiteLLM 背后有商业公司，社区活跃度高，文档更完善，踩坑了容易找到解决方案。GoModel 是一个个人项目，开发者 Jakub 是 solo founder，虽然 GitHub 提交很活跃，但长期维护的持续性是一个需要考量的因素。</p>
<p>另一个是 Guardrails 功能还在完善中（ Roadmap 里写的是 &ldquo;hardening: better UI, simpler architecture, easier custom guardrails&rdquo;），如果你对内容安全有强监管合规要求，建议先做 PoC 验证。</p>
<h2 id="什么场景选-gomodel">什么场景选 GoModel</h2>
<p><strong>适合的场景：</strong></p>
<ul>
<li>已经在用或计划用多个 LLM 供应商，想统一管理</li>
<li>Go 技术栈的生产环境，不想引入 Python 服务</li>
<li>对并发性能有要求（Go 的并发模型天然优于 Python GIL 限制）</li>
<li>需要语义缓存来降低 token 成本</li>
</ul>
<p><strong>可能不适合的场景：</strong></p>
<ul>
<li>只需要单一模型供应商，直接调用 SDK 更简单</li>
<li>需要企业级 SLA 支持和文档（LiteLLM 生态更成熟）</li>
<li>对 Guardrails 有强合规要求（等 0.2.0 完善后再评估）</li>
</ul>
<p>坦白说，这个项目让我想起早期 Tailscale——也是一个独立开发者做出一个方向对、体验好的工具，然后靠社区口碑传播。能不能成气候不好说，但作为基础设施它已经是一个可用的生产级选择。</p>
<p>如果你正在评估 AI Gateway，可以花半小时跑一下 <a href="https://github.com/ENTERPILOT/GOModel/">Quick Start</a>，感受一下配置逻辑和 API 体验，比读文档更直观。</p>
<hr>
<p><strong>信源：</strong></p>
<ul>
<li>GoModel GitHub: <a href="https://github.com/ENTERPILOT/GOModel/">https://github.com/ENTERPILOT/GOModel/</a></li>
<li>GoModel 官方文档: <a href="https://gomodel.enterpilot.io/docs">https://gomodel.enterpilot.io/docs</a></li>
<li>GoModel HN Show HN: <a href="https://news.ycombinator.com/item?id=47849097">https://news.ycombinator.com/item?id=47849097</a></li>
<li>LiteLLM GitHub (对比参考): <a href="https://github.com/BerriAI/litellm">https://github.com/BerriAI/litellm</a></li>
</ul>
]]></content:encoded></item></channel></rss>