Simulates Gemini CLI, Antigravity, Codex, Grok, and Kiro client requests, compat
Find a file
bee4come e91aaa02e5 fix: improve droid provider with context isolation and message parsing
Changes:
- Add context isolation using --cwd flag to prevent project context leakage
- Fix message content parsing to support both string and array formats
- Add debug logging for troubleshooting
- Create isolated temporary working directory for each service instance

This prevents Droid from seeing the current project directory and mentioning
it in responses, providing a cleaner API experience.

Tested:
 Context isolation verified - Droid reports empty temp directory
 Message parsing works with OpenAI format
 API responses no longer mention project context
2025-10-15 14:02:21 +08:00
src fix: improve droid provider with context isolation and message parsing 2025-10-15 14:02:21 +08:00
tests refactor(convert): 优化默认参数处理逻辑并更新测试路径 2025-08-04 12:51:46 +08:00
.babelrc feat: 实现多模型API代理核心功能与策略模式架构 2025-07-25 18:14:16 +08:00
.dockerignore feat(docker): 添加Docker支持和部署指南 2025-07-30 19:46:12 +08:00
.gitignore feat: 添加防截断模型支持和错误处理优化 2025-10-08 19:10:54 +08:00
config.json.example feat: improve Droid provider implementation and configuration 2025-10-15 13:26:58 +08:00
Dockerfile refactor(docker): 修改容器配置以使用root用户并更新运行参数 2025-08-12 12:40:30 +08:00
healthcheck.js feat: 新增提供商账号池模式支持 2025-08-29 17:00:18 +08:00
jest.config.js feat: 实现多模型API代理核心功能与策略模式架构 2025-07-25 18:14:16 +08:00
LICENSE Initial commit 2025-07-20 15:05:56 +08:00
package-lock.json feat: improve Droid provider implementation and configuration 2025-10-15 13:26:58 +08:00
package.json feat(qwen): 新增Qwen Code支持及相关功能实现 2025-09-01 17:28:37 +08:00
provider_pools.json.example feat: improve Droid provider implementation and configuration 2025-10-15 13:26:58 +08:00
README-EN.md feat: 添加防截断模型支持和错误处理优化 2025-10-08 19:10:54 +08:00
README-JA.md feat: 添加防截断模型支持和错误处理优化 2025-10-08 19:10:54 +08:00
README.md Add Droid (Factory.ai) provider support 2025-10-15 11:29:17 +08:00
run-docker.bat refactor(docker): 修改容器配置以使用root用户并更新运行参数 2025-08-12 12:40:30 +08:00
run-docker.sh refactor(docker): 修改容器配置以使用root用户并更新运行参数 2025-08-12 12:40:30 +08:00
test-droid.js Add Droid (Factory.ai) provider support 2025-10-15 11:29:17 +08:00

logo

AIClient-2-API 🚀

一个能将多种仅客户端内使用的大模型 APIGemini CLI, Qwen Code Plus, Kiro Claude...),模拟请求,统一封装为本地 OpenAI 兼容接口的强大代理。

AIClient2API 是一个多功能、轻量化的 API 代理,旨在将多种大模型客户端(如 Gemini CLI, Qwen Code Plus, Kiro Claude 等)模拟为本地 OpenAI 兼容接口。它通过一个 Node.js HTTP 服务器,将不同模型的后端 API 统一转换为标准的 OpenAI 格式,让任何兼容 OpenAI 的客户端或应用,通过一个 API 地址,无缝使用多种大模型能力,从而摆脱多套配置和接口不兼容的烦恼。项目支持模块化架构、策略模式和适配器模式,具备完整的测试覆盖和健康检查,开箱即用。

Note

感谢阮一峰老师在周刊359期的推荐。

8.29 新增账号池模式可支持所有provider配置多个账号自带轮询故障转移需要客户端重试和配置降级。需要在 config 新增配置 PROVIDER_POOLS_FILE_PATH 详见配置文件provider_pools.json

9.1 偷摸的新增 Qwen Code CLI 支持,可使用 qwen3-coder-plus 模型


