fastapi-proxy / readme.md
airsltd's picture
update
ebf2eae
|
raw
history blame
4.32 kB
# 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 密集型代理任务影响较小。