# copilot-proxy **Repository Path**: upcliujie/copilot-proxy ## Basic Information - **Project Name**: copilot-proxy - **Description**: GitHub Copilot API 的 Rust 实现,提供 OpenAI 和 Anthropic 兼容的 API 端点。 - **Primary Language**: Rust - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-25 - **Last Updated**: 2026-04-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Copilot Proxy [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) 一个 Rust 实现的 AI API 代理服务,提供统一的 OpenAI 和 Anthropic 兼容接口,支持多供应商路由。 ## 功能特性 - 🔄 **多供应商支持** - 支持 Copilot 和任意 OpenAI 兼容供应商 - 🛤️ **智能路由** - 根据模型名称自动路由到对应供应商,支持 `nice_name` 映射 - 🔐 **Copilot 认证** - 支持 GitHub OAuth 设备流登录,自动获取和刷新 Copilot token - 🔗 **OpenAI 兼容 API** - 提供 `/v1/chat/completions`、`/v1/embeddings`、`/v1/models` 等端点 - 🦉 **Anthropic 兼容 API** - 支持 `/v1/messages` 端点 - ⚡ **流式响应** - 支持 Server-Sent Events (SSE) 流式输出 - 🌐 **代理支持** - 支持配置文件中的全局代理和单供应商代理,也兼容 HTTP/HTTPS/ALL_PROXY 环境变量 - 📊 **使用量统计** - 提供 Copilot 使用量查询接口 - 🔒 **速率限制** - 支持可配置的请求速率限制 ## 快速开始 ### 构建项目 ```bash cargo build --release ``` ### 配置 创建 `config.yaml` 配置文件: ```yaml proxy: socks5://127.0.0.1:1080 providers: # Copilot 是内置默认供应商,也可以单独补充代理配置 copilot: enabled: true proxy: socks5://127.0.0.1:1080 # 自定义 OpenAI 兼容供应商 openai: enabled: true base_url: https://api.openai.com/v1 api_key: "your-api-key" proxy: "http://127.0.0.1:7890" timeout: 120 # 模型名映射(可选) nice_name: gpt-4: "my-gpt-4" # 可以添加更多供应商... # anthropic: # enabled: true # base_url: https://api.anthropic.com # api_key: "your-anthropic-key" ``` ### 运行服务器 ```bash # 指定配置文件运行 cargo run -- -c config.yaml # 或者先进行认证 cargo run -- auth -c config.yaml ``` 服务器默认监听 `http://0.0.0.0:8888` ## 模型路由规则 系统按以下优先级匹配供应商: 1. **nice_name 映射** - 优先匹配配置中 `nice_name` 的 value(对外显示的名字) 2. **自定义供应商** - 匹配未配置 `nice_name` 的供应商 3. **Copilot fallback** - 作为最后的默认供应商 例如:配置 `nice_name: { "gpt-4": "my-gpt-4" }` 后,使用 `my-gpt-4` 模型名会自动路由到该供应商。 ## API 端点 ### OpenAI 兼容端点 | 端点 | 方法 | 描述 | |------|------|------| | `/v1/chat/completions` | POST | 聊天完成(支持流式) | | `/v1/embeddings` | POST | 嵌入向量生成 | | `/v1/models` | GET | 获取可用模型列表 | | `/v1/token` | GET | 获取当前 token 信息 | | `/v1/usage` | GET | 获取 Copilot 使用量统计 | ### Anthropic 兼容端点 | 端点 | 方法 | 描述 | |------|------|------| | `/v1/messages` | POST | 聊天完成(Anthropic 格式) | | `/v1/messages/count_tokens` | POST | Token 计数 | ## 环境变量 | 变量名 | 描述 | 默认值 | |--------|------|--------| | `COPILOT_CONFIG_PATH` | 配置文件路径 | - | | `HTTP_PROXY` | HTTP 代理地址 | - | | `HTTPS_PROXY` | HTTPS 代理地址 | - | | `ALL_PROXY` | 通用代理地址(含 socks5) | - | | `NO_PROXY` | 跳过代理的地址 | - | | `RATE_LIMIT_SECONDS` | 请求速率限制(秒) | 0(不限制) | | `RATE_LIMIT_WAIT` | 超过限制时是否等待 | false | | `COPILOT_TOKEN` | Copilot Token | - | | `OVERRIDE_API_KEY` | 覆盖所有供应商的 API Key | - | ## 使用示例 ### 聊天完成(OpenAI 格式) ```bash curl -X POST http://localhost:8888/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4", "messages": [{"role": "user", "content": "Hello!"}], "stream": false }' ``` ### 聊天完成(Anthropic 格式) ```bash curl -X POST http://localhost:8888/v1/messages \ -H "Content-Type: application/json" \ -H "x-api-key: your-copilot-token" \ -d '{ "model": "claude-3-5-sonnet-20241022", "messages": [{"role": "user", "content": "Hello!"}], "max_tokens": 1024 }' ``` ### 获取模型列表 ```bash curl http://localhost:8888/v1/models ``` ### 代理配置示例 ```yaml proxy: socks5://127.0.0.1:1080 providers: copilot: enabled: true proxy: socks5://127.0.0.1:1080 openai: enabled: true base_url: https://api.openai.com/v1 api_key: your-api-key proxy: http://127.0.0.1:7890 ``` 优先级为:供应商 `proxy` > 顶层 `proxy` > `HTTP_PROXY` / `HTTPS_PROXY` / `ALL_PROXY`。 ## 项目结构 ``` copilot-proxy/ ├── src/ │ ├── main.rs # 程序入口 │ ├── config.rs # 配置管理 │ ├── auth.rs # 认证模块 │ ├── proxy.rs # 代理配置 │ ├── rate_limit.rs # 速率限制 │ ├── router.rs # 路由配置 │ ├── tokenizer.rs # Token 计数 │ ├── sse_parser.rs # SSE 解析 │ ├── routes/ # API 路由 │ │ ├── chat_completions.rs │ │ ├── embeddings.rs │ │ ├── models.rs │ │ ├── messages.rs │ │ └── usage.rs │ └── services/ # 外部服务 │ ├── copilot.rs # Copilot API │ ├── github.rs # GitHub API │ └── provider.rs # 供应商抽象 ├── config.yaml # 配置文件示例 ├── Cargo.toml └── README.md ``` ## 技术栈 - **Rust** - 编程语言 - **Axum** - Web 框架 - **Tokio** - 异步运行时 - **reqwest** - HTTP 客户端 ## 许可证 MIT License - 详见 [LICENSE](LICENSE) 文件