💡 核心优势

  • 多模型统一接入:通过统一的 OpenAI 兼容接口,轻松接入 Gemini、OpenAI、Claude、Factory Droid、Kimi K2、GLM-4.5、Qwen Code 等多种主流大模型,并通过启动参数或请求头自由切换。
  • 突破官方限制:利用 Gemini CLI 的 OAuth 授权,有效规避官方免费 API 的速率和配额限制,提升请求额度和使用频率。
  • 免费使用 Claude Sonnet 4.5:在 Kiro API 模式下,支持免费使用 Claude Sonnet 4.5 模型。
  • 无缝兼容 OpenAI:提供与 OpenAI API 完全兼容的接口,使 LobeChat, NextChat 等现有工具链和客户端能零成本接入所有支持模型。
  • 账号池智能管理:支持多账号轮询、故障转移和配置降级,确保服务高可用性,有效应对单一账号限制。
  • 增强的可控性强大的日志功能可捕获并记录所有请求的提示词Prompts便于审计、调试、优化模型行为和构建私有数据集。
  • 极易扩展:采用模块化和策略模式设计,新增模型服务商变得前所未有的简单。
  • 完整测试覆盖:全面的集成和单元测试,确保各个 API 端点和功能的稳定可靠。
  • Docker支持:提供完整的 Docker 容器化支持,实现快速部署和环境隔离。

📑 快速导航


🎨 模型协议与提供商关系图

本项目通过不同的协议Protocol支持多种模型提供商Model Provider。以下是它们之间的关系概述

  • OpenAI 协议 (P_OPENAI):由 openai-custom, gemini-cli-oauth, claude-custom, claude-kiro-oauthopenai-qwen-oauth 等模型提供商实现。
  • Claude 协议 (P_CLAUDE):由 claude-custom, claude-kiro-oauth, gemini-cli-oauth, openai-customopenai-qwen-oauth 等模型提供商实现。
  • Gemini 协议 (P_GEMINI):由 gemini-cli-oauth 模型提供商实现。

详细关系图如下:


 graph TD
     subgraph Core_Protocols["核心协议"]
         P_OPENAI[OpenAI Protocol]
         P_GEMINI[Gemini Protocol]
         P_CLAUDE[Claude Protocol]
     end
 
     subgraph Supported_Model_Providers["支持的模型提供商"]
         MP_OPENAI[openai-custom]
         MP_GEMINI[gemini-cli-oauth]
         MP_CLAUDE_C[claude-custom]
         MP_CLAUDE_K[claude-kiro-oauth]
         MP_QWEN[openai-qwen-oauth]
     end
 
     P_OPENAI ---|支持| MP_OPENAI
     P_OPENAI ---|支持| MP_QWEN
     P_OPENAI ---|支持| MP_GEMINI
     P_OPENAI ---|支持| MP_CLAUDE_C
     P_OPENAI ---|支持| MP_CLAUDE_K
 
     P_GEMINI ---|支持| MP_GEMINI
 
     P_CLAUDE ---|支持| MP_CLAUDE_C
     P_CLAUDE ---|支持| MP_CLAUDE_K
     P_CLAUDE ---|支持| MP_GEMINI
     P_CLAUDE ---|支持| MP_OPENAI
     P_CLAUDE ---|支持| MP_QWEN
 
     style P_OPENAI fill:#f9f,stroke:#333,stroke-width:2px
     style P_GEMINI fill:#ccf,stroke:#333,stroke-width:2px
     style P_CLAUDE fill:#cfc,stroke:#333,stroke-width:2px


