# AnyAPI 代理服务器 本项目旨在实现一个多线程的 Python 代理服务器,用于中转 HTTP 请求到各种兼容 OpenAI 接口的外部 API。它提供了一个统一的访问入口,并能够处理协议转换和简化客户端配置。 ## 1. 项目简介 当用户访问中转主机 URL `http://127.0.0.1:7860/v1/{protocol}/{domain}/{path}` 时,代理服务器会将其解析并转发到实际的目标 URL `protocol://domain/path`。例如,`http://127.0.0.1:7860/v1/https/open.bigmodel.cn/api/paas/v4/chat/completions` 会被代理到 `https://open.bigmodel.cn/api/paas/v4/chat/completions`。 ## 2. 项目结构 * `proxyserver-fastapi.py`: 基于 FastAPI 实现的代理服务器核心逻辑。它负责接收客户端请求,解析代理 URL,转发请求到目标 API,并将响应返回给客户端。支持多线程并发处理。 * `agent_example.py`: 一个 Python 客户端示例,演示如何通过代理服务器调用兼容 OpenAI 接口的 API。它从 `.env` 文件中读取配置信息。 * `requirements.txt`: 项目所需的 Python 依赖库列表。 * `.env`: 环境变量配置文件,用于 `agent_example.py` 的配置。 ## 3. 技术栈 * **Python 3.12** * **FastAPI**: 用于构建高性能的异步 API。 * **httpx**: 异步 HTTP 客户端,用于向目标 API 发送请求。 * **uvicorn**: ASGI 服务器,用于运行 FastAPI 应用。 * **requests**: (在 `agent_example.py` 中使用) 同步 HTTP 客户端。 * **python-dotenv**: 用于从 `.env` 文件加载环境变量。 * **Conda**: 环境管理工具。 ## 4. 环境设置 1. **创建并激活 Conda 环境**: ```bash conda create -n any-api python=3.12 conda activate any-api ``` 2. **安装依赖**: ```bash pip install -r requirements.txt ``` ## 5. 配置说明 `agent_example.py` 通过 `.env` 文件读取配置。请确保 `.env` 文件存在于项目根目录,并包含以下变量: ```dotenv # 代理服务器的基地址 # 示例: http://localhost:7860/v1/https/generativelanguage.googleapis.com/v1beta/openai PROXY_BASE_URL="http://localhost:7860/v1/https/generativelanguage.googleapis.com/v1beta/openai" # 目标 API 的入口点(相对于目标域名的路径) # 示例: /chat/completions TARGET_API_PATH="/chat/completions" # 您的 API 密钥 YOUR_API_KEY="YOUR_ACTUAL_API_KEY_HERE" # 使用的模型名称 MODEL_NAME="gemini-2.5-flash-preview-05-20" ``` 请根据您的实际需求修改这些值。 ## 6. 如何运行 ### 6.1 启动代理服务器 在激活 `any-api` Conda 环境后,运行 `proxyserver-fastapi.py`: ```bash uvicorn proxyserver-fastapi:app --host 0.0.0.0 --port 7860 --reload ``` 或者直接运行文件(如果文件中包含 `if __name__ == '__main__':` 块): ```bash python proxyserver-fastapi.py ``` 服务器将在 `http://0.0.0.0:7860` 上监听请求。 ### 6.2 运行客户端示例 在代理服务器运行后,您可以在另一个终端中运行 `agent_example.py` 来测试代理功能: ```bash python agent_example.py ``` 这将向代理服务器发送一个示例请求,并通过代理转发到配置的目标 API。 ## 7. URL 格式说明 代理服务器期望的 URL 格式为:`http://:/v1/{protocol}/{domain}/{path}` * `:`: 代理服务器的地址和端口,例如 `127.0.0.1:7860`。 * `v1`: 版本标识符。 * `{protocol}`: 目标 API 的协议(例如 `http` 或 `https`)。 * `{domain}`: 目标 API 的域名(例如 `open.bigmodel.cn`)。 * `{path}`: 目标 API 的具体路径(例如 `/api/paas/v4/chat/completions`)。 代理服务器会将此 URL 转换为 `protocol://domain/path` 并进行转发。 ## 8. 注意事项 * **API 密钥安全**: 永远不要将 API 密钥硬编码到代码中。本项目使用 `.env` 文件进行管理,请确保 `.env` 文件不被提交到版本控制系统(已在 `.gitignore` 中配置)。 * **错误处理**: 代理服务器包含了基本的错误处理机制,但生产环境中可能需要更健壮的日志记录和监控。 * **性能**: FastAPI 和 httpx 提供了异步能力,有助于提高并发性能。Python GIL 对 CPU 密集型任务有影响,但对于 I/O 密集型代理任务影响较小。