Spaces:
Sleeping
Sleeping
| # 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://<proxy_host>:<proxy_port>/v1/{protocol}/{domain}/{path}` | |
| * `<proxy_host>:<proxy_port>`: 代理服务器的地址和端口,例如 `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 密集型代理任务影响较小。 | |