🔧 使用说明

  • MCP 支持:本项目完美支持 MCP (Model Context Protocol),可配合支持 MCP 的客户端实现功能扩展。

  • 多模态能力: 支持图片、文档等多模态输入,为您提供更丰富的交互体验。

  • 最新模型支持: 支持最新的 Kimi K2GLM-4.5Qwen Code 模型,只需在 config.json 中配置相应的 OpenAI 或 Claude 兼容接口即可使用。

  • Qwen Code 支持

    • 授权流程:首次使用 Qwen Code 时,会自动在浏览器中打开授权页面。完成授权后,oauth_creds.json 文件将生成并存储在 ~/.qwen 目录下。
    • 模型参数:请使用官方默认参数 temperature=0top_p=1
  • Droid (Factory.ai) 支持

    • 使用前提:使用 Droid 需要安装 Factory CLI 并完成认证登录,以生成 ~/.factory/auth.json 文件。
    • 认证流程:运行 droid 命令并按提示登录OAuth tokens 将自动保存。
    • 优势:无需单独的 API key直接使用 Factory.ai 账号的 Claude 访问权限。
    • 详细文档:查看 Droid Provider README 了解完整配置说明。
  • Kiro API

    • 使用前提:使用 Kiro API 需要下载 Kiro 客户端并完成授权登录,以生成 kiro-auth-token.json 文件。
    • 最佳体验:推荐配合 Claude Code 使用以获得最佳体验。
    • 注意事项Kiro 服务政策已调整,请查阅官方公告了解具体使用限制。
  • 模型供应商切换:本项目支持通过 Path 路由和环境变量两种方式,在 API 调用中灵活切换不同的模型供应商。

    通过 Path 路由切换

    通过在 API 请求路径中包含特定的供应商标识,您可以直接调用对应的模型:

    • http://localhost:3000/claude-custom - 使用配置文件中定义的 Claude API 供应商。
    • http://localhost:3000/claude-kiro-oauth - 使用 Kiro OAuth 认证方式访问 Claude API。
    • http://localhost:3000/openai-custom - 使用 OpenAI 自定义供应商处理 Claude 请求。
    • http://localhost:3000/gemini-cli-oauth - 使用 Gemini CLI OAuth 供应商处理 Claude 请求。
    • http://localhost:3000/openai-qwen-oauth - 使用 Qwen OAuth 供应商处理 Claude 请求。
    • http://localhost:3000/droid-factory-oauth - 使用 Factory.ai Droid OAuth 供应商访问 Claude API。

    这些 Path 路由不仅适用于直接 API 调用,也可在 Cline、Kilo 等编程 Agent 中配置 API 端点时使用,实现灵活的模型调用。例如,将 Agent 的 API 端点设置为 http://localhost:3000/claude-kiro-oauth 即可调用通过 Kiro OAuth 认证的 Claude 模型。

    通过环境变量配置 Claude 参数

    除了 Path 路由,您还可以通过设置以下环境变量来配置 Claude 相关的参数:

    • ANTHROPIC_BASE_URL: 设置 Claude API 的基础 URL 路径。
    • ANTHROPIC_AUTH_TOKEN: 设置 Claude 服务的认证密钥。
    • ANTHROPIC_MODEL: 设置需要使用的 Claude 模型。

    不同系统中的环境变量设置方法

    当使用 http://localhost:3000/claude-custom 路径时,可以通过以下方式设置环境变量:

    Linux / macOS
    export ANTHROPIC_BASE_URL="http://localhost:3000/claude-custom"
    export ANTHROPIC_AUTH_TOKEN="your-auth-token-here"
    export ANTHROPIC_MODEL="your-model-name"
    
    Windows (CMD)
    set ANTHROPIC_BASE_URL=http://localhost:3000/claude-custom
    set ANTHROPIC_AUTH_TOKEN=your-auth-token-here
    set ANTHROPIC_MODEL=your-model-name
    
    Windows (PowerShell)
    $env:ANTHROPIC_BASE_URL="http://localhost:3000/claude-custom"
    $env:ANTHROPIC_AUTH_TOKEN="your-auth-token-here"
    $env:ANTHROPIC_MODEL="your-model-name"
    

授权文件默认路径

以下是各服务授权文件的默认存储路径:

  • Gemini: ~/.gemini/oauth_creds.json
  • Kiro: ~/.aws/sso/cache/kiro-auth-token.json
  • Qwen: ~/.qwen/oauth_creds.json
  • Droid (Factory.ai): ~/.factory/auth.json

其中 ~ 代表用户主目录。如果需要自定义路径,可以通过配置文件或环境变量进行设置。


💻 代理设置

提示: 如果您在无法直接访问 Google/OpenAI/Claude/Kiro 服务的环境中使用,请先为您的终端设置 HTTP代理不要设置 HTTPS代理。

不同终端环境下的 HTTP 代理设置命令

为确保 AIClient2API 正常访问外部 AI 服务(如 Google、OpenAI、Claude、Kiro 等),您需要在终端环境中设置 HTTP 代理。以下是针对不同操作系统的代理设置命令:

Linux / macOS

export HTTP_PROXY="http://your_proxy_address:port"
# 如果代理需要认证
# export HTTP_PROXY="http://username:password@your_proxy_address:port"

要使这些设置永久生效,您可以将它们添加到您的 shell 配置文件中(例如 ~/.bashrc, ~/.zshrc~/.profile)。

Windows (CMD)

set HTTP_PROXY=http://your_proxy_address:port
:: 如果代理需要认证
:: set HTTP_PROXY=http://username:password@your_proxy_address:port

这些设置只对当前 CMD 会话有效。如需永久设置,您可以通过系统环境变量进行配置。

Windows (PowerShell)

$env:HTTP_PROXY="http://your_proxy_address:port"
# 如果代理需要认证
# $env:HTTP_PROXY="http://username:password@your_proxy_address:port"

这些设置只对当前 PowerShell 会话有效。如需永久设置,您可以将它们添加到您的 PowerShell 配置文件中 ($PROFILE) 或通过系统环境变量进行配置。

请务必将 your_proxy_addressport 替换为您的实际代理地址和端口。


