AIClient-2-API:五分钟搭建OpenAI兼容网关,免费接入Gemini/Grok等多模型

发布时间:2026/7/4 12:53:20
AIClient-2-API:五分钟搭建OpenAI兼容网关,免费接入Gemini/Grok等多模型 1. 项目概述从“客户端专属”到“开放API”的桥梁最近在折腾各种AI应用和工具时一个绕不开的痛点就是很多强大的AI模型比如Google的Gemini、xAI的Grok它们最稳定、最“原生”的访问方式往往是通过其官方客户端。这些客户端通常提供了OAuth授权、流式响应、多模态支持等完整功能体验很好。但对于我们开发者来说想把它们集成到自己的项目里比如用NextChat做个聊天界面或者用Cherry-Studio搞个自动化工作流就非常麻烦了。官方要么不提供公开API要么API有严格的速率限制和配额用起来束手束脚。“AIClient-2-API”简称A2这个项目就是来解决这个核心矛盾的。它本质上是一个高度智能的API代理和协议转换网关。它的目标很明确把那些原本只能在特定客户端里用的、基于OAuth或其他私有协议的AI模型服务“翻译”成标准的、开放的OpenAI兼容API。这样一来任何支持OpenAI API的应用和框架都能无缝接入这些原本封闭的模型而且还能享受客户端级别的稳定性和功能。我花了几天时间深度部署和测试了这个工具它给我的感觉不像是一个简单的“爬虫”或“逆向工程”脚本而更像一个企业级的中间件。它内置了账号池管理、智能路由、故障转移、TLS指纹绕过等一整套保障高可用的机制。对于个人开发者、小团队甚至是需要低成本接入多模型的中型项目来说这玩意儿能省下大量的时间和金钱成本。接下来我就结合我的实操经验带你彻底搞懂它并手把手实现5分钟快速接入。2. 核心设计思路与架构拆解在开始动手之前理解A2的设计哲学至关重要这能帮你避开很多使用上的坑。它的核心思路可以概括为协议转换、统一入口、智能调度。2.1 协议转换打破生态壁垒目前主流AI模型的接口协议可谓“诸侯割据”OpenAI协议/v1/chat/completions 事实上的行业标准生态最丰富。Claude协议Anthropic自家的/v1/messages 消息结构略有不同。Gemini协议Google的REST API 参数和响应格式自成一体。私有/客户端协议如Gemini CLI、Grok CLI、Codex OAuth等通过命令行工具或桌面应用交互没有公开的HTTP端点。A2的基石就是针对这些私有协议实现了“客户端模拟”。它并不是去破解加密而是完整地模拟了官方客户端的认证OAuth、网络请求包括TLS握手特征和通信流程。对于每一类客户端如gemini-cli-oauthA2内部都有一个对应的“适配器”Adapter。这个适配器知道如何获取OAuth令牌、如何构造符合该客户端预期的HTTP请求、如何解析其返回的数据。更厉害的是它不止于“模拟”还做到了“翻译”。当外部应用通过标准的OpenAI API格式比如发送一个/v1/chat/completions请求调用A2时A2会根据你配置的“路由”将请求智能地分发给对应的适配器。适配器收到后会将OpenAI格式的请求体包括messages、model等参数实时转换成目标客户端协议能理解的格式发送出去拿到客户端的响应后再反向转换成OpenAI格式的流式或非流式数据返回给调用方。这个过程对调用者是完全透明的。你的NextChat只需要配置一个OpenAI兼容的Base URL即A2的服务地址它就会以为自己一直在和OpenAI对话但实际上背后可能是Gemini Pro或Claude Opus在干活。2.2 统一入口与智能调度从单点到高可用如果只是简单的协议转换那一个脚本也能搞定。A2的工业级价值体现在它的调度层。它抽象出了一个“提供商类型”Provider Type的概念例如gemini-cli-oauth、claude-kiro-oauth、grok-web。每个类型下你可以配置多个账号即多个OAuth凭据文件形成一个“账号池”。A2的服务内部有一个智能调度器它负责健康检查定期用一个小请求如获取模型列表测试池子里的每个账号是否存活、令牌是否有效。负载均衡与轮询当有请求进来时从健康的账号池中按策略如轮询选取一个来使用。这直接解决了免费账号普遍存在的“每分钟请求数”RPM或“每日配额”限制。一个账号触发限流返回429错误后调度器会将其标记为“不健康”并自动切换到池子里的下一个账号。故障转移与降级这是高级功能。你可以在配置中定义一条“降级链”。例如当所有gemini-cli-oauth的账号都不可用时可以自动降级到gemini-antigravity另一个Gemini来源。这极大地提升了服务的整体可用性SLA。模型过滤某些免费账号可能无法访问所有模型如无法调用gemini-2.0-flash-exp。你可以在账号配置中声明它不支持的模型列表调度器在选择账号时会自动避开防止请求失败。这种架构使得A2从一个脆弱的单点工具变成了一个弹性、可扩展的AI网关。对于需要稳定服务的生产级辅助应用这个特性是至关重要的。3. 五分钟快速部署与初体验理论讲完我们直接上手。最快的方式是使用Docker这能避免各种环境依赖问题。假设你已经在电脑上安装好了Docker和Docker Compose。3.1 一键启动服务首先创建一个工作目录并进入mkdir aiclient2api cd aiclient2api然后创建一个docker-compose.yml文件内容如下version: 3.8 services: aiclient2api: image: justlikemaki/aiclient-2-api:latest container_name: aiclient2api restart: unless-stopped ports: - 3000:3000 # Web管理界面 - 8085:8085 # Gemini OAuth回调 - 8086:8086 # Antigravity OAuth回调 - 1455:1455 # Codex OAuth回调 - 56121:56121 # Grok CLI OAuth回调 - 19876-19880:19876-19880 # Kiro OAuth回调范围 volumes: - ./configs:/app/configs # 配置目录 - ./plugins:/app/src/plugins-user # 自定义插件目录可选 environment: - NODE_ENVproduction这里映射了多个端口。3000是我们要用的Web界面和API端口其他端口是给不同服务的OAuth授权回调用的必须映射否则授权无法完成。启动服务docker-compose up -d用docker logs aiclient2api -f查看日志看到服务器启动成功的提示即可。3.2 配置第一个AI模型以Gemini为例现在打开浏览器访问http://localhost:3000。你会看到一个登录界面默认密码是admin123。强烈建议登录后第一件事就是在“系统设置”里修改这个密码。登录后的主界面就是仪表盘这里我们直奔主题配置一个可用的模型。进入配置管理在左侧菜单找到“配置管理”。配置Gemini在配置页面找到“Gemini CLI OAuth”部分。你会看到一个“生成授权”的按钮。点击它。完成OAuth授权系统会弹出一个对话框并显示一个本地URL如http://localhost:8085/auth。点击“在浏览器中打开”这会跳转到Google的账号授权页面。请使用你希望用来访问Gemini的Google账号登录并授权。授权成功后页面会提示“授权成功请关闭此窗口”。验证与启用回到A2的Web界面刷新一下“配置文件”页面。你应该能看到多了一个oauth_creds.json之类的文件这说明授权凭据已经自动保存到容器内的/app/configs目录并映射到了你本地的./configs文件夹下。同时在“提供商池”页面gemini-cli-oauth这个提供商的状态应该会变成“健康”绿色。实操心得第一次授权可能会失败通常是端口冲突或浏览器缓存问题。如果失败检查Docker日志确认OAuth回调端口8085是否被其他程序占用。最简单的方法是重启Docker容器并用浏览器的无痕模式重试授权流程。3.3 测试你的AI网关现在你的本地已经运行起了一个OpenAI兼容的API服务背后连接的是Google Gemini。我们来用最简单的curl命令测试一下。打开终端执行curl http://localhost:3000/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer any-string-here \ # A2默认不验证Key这里可以任意填写 -d { model: gemini-2.0-flash-exp, # 指定Gemini模型 messages: [ {role: user, content: 你好请用中文简单介绍一下你自己。} ], stream: false # 非流式先看简单回复 }如果一切正常你会收到一个JSON格式的回复其结构完全符合OpenAI API规范但内容是由Gemini生成的。恭喜至此你已经在5分钟内完成了一个免费AI模型Gemini的API接入。任何支持OpenAI API的客户端如NextChat、Open WebUI、LangChain等现在都可以将Base URL设置为http://你的服务器IP:3000然后像调用ChatGPT一样调用Gemini了。4. 核心功能深度配置与优化基础跑通只是开始要让这个服务稳定、强大地运行起来还需要进行一些深度配置。A2的Web UI管理控制台非常强大绝大部分配置都可以在那里完成。4.1 多模型与账号池配置单一账号和模型是不够的。我们需要建立账号池来提升可用性。添加多个Gemini账号重复3.2的授权步骤使用不同的Google账号登录。A2会自动为每个账号生成独立的凭据文件。在“提供商池”页面你会看到gemini-cli-oauth类型下出现了多个“节点”每个节点对应一个账号。理解轮询机制默认情况下A2会对同一类型下的健康账号进行轮询。每次请求可能会由不同的账号处理。这能有效分摊单个账号的速率限制压力。配置账号池文件高级对于更复杂的调度策略你可以直接编辑账号池配置文件。在本地./configs目录下创建或编辑provider_pools.json{ gemini-cli-oauth: [ { uuid: my-gemini-account-1, credentialsPath: /app/configs/gemini/account1_oauth_creds.json, checkHealth: true, weight: 10 // 权重越高被选中的概率越大 }, { uuid: my-gemini-account-2, credentialsPath: /app/configs/gemini/account2_oauth_creds.json, checkHealth: true, weight: 5 } ], claude-kiro-oauth: [ { uuid: my-kiro-account, credentialsPath: /app/configs/kiro/auth_token.json, checkHealth: true } ] }然后在Web UI的“配置管理”页面找到“PROVIDER_POOLS_FILE_PATH”设置填入/app/configs/provider_pools.json容器内路径并保存。重启服务后A2将使用你这个自定义的池子。4.2 协议路由与模型映射A2支持多种路由方式让调用更灵活。Path路由最常用通过URL路径选择模型提供商。http://localhost:3000/v1/chat/completions- 使用config.json中DEFAULT_PROVIDER指定的默认提供商。http://localhost:3000/gemini-cli-oauth/v1/chat/completions- 强制使用gemini-cli-oauth提供商。http://localhost:3000/claude-kiro-oauth/v1/messages- 强制使用claude-kiro-oauth提供商并调用Claude原生接口。你可以在Web UI的“仪表盘”页面看到所有可用的路由示例。模型名路由在请求体中指定特定的模型名A2会根据内置的映射关系自动选择提供商。例如请求model: grok-2-latest会自动路由到Grok的提供商。这个映射关系在A2的代码中是预定义的。启动参数/环境变量可以在启动服务时通过--provider参数或设置DEFAULT_PROVIDER环境变量来指定全局默认提供商。注意事项有些AI客户端如某些版本的NextChat会在你配置的Base URL后自动追加/v1路径。如果你在A2的Base URL里也写了/v1可能会导致路径重复如/v1/v1/chat/completions从而报404错误。如果遇到404第一件事就是去A2的“实时日志”里查看客户端发来的完整URL是什么并相应调整客户端的Base URL配置通常去掉末尾的/v1。4.3 高级特性配置TLS Sidecar解决403 Forbidden像Grok这类服务会对TLS握手指纹进行严格校验直接请求会返回403。A2内置了一个Go编写的TLS Sidecar来模拟浏览器指纹。对于Docker用户非常简单。只需在Web UI“配置管理”中找到“TLS_SIDECAR_ENABLED”和“TLS_SIDECAR_PORT”选项开启并设置一个端口如9090。Docker镜像已经包含了编译好的组件。对于本地Node.js运行的用户你需要先安装Go环境1.20然后在项目根目录执行cd tls-sidecar go build -o tls-sidecar来编译这个组件。之后才能在配置中开启。自动令牌刷新OAuth令牌通常有过期时间如1小时。在Web UI“配置管理”中务必开启“启用OAuth令牌自动刷新”和“预加载模型提供商”选项。这样A2会在后台自动维护令牌的有效性实现7x24小时不间断服务。如果没开“预加载”即使开了自动刷新对应提供商的令牌也不会被刷新久了就会失效。代理配置如果你的网络环境无法直接访问某些服务可以配置代理。统一代理在“配置管理”的“代理设置”区域填入你的代理服务器地址如http://127.0.0.1:7890然后勾选需要走代理的提供商如Gemini、Claude。提供商自带代理有些中转服务提供了已代理的端点。你可以在对应提供商的配置区域直接修改“Base URL”填入中转服务提供的地址。5. 实战将A2集成到现有应用理论配置都完成了我们来实战一下把A2集成到两个最流行的开源AI应用里。5.1 集成到NextChat原ChatGPT-Next-WebNextChat的配置非常直观。部署或打开你的NextChat。进入“设置” - “模型提供商”。在“OpenAI”配置项中API Key可以任意填写如sk-aiclient2api因为A2默认不验证此字段。如果你在A2中配置了API_KEYS则需要填写有效的Key。API 地址填写你的A2服务地址例如http://localhost:3000注意不要加/v1。模型列表点击“获取模型列表”NextChat会自动从http://localhost:3000/v1/models拉取A2支持的所有模型。你会看到Gemini、Claude、Grok等模型都出现了。保存后在聊天界面选择你想用的模型如gemini-2.0-flash-exp就可以开始对话了。NextChat发出的所有请求都会被A2接收、转换并转发给对应的AI服务。5.2 集成到LangChain或自定义脚本对于开发者在代码中集成更是轻而易举。以下是一个Python示例使用openai库需安装openai包from openai import OpenAI # 将client的base_url指向你的A2服务 client OpenAI( base_urlhttp://localhost:3000/v1, # 这里需要包含/v1 api_keyany-string-or-your-configured-key, # API Key ) # 发起一个聊天请求指定使用Gemini模型 response client.chat.completions.create( modelgemini-2.0-flash-exp, # 通过模型名路由 messages[ {role: user, content: 请用Python写一个快速排序函数。} ], streamTrue, # 使用流式输出 temperature0.7, ) # 处理流式响应 for chunk in response: if chunk.choices[0].delta.content is not None: print(chunk.choices[0].delta.content, end)这段代码和调用官方OpenAI API的代码一模一样只需改一个base_url。LangChain的ChatOpenAI类也同样只需修改openai_api_base参数即可。6. 常见问题排查与优化实录在实际使用中你肯定会遇到一些问题。下面是我踩过坑后总结的排查清单。6.1 错误码速查与解决错误现象可能原因排查步骤与解决方案401 Unauthorized1. API Key配置错误如果启用了Key验证。2. OAuth令牌已过期。1. 检查A2配置中的API_KEYS和请求头中的Authorization是否匹配。2. 去Web UI“提供商池”查看对应节点是否“健康”。不健康则重新进行OAuth授权。403 Forbidden1. 常见于GrokTLS指纹被识别。2. 账号权限不足或地区限制。1.开启并配置TLS Sidecar这是解决Grok 403的最有效方法。2. 检查使用的账号是否有权访问目标模型。尝试更换账号或使用代理。404 Not Found1. 请求路径错误。2. 客户端Base URL配置了多余的路径。1. 访问http://localhost:3000查看Web UI在仪表盘确认正确的API路径。2.检查客户端配置确保Base URL是http://localhost:3000而不是http://localhost:3000/v1。429 Too Many Requests单个账号的速率限制RPM或配额耗尽。1.配置账号池添加更多账号。2. 在config.json中启用RATE_LIMIT_COOLDOWN_ENABLED让被限流的账号暂时冷却。3. 配置providerFallbackChain在当前类型账号全挂时自动切换备用类型。503 No healthy providers某个Provider Type下的所有账号均不健康或不可用。1. 去Web UI“提供商池”检查该类型下所有节点的状态。2. 检查凭据文件是否存在、格式是否正确。3. 检查网络连接或是否为该服务配置了正确的代理。流式响应中途断开1. 网络不稳定。2. 代理服务器不支持长连接。3. 服务端处理超时。1. 检查本地网络。2. 如果使用了代理尝试更换或暂时禁用代理测试。3. 在客户端增加超时时间设置。6.2 性能与稳定性优化建议监控与日志充分利用A2 Web UI中的“实时日志”功能。任何API请求和错误都会在这里显示是排查问题的第一现场。可以在这里看到请求被路由到了哪个提供商、转换前后的参数、以及最终的响应状态码。合理设置超时在调用A2的客户端如NextChat、你的代码中适当增加超时时间。因为A2需要进行协议转换和可能的账号切换响应时间可能比直连官方API稍长。将超时设置为30-60秒是比较安全的。备用方案虽然A2的故障转移机制很强大但对于关键业务建议在你的应用代码层也实现一个简单的降级逻辑。例如当A2主端点连续失败数次后自动切换到一个备用的官方API或另一个A2实例。定期维护定期检查Web UI中的“提供商池”健康状态。对于标记为不健康的节点及时点击“刷新”或重新授权。可以写一个简单的cronjob定期访问A2的健康检查端点如/health来监控服务状态。6.3 关于“免费”的理性认识A2本身是开源免费的它帮你接入的许多模型服务如Gemini CLI、Kiro的Claude在官方层面也有免费额度。但“免费”通常意味着限制速率限制RPM每分钟能请求的次数有限。每日配额每天的总调用次数或Token数有限。模型能力免费额度可能无法调用最顶级的模型如Claude Opus可能需要Kiro的特定模式。因此千万不要把A2用于任何生产级、高并发的商业场景。它的最佳定位是个人学习、开发测试、搭建内部工具、以及低频率的个人使用。它的价值在于提供了一个统一、便捷的接口来管理和切换多个免费的AI资源极大地降低了体验和集成多种AI模型的成本。如果业务量增长为对应的官方API付费仍然是支持服务可持续性和稳定性的最终方案。