<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Gemini CLI on KnightLi的博客</title>
        <link>https://knightli.com/tags/gemini-cli/</link>
        <description>Recent content in Gemini CLI on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Sun, 24 May 2026 10:03:33 +0800</lastBuildDate><atom:link href="https://knightli.com/tags/gemini-cli/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>CLIProxyAPI：把 Codex、Claude Code、Gemini CLI 统一封装成 API</title>
        <link>https://knightli.com/2026/05/24/cliproxyapi-cli-to-api-gateway/</link>
        <pubDate>Sun, 24 May 2026 10:03:33 +0800</pubDate>
        
        <guid>https://knightli.com/2026/05/24/cliproxyapi-cli-to-api-gateway/</guid>
        <description>&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/router-for-me/CLIProxyAPI&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CLIProxyAPI&lt;/a&gt; 是一个很有“民间工程味”的项目：它不是再造一个大模型，也不是单纯做 API 转发，而是把一堆原本偏交互式、偏 CLI、偏 OAuth 登录的 AI 工具，重新包成统一 API 服务。&lt;/p&gt;
&lt;p&gt;它支持的对象包括 Gemini CLI、OpenAI Codex、Claude Code、Amp CLI、AI Studio Build，以及上游 OpenAI 兼容服务。换句话说，它想解决的问题是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我手上有 CLI 工具、有订阅账号、有 OAuth 登录态，能不能像调用普通 API 一样，把这些能力接到自己的客户端、脚本、IDE 或内部服务里？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;CLIProxyAPI 给出的答案是：可以，中间加一层代理，把不同来源的 CLI 能力转换成 OpenAI、Gemini、Claude、Codex 兼容接口。&lt;/p&gt;
&lt;h2 id=&#34;它真正解决的痛点&#34;&gt;它真正解决的痛点
&lt;/h2&gt;&lt;p&gt;很多 AI 编程工具的能力本来很强，但默认使用方式并不适合自动化。&lt;/p&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gemini CLI 能登录账号使用，但你的程序更习惯调用 HTTP API。&lt;/li&gt;
&lt;li&gt;Claude Code 很适合交互式编码，但接入其他客户端时会遇到协议不一致。&lt;/li&gt;
&lt;li&gt;Codex CLI 支持 OAuth 登录和 Responses 风格能力，但不是所有上层工具都知道怎么和它说话。&lt;/li&gt;
&lt;li&gt;一个团队可能有多个账号，需要轮询、负载均衡、异常账号剔除和配额观察。&lt;/li&gt;
&lt;li&gt;你想让某些工具只认 OpenAI 格式，但后端实际可能是 Gemini、Claude 或 Codex。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CLIProxyAPI 的定位，就是做这些工具和客户端之间的“协议适配层”。&lt;/p&gt;
&lt;p&gt;它把复杂的一侧藏在后面：OAuth、CLI 登录、多账号、不同协议、不同 provider。前面则暴露相对熟悉的接口，比如 OpenAI Chat Completions、OpenAI Responses、Gemini、Claude Messages、Codex 相关端点。&lt;/p&gt;
&lt;h2 id=&#34;能力概览&#34;&gt;能力概览
&lt;/h2&gt;&lt;p&gt;从官方 README 和文档看，CLIProxyAPI 目前的核心能力包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;为 CLI 模型提供 OpenAI、Gemini、Claude、Codex 兼容 API 端点。&lt;/li&gt;
&lt;li&gt;通过 OAuth 登录接入 OpenAI Codex 和 Claude Code。&lt;/li&gt;
&lt;li&gt;支持流式、非流式响应，以及部分场景下的 WebSocket。&lt;/li&gt;
&lt;li&gt;支持函数调用、工具调用和多模态输入。&lt;/li&gt;
&lt;li&gt;支持 Gemini、OpenAI、Claude 多账号轮询与负载均衡。&lt;/li&gt;
&lt;li&gt;支持 Gemini AI Studio API Key。&lt;/li&gt;
&lt;li&gt;支持 AI Studio Build、Gemini CLI、Claude Code、OpenAI Codex 的多账号池。&lt;/li&gt;
&lt;li&gt;可以通过配置接入 OpenAI 兼容上游，比如 OpenRouter。&lt;/li&gt;
&lt;li&gt;提供 Go SDK，方便把代理能力嵌入到自己的服务里。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这类项目最有价值的地方，不是“多支持几个模型名”，而是把账号登录、协议转换和请求路由这些琐碎工作打包起来。&lt;/p&gt;
&lt;h2 id=&#34;它适合谁用&#34;&gt;它适合谁用
&lt;/h2&gt;&lt;p&gt;CLIProxyAPI 更适合下面几类人：&lt;/p&gt;
&lt;p&gt;第一类是重度 AI 编程用户。你已经在用 Codex、Claude Code、Gemini CLI，但想把它们接到 Cursor、Cline、RooCode、Amp、内部脚本或自建工作流里。&lt;/p&gt;
&lt;p&gt;第二类是有多账号池的人。比如你有多个 Gemini、OpenAI、Claude 登录态，不想手工切换，希望自动轮询、均衡使用、遇到异常账号时能快速排查。&lt;/p&gt;
&lt;p&gt;第三类是做团队内部网关的人。团队不希望每个客户端都分别适配 Gemini、Claude、Codex，而是想通过一个中间层统一暴露 API。&lt;/p&gt;
&lt;p&gt;第四类是喜欢折腾协议的人。你可能关心 Responses、Chat Completions、Claude Messages、Gemini v1beta 这些接口如何互相转换，也可能希望在同一套客户端里切换不同后端。&lt;/p&gt;
&lt;p&gt;如果只是个人偶尔问几句 AI，或者只用官方 App 聊天，那 CLIProxyAPI 的部署和维护成本就显得重了。&lt;/p&gt;
&lt;h2 id=&#34;和普通-api-中转有什么不同&#34;&gt;和普通 API 中转有什么不同
&lt;/h2&gt;&lt;p&gt;普通 API 中转服务一般是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;客户端 -&amp;gt; 中转 API -&amp;gt; 上游模型 API
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;CLIProxyAPI 的链路更像：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;客户端 -&amp;gt; CLIProxyAPI -&amp;gt; CLI / OAuth 登录态 / 多账号池 -&amp;gt; 模型服务
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;区别在于，它处理的不只是 API Key 转发，还包括 CLI 工具、OAuth 账号、协议表面和模型别名。&lt;/p&gt;
&lt;p&gt;比如 Codex 和 Claude Code 这类工具，本身就不是传统意义上“拿一个 API Key 就能稳定调用”的模式。CLIProxyAPI 把这些登录态和调用逻辑包装起来，让外部客户端像调用 API 一样访问它们。&lt;/p&gt;
&lt;p&gt;这也是它吸引人的地方，同时也是它复杂的地方。&lt;/p&gt;
&lt;h2 id=&#34;使用时最容易误解的地方&#34;&gt;使用时最容易误解的地方
&lt;/h2&gt;&lt;p&gt;第一，不要以为统一 &lt;code&gt;/v1/...&lt;/code&gt; 就能解决所有协议差异。&lt;/p&gt;
&lt;p&gt;CLIProxyAPI 文档里专门提醒过：当你需要某一类后端的请求和响应形态时，优先使用 provider-specific 路径。例如 messages 风格用 &lt;code&gt;/api/provider/{provider}/v1/messages&lt;/code&gt;，Gemini 模型路径用 &lt;code&gt;/api/provider/{provider}/v1beta/models/...&lt;/code&gt;，chat-completions 风格用 &lt;code&gt;/api/provider/{provider}/v1/chat/completions&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;统一入口方便，但不同协议的语义并不会凭空消失。工具调用、流式返回、多模态输入、系统消息处理，都可能因为后端不同而有细节差异。&lt;/p&gt;
&lt;p&gt;第二，模型名不等于唯一后端。&lt;/p&gt;
&lt;p&gt;如果多个后端暴露了相同的客户端可见模型名，仅靠路径不一定能锁定真正执行推理的那个后端。要严格固定后端，最好使用唯一 alias、前缀，或者避免让多个后端暴露同名模型。&lt;/p&gt;
&lt;p&gt;第三，多账号轮询不是无限额度。&lt;/p&gt;
&lt;p&gt;轮询只能更均匀地使用账号池，不能绕过上游服务的真实限制。账号异常、配额耗尽、风控、OAuth 失效，都需要单独监控。&lt;/p&gt;
&lt;p&gt;第四，它不是免维护魔法盒。&lt;/p&gt;
&lt;p&gt;一旦你把它放进日常工作流，就要关心配置、日志、上游账号状态、版本升级、客户端兼容性和安全边界。&lt;/p&gt;
&lt;h2 id=&#34;管理和监控怎么办&#34;&gt;管理和监控怎么办
&lt;/h2&gt;&lt;p&gt;官方 README 提到，从 v6.10.0 开始，CLIProxyAPI 和 CPAMC 不再预置数据统计功能。如果需要使用量统计，可以配合独立项目：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPA Usage Keeper：同步 CLIProxyAPI 数据，存到 SQLite，并提供聚合 API 和仪表盘。&lt;/li&gt;
&lt;li&gt;CLIProxyAPI Usage Dashboard：本地优先的用量与配额看板，可展示账号、模型、时间窗口和 Codex 配额余量。&lt;/li&gt;
&lt;li&gt;CPA-Manager：更完整的管理中心，面向请求监控、费用估算、账号池巡检、异常账号定位和清理建议。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这说明 CLIProxyAPI 的核心更偏“代理和协议层”，而不是一站式商业管理后台。如果是团队使用，最好一开始就把日志、监控和账号池管理考虑进去。&lt;/p&gt;
&lt;h2 id=&#34;一个比较合理的使用姿势&#34;&gt;一个比较合理的使用姿势
&lt;/h2&gt;&lt;p&gt;如果要试用，可以按这个顺序来：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先用官方文档的 Quick Start 跑起来。&lt;/li&gt;
&lt;li&gt;只接一个 provider，比如 Gemini CLI 或 Codex，确认基本请求能通。&lt;/li&gt;
&lt;li&gt;再测试流式响应、工具调用、多模态输入这些高风险能力。&lt;/li&gt;
&lt;li&gt;确认客户端实际使用的是哪个 endpoint，不要混用协议路径。&lt;/li&gt;
&lt;li&gt;最后再加入多账号轮询、管理面板和用量统计。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不要一上来就把 Gemini、Codex、Claude、OpenRouter、多账号和所有客户端全接进去。这样出错时很难判断是认证问题、协议问题、模型名问题，还是上游账号问题。&lt;/p&gt;
&lt;h2 id=&#34;安全边界也要想清楚&#34;&gt;安全边界也要想清楚
&lt;/h2&gt;&lt;p&gt;CLIProxyAPI 会接触到账号登录态、API Key、OAuth 相关凭据和请求内容。它如果只跑在自己机器上，风险相对可控；如果暴露到公网或团队内网，就必须认真处理认证、访问控制、日志脱敏和网络隔离。&lt;/p&gt;
&lt;p&gt;尤其是管理端点，最好只允许本机或可信内网访问。不要为了省事直接把管理接口裸露出去。&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结
&lt;/h2&gt;&lt;p&gt;CLIProxyAPI 的价值在于，它把原本散落在多个 CLI、多个账号、多个协议里的 AI 能力，收拢成一个可编程的 API 层。&lt;/p&gt;
&lt;p&gt;它适合重度 AI 编程用户、多账号用户和团队内部网关场景；不太适合只想“开箱即用、完全无维护”的轻量用户。&lt;/p&gt;
&lt;p&gt;如果你正在折腾 Codex、Claude Code、Gemini CLI 这些工具，并且希望把它们接进自己的客户端或自动化工作流里，CLIProxyAPI 值得认真看一眼。但要把它当基础设施来用，而不是当一次性小工具来用。&lt;/p&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/router-for-me/CLIProxyAPI&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;router-for-me/CLIProxyAPI GitHub 仓库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/router-for-me/CLIProxyAPI/blob/main/README_CN.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CLIProxyAPI 中文 README&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://help.router-for.me/cn/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CLIProxyAPI 官方文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
