# AI Reverse Proxy **Repository Path**: xJetRy/ai-reverse-proxy ## Basic Information - **Project Name**: AI Reverse Proxy - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-06 - **Last Updated**: 2025-07-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI Proxy Server 一个用Go语言编写的AI模型代理服务器,专为macOS设计,提供HTTPS加密的API代理功能。 ## 功能特性 - 🔐 **自动HTTPS证书管理** - 自动检查并生成SSL证书,支持内存动态生成 - 📦 **嵌入式证书支持** - CA证书文件嵌入二进制,无需外部依赖 - 🏠 **Hosts文件管理** - 自动添加域名解析到本地hosts文件 - 🔑 **CA证书信任** - 自动检查并安装CA根证书到系统钥匙串 - 🔄 **模型ID透明替换** - 将客户端请求的模型ID替换为目标服务器的模型ID - 🌊 **流式响应支持** - 完整支持OpenAI兼容的流式和非流式响应 - ⚙️ **多级配置** - 支持命令行参数 > 配置文件 > 默认值的优先级配置 ## 快速开始 ### 准备CA证书 **方式一:生成新的CA证书** 使用OpenSSL生成CA根证书和私钥: ```bash # 创建证书目录 mkdir -p cert # 生成CA私钥 openssl genrsa -out cert/ca.key 2048 # 生成CA根证书 openssl req -new -x509 -key cert/ca.key -out cert/ca.pem -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=MyProxy/CN=MyProxy CA" # 生成api.deepseek.com域名证书 openssl genrsa -out cert/api.deepseek.com.key 2048 openssl req -new -key cert/api.deepseek.com.key -out cert/api.deepseek.com.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=MyProxy/CN=api.deepseek.com" openssl x509 -req -in cert/api.deepseek.com.csr -CA cert/ca.pem -CAkey cert/ca.key -CAcreateserial -out cert/api.deepseek.com.pem -days 365 -extensions v3_req -extfile <(echo -e "subjectAltName=DNS:api.deepseek.com") ``` **方式二:嵌入式证书(推荐)** 将CA根证书和私钥文件放入项目的`cert`目录,构建时会自动嵌入到二进制文件中: - `cert/ca.pem` - CA根证书 - `cert/ca.key` - CA私钥 **方式三:外部证书文件** 如果使用已构建的二进制文件,可在运行目录创建`cert`目录并放入证书文件。 ### 配置文件 创建 `config.yaml` 文件: ```yaml # 代理程序配置文件 domain: "api.deepseek.com" # 代理域名 target: "https://newapi.xjetry.fun" # 目标API服务器 model: "gpt-4" # 对外暴露的模型名称 target_model: "deepseek-v3" # 实际转发的模型名称 ca_file: "cert/ca.pem" # CA证书文件路径(可选) ca_key_file: "cert/ca.key" # CA私钥文件路径(可选) api_key: "sk-your-api-key-here" # API密钥(可选) ``` ### 运行程序 ```bash # 直接运行二进制文件(推荐) sudo ./proxy-macos-arm64 -d api.deepseek.com -t https://your-base-url -m gpt-4 -M deepseek-v3 # 使用自定义CA证书和API密钥 sudo ./proxy-macos-arm64 -d api.deepseek.com -t https://your-base-url -m gpt-4 -M deepseek-v3 -ca /path/to/ca.pem -cakey /path/to/ca.key -ak sk-your-api-key # 使用配置文件运行 sudo ./proxy-macos-arm64 # 从源码运行 sudo go run . ``` **macOS用户注意事项:** 如果下载的二进制文件无法运行,提示"无法打开,因为Apple无法检查其是否包含恶意软件",请使用以下命令移除quarantine属性: ```bash # 移除quarantine属性 sudo xattr -rd com.apple.quarantine ./proxy-macos-arm64 # 然后正常运行 sudo ./proxy-macos-arm64 ``` ## 命令行参数 | 参数 | 长参数 | 说明 | 示例 | |------|--------|------|------| | `-d` | domain | 代理域名 | `-d api.deepseek.com` | | `-t` | target | 目标API服务器 | `-t https://api.example.com` | | `-m` | model | 对外暴露的模型名称 | `-m gpt-4` | | `-M` | target_model | 实际转发的模型名称 | `-M deepseek-v3` | | `-ca` | ca | CA证书文件路径 | `-ca /path/to/ca.pem` | | `-cakey` | cakey | CA私钥文件路径 | `-cakey /path/to/ca.key` | | `-ak` | api_key | API密钥 | `-ak sk-your-api-key` | ## API接口 ### 获取模型列表 ```http GET https://your-domain/models ``` 响应: ```json { "object": "list", "data": [{ "id": "gpt-4", "object": "model", "owned_by": "deepseek" }] } ``` ### 聊天完成 ```http POST https://your-domain/chat/completions Content-Type: application/json { "model": "gpt-4", "messages": [ {"role": "user", "content": "Hello!"} ], "stream": false } ``` ## 构建二进制文件 ### macOS ARM64 (Apple Silicon) **包含嵌入证书的版本(推荐用于分发)** ```bash # 构建前确保cert目录包含CA证书文件 # 构建包含嵌入证书的版本 GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w" -o proxy-macos-arm64-with-cert # 基本构建(包含嵌入证书) GOOS=darwin GOARCH=arm64 go build -o proxy-macos-arm64-with-cert ``` **不包含嵌入证书的版本(需要外部证书文件)** ```bash # 构建时排除嵌入证书,使用构建标签 GOOS=darwin GOARCH=arm64 go build -tags=nocert -ldflags="-s -w" -o proxy-macos-arm64-no-cert # 基本构建(不包含嵌入证书) GOOS=darwin GOARCH=arm64 go build -tags=nocert -o proxy-macos-arm64-no-cert ``` **注意:** - **包含证书版本**:构建前确保`cert`目录包含必要的证书文件(ca.pem, ca.key),这样证书会自动嵌入到二进制文件中,无需外部文件即可运行 - **不包含证书版本**:需要在运行时通过`-ca`和`-cakey`参数指定证书文件路径,或在运行目录创建`cert`目录并放入证书文件 - 构建过程不会包含`cert`目录到最终的二进制文件中,只会嵌入证书文件内容 ### 其他平台 **包含嵌入证书的版本** ```bash # macOS Intel (x86_64) GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w" -o proxy-macos-amd64-with-cert # Linux ARM64 GOOS=linux GOARCH=arm64 go build -ldflags="-s -w" -o proxy-linux-arm64-with-cert # Linux x86_64 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o proxy-linux-amd64-with-cert ``` **不包含嵌入证书的版本** ```bash # macOS Intel (x86_64) GOOS=darwin GOARCH=amd64 go build -tags=nocert -ldflags="-s -w" -o proxy-macos-amd64-no-cert # Linux ARM64 GOOS=linux GOARCH=arm64 go build -tags=nocert -ldflags="-s -w" -o proxy-linux-arm64-no-cert # Linux x86_64 GOOS=linux GOARCH=amd64 go build -tags=nocert -ldflags="-s -w" -o proxy-linux-amd64-no-cert ``` ## 项目结构 ``` proxy/ ├── main.go # 主入口文件 ├── config.go # 配置管理 ├── cert.go # 证书管理 ├── hosts.go # Hosts文件管理 ├── server.go # HTTP服务器 ├── config.yaml # 配置文件 ├── go.mod # Go模块定义 └── cert/ # 证书目录 ├── ca.pem # CA根证书 └── ca.key # CA私钥 ``` ## 工作原理 1. **启动检查** - 程序启动时检查CA证书信任状态 2. **Hosts管理** - 自动添加域名解析到本地`127.0.0.1` 3. **证书处理** - 检查现有证书或在内存中动态生成 4. **服务启动** - 启动HTTPS服务器监听443端口 5. **请求代理** - 接收客户端请求,替换模型ID后转发到目标服务器 6. **响应转发** - 将目标服务器的响应原样返回给客户端 ## 注意事项 - 需要管理员权限运行(sudo)以便: - 绑定443端口 - 修改hosts文件 - 安装CA证书到系统钥匙串 - 确保CA证书格式正确(支持PKCS8和PKCS1格式的RSA私钥) - 首次运行时会提示输入管理员密码 ## 依赖 - Go 1.21+ - gopkg.in/yaml.v3 - golang.org/x/term ## 许可证 本项目使用 MIT 许可证。