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 环境:

    conda create -n any-api python=3.12
    conda activate any-api
    
  2. 安装依赖:

    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 的协议(例如 httphttps)。
  • {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 密集型代理任务影响较小。