Spaces:
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. 环境设置
创建并激活 Conda 环境:
conda create -n any-api python=3.12 conda activate any-api安装依赖:
pip install -r requirements.txt
5. 配置说明
agent_example.py 通过 .env 文件读取配置。请确保 .env 文件存在于项目根目录,并包含以下变量:
# 代理服务器的基地址
# 示例: 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:
uvicorn proxyserver-fastapi:app --host 0.0.0.0 --port 7860 --reload
或者直接运行文件(如果文件中包含 if __name__ == '__main__': 块):
python proxyserver-fastapi.py
服务器将在 http://0.0.0.0:7860 上监听请求。
6.2 运行客户端示例
在代理服务器运行后,您可以在另一个终端中运行 agent_example.py 来测试代理功能:
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 密集型代理任务影响较小。