Skip to content

A TypeScript proxy service for Claude API with multiple provider support. This service provides full Claude API compatibility while allowing you to use different AI providers (OpenAI, Azure OpenAI, Ollama, etc.) as backends.

Notifications You must be signed in to change notification settings

coding-alt/claude-proxy

Repository files navigation

Claude Proxy

一个用 TypeScript 开发的 Claude API 代理服务,支持多种 AI 提供商。该服务提供完整的 Claude API 兼容性,同时允许您使用不同的 AI 提供商(OpenAI、Azure OpenAI、Ollama 等)作为后端。

核心功能

  • 完整的 Claude API 兼容性 - 支持完整的 /v1/messages 端点
  • 多提供商支持 - OpenAI、Azure OpenAI、Ollama、Anthropic
  • 直接模型支持 - 直接使用任何模型名称,无需映射
  • 流式响应 - 支持所有提供商的流式响应
  • 认证系统 - 基于 API 密钥的认证
  • 速率限制 - 可配置的速率限制
  • 健康检查 - 全面的健康监控
  • Vercel 部署 - 开箱即用的 Vercel 部署支持

快速开始

1. 安装依赖

npm install

2. 配置环境变量

复制示例配置文件:

cp .env.example .env

编辑 .env 文件,配置您的提供商:

# 服务器配置
PORT=3000
NODE_ENV=development

# 默认提供商
DEFAULT_PROVIDER=openai

# OpenAI 配置
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_BASE_URL=https://api.openai.com/v1

# Azure OpenAI 配置
AZURE_OPENAI_API_KEY=your_azure_api_key_here
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com
AZURE_OPENAI_API_VERSION=2024-02-15-preview

# Ollama 配置
OLLAMA_BASE_URL=http://localhost:11434

# Anthropic 配置
ANTHROPIC_AUTH_TOKEN=your_anthropic_api_key_here
ANTHROPIC_BASE_URL=https://api.anthropic.com

# 速率限制
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100

# 日志配置
LOG_LEVEL=info
LOG_FORMAT=simple

# CORS 配置
CORS_ORIGIN=*
CORS_CREDENTIALS=false

3. 启动服务

开发模式:

npm run dev

生产模式:

npm run build
npm start

使用方式

方式一:使用 Claude SDK

设置环境变量指向您的代理:

export ANTHROPIC_AUTH_TOKEN=your_api_key
export ANTHROPIC_BASE_URL=http://localhost:3000

然后正常使用 Claude SDK:

import anthropic

client = anthropic.Anthropic()

message = client.messages.create(
    model="gpt-4o",  # 直接使用提供商支持的模型名称
    max_tokens=1000,
    messages=[
        {"role": "user", "content": "Hello, Claude!"}
    ]
)
print(message.content)

方式二:直接 API 调用

curl -X POST http://localhost:3000/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-api-key: your_api_key" \
  -d '{
    "model": "gpt-4o",
    "max_tokens": 1000,
    "messages": [
      {"role": "user", "content": "Hello!"}
    ]
  }'

方式三:流式响应

curl -X POST http://localhost:3000/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-api-key: your_api_key" \
  -d '{
    "model": "gpt-3.5-turbo",
    "max_tokens": 200,
    "stream": true,
    "messages": [
      {"role": "user", "content": "Write a short poem"}
    ]
  }'

API 端点

端点 方法 描述
/v1/messages POST 创建消息(Claude API 兼容)
/v1/models GET 列出可用模型
/health GET 基本健康检查
/health/detailed GET 详细健康检查
/health/providers GET 提供商健康状态

模型使用

直接使用您想要的模型名称即可。代理会验证模型是否被配置的提供商支持。如果模型不受支持,您会收到错误消息,指示哪些模型可用。

支持的模型示例:

  • OpenAI: gpt-4o, gpt-4, gpt-3.5-turbo, gpt-4-turbo
  • Anthropic: claude-3-5-sonnet-20241022, claude-3-haiku-20240307
  • Ollama: 任何已安装的模型名称

部署

Vercel 部署(推荐)

  1. 安装 Vercel CLI:
npm i -g vercel
  1. 部署:
vercel
  1. 在 Vercel 仪表板中设置环境变量:
    • OPENAI_API_KEY
    • DEFAULT_PROVIDER
    • 其他必要的配置变量