🌟 特殊用法与进阶技巧

  • 🔌 对接任意 OpenAI 客户端:这是本项目的核心功能。将任何支持 OpenAI 兼容 API 的应用(如 LobeChat, NextChat, VS Code 插件等)的 API 地址配置为指向本项目服务 (http://localhost:3000),即可无缝使用所有已配置的大模型。

  • 🔍 中心化请求监控与审计:通过在 config.json 中设置 "PROMPT_LOG_MODE": "file",可以捕获并记录所有发送给模型的请求(包括提示词)和接收到的响应,并保存到本地日志文件。这对于后续的审计、调试、提示词优化,以及构建私有数据集都具有重要价值。

  • 💡 动态系统提示词:通过配置 config.json 中的 SYSTEM_PROMPT_FILE_PATHSYSTEM_PROMPT_MODE 参数,可以灵活控制系统提示词的行为,实现对模型预设指令的定制化管理。

    • 可用模式:
      • override: 强制使用指定文件中的系统提示词,完全覆盖客户端发送的提示词。
      • append: 在客户端发送的系统提示词末尾追加指定文件中的内容,作为补充指令。
    • 此功能支持为不同客户端设置统一的基础指令,同时允许应用进行个性化扩展。
  • 🛠️ 作为二次开发基石

    • 添加新模型提供商:在 src 目录下创建新的提供商目录,实现 ApiServiceAdapter 接口及相应策略,并在 adapter.jscommon.js 中注册即可轻松集成新的大模型服务。
    • 响应缓存:通过引入缓存机制,可针对高频重复请求进行响应缓存,有效降低 API 调用次数,显著提升响应速度。
    • 自定义内容过滤:在请求发送前或接收响应后,可自定义添加关键词过滤或内容审查逻辑,以满足特定的合规性或安全要求。
  • 🎯 账号池高级配置

    • 多账号管理:通过配置 provider_pools.json 文件,可为每个模型提供商设置多个账号,实现智能轮询,提高资源利用率。
    • 故障转移:当检测到某个账号失效时,系统将自动切换至下一个可用账号,确保服务的持续稳定运行。
    • 配置降级:支持根据账号的实时状态动态调整配置参数,例如在特定情况下自动切换到低消耗模型,以优化资源使用效率。
    • 使用示例:请参考项目提供的 provider_pools.json 配置文件示例,以便轻松配置多账号环境。

🚀 项目启动参数

本项目支持丰富的命令行参数配置,可以根据需要灵活调整服务行为。以下是对所有启动参数的详细说明,按功能分组展示:

🔧 服务器配置参数

参数 类型 默认值 说明
--host string localhost 服务器监听地址
--port number 3000 服务器监听端口
--api-key string 123456 用于 API 身份验证的密钥

🤖 模型提供商配置参数

参数 类型 默认值 说明
--model-provider string gemini-cli-oauth AI 模型提供商可选值openai-custom, claude-custom, gemini-cli-oauth, claude-kiro-oauth, openai-qwen-oauth, droid-factory-oauth

🧠 OpenAI 兼容提供商参数

参数 类型 默认值 说明
--openai-api-key string null OpenAI API 密钥 (当 model-provideropenai-custom 时必需)
--openai-base-url string null OpenAI API 基础 URL (当 model-provideropenai-custom 时必需)

🖥️ Claude 兼容提供商参数

参数 类型 默认值 说明
--claude-api-key string null Claude API 密钥 (当 model-providerclaude-custom 时必需)
--claude-base-url string null Claude API 基础 URL (当 model-providerclaude-custom 时必需)

🔐 Gemini OAuth 认证参数

参数 类型 默认值 说明
--gemini-oauth-creds-base64 string null Gemini OAuth 凭据的 Base64 字符串 (当 model-providergemini-cli-oauth 时可选,与 --gemini-oauth-creds-file 二选一)
--gemini-oauth-creds-file string null Gemini OAuth 凭据 JSON 文件路径 (当 model-providergemini-cli-oauth 时可选,与 --gemini-oauth-creds-base64 二选一)
--project-id string null Google Cloud 项目 ID (当 model-providergemini-cli-oauth 时必需)

🎮 Kiro OAuth 认证参数

参数 类型 默认值 说明
--kiro-oauth-creds-base64 string null Kiro OAuth 凭据的 Base64 字符串 (当 model-providerclaude-kiro-oauth 时可选,与 --kiro-oauth-creds-file 二选一)
--kiro-oauth-creds-file string null Kiro OAuth 凭据 JSON 文件路径 (当 model-providerclaude-kiro-oauth 时可选,与 --kiro-oauth-creds-base64 二选一)

🐼 Qwen OAuth 认证参数

参数 类型 默认值 说明
--qwen-oauth-creds-file string null Qwen OAuth 凭据 JSON 文件路径 (当 model-provideropenai-qwen-oauth 时必需)

🤖 Droid (Factory.ai) OAuth 认证参数

参数 类型 默认值 说明
--droid-auth-file string ~/.factory/auth.json Factory Droid OAuth 凭据文件路径 (当 model-providerdroid-factory-oauth 时可选)
--droid-base-url string https://api.anthropic.com Droid 使用的 Claude API 基础 URL (可选)

📝 系统提示配置参数

参数 类型 默认值 说明
--system-prompt-file string input_system_prompt.txt 系统提示文件路径
--system-prompt-mode string overwrite 系统提示模式可选值overwrite覆盖, append追加

📊 日志配置参数

参数 类型 默认值 说明
--log-prompts string none 提示日志模式可选值console控制台, file文件, none
--prompt-log-base-name string prompt_log 提示日志文件基础名称

🔄 重试机制参数

参数 类型 默认值 说明
--request-max-retries number 3 API 请求失败时,自动重试的最大次数
--request-base-delay number 1000 自动重试之间的基础延迟时间(毫秒),每次重试后延迟会增加

定时任务参数

参数 类型 默认值 说明
--cron-near-minutes number 15 OAuth 令牌刷新任务计划的间隔时间(分钟)
--cron-refresh-token boolean true 是否开启 OAuth 令牌自动刷新任务

🎯 号池配置参数

参数 类型 默认值 说明
--provider-pools-file string null 提供商号池配置文件路径

使用示例

# 基本用法
node src/api-server.js

# 指定端口和API密钥
node src/api-server.js --port 8080 --api-key my-secret-key

# 使用OpenAI提供商
node src/api-server.js --model-provider openai-custom --openai-api-key sk-xxx --openai-base-url https://api.openai.com/v1

# 使用Claude提供商
node src/api-server.js --model-provider claude-custom --claude-api-key sk-ant-xxx --claude-base-url https://api.anthropic.com

# 使用Gemini提供商Base64凭据
node src/api-server.js --model-provider gemini-cli-oauth --gemini-oauth-creds-base64 eyJ0eXBlIjoi... --project-id your-project-id

# 使用Gemini提供商凭据文件
node src/api-server.js --model-provider gemini-cli-oauth --gemini-oauth-creds-file /path/to/credentials.json --project-id your-project-id

# 使用Droid (Factory.ai) 提供商
node src/api-server.js --model-provider droid-factory-oauth

# 配置系统提示
node src/api-server.js --system-prompt-file custom-prompt.txt --system-prompt-mode append

# 配置日志
node src/api-server.js --log-prompts console
node src/api-server.js --log-prompts file --prompt-log-base-name my-logs

# 完整示例
node src/api-server.js \
  --host 0.0.0.0 \
  --port 3000 \
  --api-key my-secret-key \
  --model-provider gemini-cli-oauth \
  --project-id my-gcp-project \
  --gemini-oauth-creds-file ./credentials.json \
  --system-prompt-file ./custom-system-prompt.txt \
  --system-prompt-mode overwrite \
  --log-prompts file \
  --prompt-log-base-name api-logs

📄 开源许可

本项目遵循 GNU General Public License v3 (GPLv3) 开源许可。详情请查看根目录下的 LICENSE 文件。

🙏 致谢

本项目的开发受到了官方 Google Gemini CLI 的极大启发并参考了Cline 3.18.0 版本 gemini-cli.ts 的部分代码实现。在此对 Google 官方团队和 Cline 开发团队的卓越工作表示衷心的感谢!

🌟 Star History

Star History Chart


⚠️ 免责声明

使用风险提示

本项目AIClient-2-API仅供学习和研究使用。用户在使用本项目时应自行承担所有风险。作者不对因使用本项目而导致的任何直接、间接或 consequential 损失承担责任。

第三方服务责任说明

本项目是一个API代理工具不提供任何AI模型服务。所有AI模型服务由相应的第三方提供商如Google、OpenAI、Anthropic等提供。用户在使用本项目访问这些第三方服务时应遵守各第三方服务的使用条款和政策。作者不对第三方服务的可用性、质量、安全性或合法性承担责任。

数据隐私说明

本项目在本地运行不会收集或上传用户的任何数据。但用户在使用本项目时应注意保护自己的API密钥和其他敏感信息。建议用户定期检查和更新自己的API密钥并避免在不安全的网络环境中使用本项目。

法律合规提醒

用户在使用本项目时,应遵守所在国家/地区的法律法规。严禁将本项目用于任何非法用途。如因用户违反法律法规而导致的任何后果,由用户自行承担全部责任。