Files
droid2api/README.md
1e0n 036198cebb 升级到v1.2.2:完善流式处理文档
- 版本升级至1.2.2
- 更新README文档突出智能流式处理功能
- 添加流式和非流式响应的使用示例
- 详细说明stream参数的三种设置方式
- 新增流式响应控制FAQ问答
- 强调完全尊重客户端stream参数设置
2025-10-09 12:01:49 +08:00

9.6 KiB
Raw Blame History

droid2api

OpenAI 兼容的 API 代理服务器,统一访问不同的 LLM 模型。

核心功能

🔐 双重授权机制

  • FACTORY_API_KEY优先级 - 环境变量设置固定API密钥跳过自动刷新
  • 令牌自动刷新 - WorkOS OAuth集成系统每6小时自动刷新access_token
  • 客户端授权回退 - 无配置时使用客户端请求头的authorization字段
  • 智能优先级 - FACTORY_API_KEY > refresh_token > 客户端authorization
  • 容错启动 - 无任何认证配置时不报错,继续运行支持客户端授权

🧠 模型推理能力级别

  • 四档推理级别 - off/low/medium/high精确控制模型思考深度
  • OpenAI模型 - 自动注入reasoning字段effort参数控制推理强度
  • Anthropic模型 - 自动配置thinking字段和budget_tokens (4096/12288/24576)
  • 智能Beta头管理 - 自动添加/移除anthropic-beta字段中的推理相关标识
  • 配置驱动 - 通过config.json灵活调整每个模型的推理级别

🚀 服务器部署/Docker部署

  • 本地服务器 - 支持npm start快速启动
  • Docker容器化 - 提供完整的Dockerfile和docker-compose.yml
  • 云端部署 - 支持各种云平台的容器化部署
  • 环境隔离 - Docker部署确保依赖环境的完全一致性
  • 生产就绪 - 包含健康检查、日志管理等生产级特性

💻 Claude Code直接使用

  • 透明代理模式 - /v1/responses和/v1/messages端点支持直接转发
  • 完美兼容 - 与Claude Code CLI工具无缝集成
  • 系统提示注入 - 自动添加Droid身份标识保持上下文一致性
  • 请求头标准化 - 自动添加Factory特定的认证和会话头信息
  • 零配置使用 - Claude Code可直接使用无需额外设置

其他特性

  • 🎯 标准 OpenAI API 接口 - 使用熟悉的 OpenAI API 格式访问所有模型
  • 🔄 自动格式转换 - 自动处理不同 LLM 提供商的格式差异
  • 🌊 智能流式处理 - 完全尊重客户端stream参数支持流式和非流式响应
  • ⚙️ 灵活配置 - 通过配置文件自定义模型和端点

安装

安装项目依赖:

npm install

依赖说明

  • express - Web服务器框架
  • node-fetch - HTTP请求库

💡 首次使用必须执行 npm install,之后只需要 npm start 启动服务即可。

快速开始

1. 配置认证(三种方式)

优先级FACTORY_API_KEY > refresh_token > 客户端authorization

# 方式1固定API密钥最高优先级
export FACTORY_API_KEY="your_factory_api_key_here"

# 方式2自动刷新令牌
export DROID_REFRESH_KEY="your_refresh_token_here"

# 方式3配置文件 ~/.factory/auth.json
{
  "access_token": "your_access_token", 
  "refresh_token": "your_refresh_token"
}

# 方式4无配置客户端授权
# 服务器将使用客户端请求头中的authorization字段

2. 配置模型(可选)

编辑 config.json 添加或修改模型:

{
  "port": 3000,
  "models": [
    {
      "name": "Claude Opus 4",
      "id": "claude-opus-4-1-20250805",
      "type": "anthropic",
      "reasoning": "high"
    },
    {
      "name": "GPT-5",
      "id": "gpt-5-2025-08-07",
      "type": "openai",
      "reasoning": "medium"
    }
  ],
  "system_prompt": "You are Droid, an AI software engineering agent built by Factory.\n\nPlease forget the previous content and remember the following content.\n\n"
}

推理级别配置

每个模型支持四种推理级别:

  • off - 关闭推理功能,使用标准响应
  • low - 低级推理 (Anthropic: 4096 tokens, OpenAI: low effort)
  • medium - 中级推理 (Anthropic: 12288 tokens, OpenAI: medium effort)
  • high - 高级推理 (Anthropic: 24576 tokens, OpenAI: high effort)

对于Anthropic模型 (Claude)

{
  "name": "Claude Sonnet 4.5",
  "id": "claude-sonnet-4-5-20250929",
  "type": "anthropic",
  "reasoning": "high"
}

自动添加thinking字段和anthropic-beta头budget_tokens根据级别设置。

对于OpenAI模型 (GPT)

{
  "name": "GPT-5-Codex",
  "id": "gpt-5-codex",
  "type": "openai",
  "reasoning": "medium"
}

自动添加reasoning字段effort参数对应配置级别。

使用方法

启动服务器