Docker 部署

FROM node:18-alpine

WORKDIR /app

# 复制 package 文件
COPY package*.json ./
COPY tsconfig.json ./

# 安装依赖
RUN npm ci --only=production

# 复制源代码
COPY src/ ./src/

# 构建应用
RUN npm run build

# 暴露端口
EXPOSE 3000

# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:3000/health || exit 1

# 启动应用
CMD ["npm", "start"]

构建和运行:

# 构建镜像
docker build -t claude-proxy .

# 运行容器
docker run -d \
  --name claude-proxy \
  -p 3000:3000 \
  -e OPENAI_API_KEY=your_key \
  -e DEFAULT_PROVIDER=openai \
  claude-proxy

Railway/Render 部署

  1. 连接您的 GitHub 仓库到 Railway 或 Render
  2. 在平台仪表板中设置环境变量
  3. 自动部署

配置选项

环境变量

变量 描述 默认值
PORT 服务器端口 3000
NODE_ENV 环境 development
DEFAULT_PROVIDER 默认 AI 提供商 openai
RATE_LIMIT_WINDOW_MS 速率限制窗口(毫秒) 900000 (15分钟)
RATE_LIMIT_MAX_REQUESTS 窗口内最大请求数 100
LOG_LEVEL 日志级别 info
LOG_FORMAT 日志格式 json
CORS_ORIGIN CORS 源 *
CORS_CREDENTIALS CORS 凭据 false

提供商配置

OpenAI

  • OPENAI_API_KEY - OpenAI API 密钥(必需)
  • OPENAI_BASE_URL - API 基础 URL(可选)
  • OPENAI_ORGANIZATION - 组织 ID(可选)

Azure OpenAI

  • AZURE_OPENAI_API_KEY - Azure OpenAI API 密钥(必需)
  • AZURE_OPENAI_ENDPOINT - Azure OpenAI 端点(必需)
  • AZURE_OPENAI_API_VERSION - API 版本(必需,如:2024-02-15-preview)

Ollama

Anthropic

  • ANTHROPIC_AUTH_TOKEN - Anthropic API 密钥(必需)
  • ANTHROPIC_BASE_URL - API 基础 URL(可选)

测试示例

项目包含了完整的测试示例:

# 安装示例依赖
cd examples
npm install axios

# 运行所有示例
node usage.js

# 运行特定示例
node usage.js --simple    # 简单消息
node usage.js --stream    # 流式消息
node usage.js --models    # 列出模型
node usage.js --health    # 健康检查

开发

项目结构

src/
├── types/          # TypeScript 类型定义
├── providers/      # 提供商实现
├── middleware/     # Express 中间件
├── routes/         # API 路由
├── utils/          # 工具函数
├── app.ts          # Express 应用配置
└── index.ts        # 服务器入口点

添加新提供商

  1. 创建继承 AbstractProvider 的新提供商类
  2. 实现必需方法:sendMessage, sendStreamMessage, listModels, healthCheck
  3. 在类型定义中添加提供商配置
  4. 在工厂中注册提供商

测试

npm test

构建

npm run build

故障排除

常见问题

  1. 提供商认证错误

    • 验证 API 密钥是否正确设置
    • 检查提供商特定的配置
  2. 模型不支持错误

    • 检查您使用的模型名称是否被当前提供商支持
    • 使用 /v1/models 端点查看可用模型
  3. 速率限制

    • 调整环境变量中的速率限制设置
    • 监控使用模式
  4. 超时问题

    • 增加慢速提供商的超时值
    • 检查提供商健康状态
  5. 内存问题

    • 监控内存使用情况
    • 如需要增加分配的内存

调试模式

启用调试日志:

LOG_LEVEL=debug npm run dev

这将提供详细的请求/响应日志用于故障排除。

健康检查

使用健康检查端点监控服务状态:

# 基本健康检查
curl http://localhost:3000/health

# 详细健康检查
curl http://localhost:3000/health/detailed

# 提供商健康状态
curl http://localhost:3000/health/providers

许可证

MIT License - 详见 LICENSE 文件。

About

A TypeScript proxy service for Claude API with multiple provider support. This service provides full Claude API compatibility while allowing you to use different AI providers (OpenAI, Azure OpenAI, Ollama, etc.) as backends.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published