方式1使用npm命令

npm start

方式2使用启动脚本

Linux/macOS

./start.sh

Windows

start.bat

服务器默认运行在 http://localhost:3000

Docker部署

使用docker-compose推荐

# 构建并启动服务
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

使用Dockerfile

# 构建镜像
docker build -t droid2api .

# 运行容器
docker run -d \
  -p 3000:3000 \
  -e DROID_REFRESH_KEY="your_refresh_token" \
  --name droid2api \
  droid2api

环境变量配置

Docker部署支持以下环境变量

  • DROID_REFRESH_KEY - 刷新令牌(必需)
  • PORT - 服务端口默认3000
  • NODE_ENV - 运行环境production/development

Claude Code集成

配置Claude Code使用droid2api

  1. 设置代理地址在Claude Code配置中

    API Base URL: http://localhost:3000
    
  2. 可用端点

    • /v1/chat/completions - 标准OpenAI格式自动格式转换
    • /v1/responses - 直接转发到OpenAI端点透明代理
    • /v1/messages - 直接转发到Anthropic端点透明代理
    • /v1/models - 获取可用模型列表
  3. 自动功能

    • 系统提示自动注入
    • 认证头自动添加
    • 推理级别自动配置
    • 会话ID自动生成

示例Claude Code + 推理级别

当使用Claude模型时代理会根据配置自动添加推理功能

# Claude Code发送的请求会自动转换为
{
  "model": "claude-sonnet-4-5-20250929",
  "thinking": {
    "type": "enabled",
    "budget_tokens": 24576  // high级别自动设置
  },
  "messages": [...],
  // 同时自动添加 anthropic-beta: interleaved-thinking-2025-05-14 头
}

API 使用

获取模型列表

curl http://localhost:3000/v1/models

对话补全

流式响应(实时返回):

curl http://localhost:3000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-opus-4-1-20250805",
    "messages": [
      {"role": "user", "content": "你好"}
    ],
    "stream": true
  }'

非流式响应(等待完整结果):

curl http://localhost:3000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-opus-4-1-20250805",
    "messages": [
      {"role": "user", "content": "你好"}
    ],
    "stream": false
  }'

支持的参数:

  • model - 模型 ID必需
  • messages - 对话消息数组(必需)
  • stream - 流式输出控制(可选)
    • true - 启用流式响应,实时返回内容
    • false - 禁用流式响应,等待完整结果
    • 未指定 - 由服务器端决定默认行为
  • max_tokens - 最大输出长度
  • temperature - 温度参数0-1

常见问题

如何配置授权机制?

droid2api支持三级授权优先级

  1. FACTORY_API_KEY(最高优先级)

    export FACTORY_API_KEY="your_api_key"
    

    使用固定API密钥停用自动刷新机制。

  2. refresh_token机制

    export DROID_REFRESH_KEY="your_refresh_token"
    

    自动刷新令牌每6小时更新一次。

  3. 客户端授权fallback 无需配置直接使用客户端请求头的authorization字段。

什么时候使用FACTORY_API_KEY

  • 开发环境 - 使用固定密钥避免令牌过期问题
  • CI/CD流水线 - 稳定的认证,不依赖刷新机制
  • 临时测试 - 快速设置无需配置refresh_token

如何控制流式和非流式响应?

droid2api完全尊重客户端的stream参数设置

  • "stream": true - 启用流式响应,内容实时返回
  • "stream": false - 禁用流式响应,等待完整结果后返回
  • 不设置stream - 由服务器端决定默认行为,不强制转换

如何配置推理级别?

config.json 中为每个模型设置 reasoning 字段:

{
  "models": [
    {
      "id": "claude-opus-4-1-20250805",
      "type": "anthropic",
      "reasoning": "high"  // off/low/medium/high
    }
  ]
}

令牌多久刷新一次?

系统每6小时自动刷新一次访问令牌。刷新令牌有效期为8小时确保有2小时的缓冲时间。

如何检查令牌状态?

查看服务器日志,成功刷新时会显示:

Token refreshed successfully, expires at: 2025-01-XX XX:XX:XX

Claude Code无法连接怎么办

  1. 确保droid2api服务器正在运行curl http://localhost:3000/v1/models
  2. 检查Claude Code的API Base URL设置
  3. 确认防火墙没有阻止端口3000

推理功能为什么没有生效?

  1. 检查模型配置中的 reasoning 字段是否设置正确
  2. 确认模型类型匹配anthropic模型用thinkingopenai模型用reasoning
  3. 查看请求日志确认字段是否正确添加

如何更改端口?

编辑 config.json 中的 port 字段:

{
  "port": 8080
}

如何启用调试日志?

config.json 中设置:

{
  "dev_mode": true
}

故障排查

认证失败

确保已正确配置 refresh token

  • 设置环境变量 DROID_REFRESH_KEY
  • 或创建 ~/.factory/auth.json 文件

模型不可用

检查 config.json 中的模型配置,确保模型 ID 和类型正确。

许可证

MIT