# polyai-proxy **Repository Path**: YuTianGe/polyai-proxy ## Basic Information - **Project Name**: polyai-proxy - **Description**: 一个将多种 AI 服务商 API 格式相互转换并转发到本地 OpenAI 兼容后端(如 Ollama、vLLM、LM Studio)的轻量级代理服务器。 - **Primary Language**: C++ - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-23 - **Last Updated**: 2026-03-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # polyai-proxy 一个将多种 AI 服务商 API 格式相互转换并转发到本地 OpenAI 兼容后端(如 Ollama、vLLM、LM Studio)的轻量级代理服务器,带 GUI 界面。 ## 功能 - 接收各服务商格式的 API 请求,统一转换为 OpenAI Chat Completions 格式转发到本地后端 - 将后端响应转换回对应服务商格式返回给客户端 - 支持流式(SSE)与非流式响应 - 系统托盘 + 主窗口 GUI,实时日志,内联配置编辑,一键应用重启 - Strategy 模式架构:各服务商独立 Handler,易于扩展 ## 支持的服务商协议 | 服务商 | 协议 | 端点 | |--------|------|------| | **Anthropic** | Messages API | `POST /v1/messages` | | | 流式 Messages | `POST /v1/messages`(stream: true)| | | Token 计数 | `POST /v1/messages/count_tokens` | | | 模型列表 | `GET /v1/models`、`GET /v1/models/{id}` | | | 旧版 Complete | `POST /v1/complete` | | | 文件透传 | `* /v1/files/**` | | **Google Gemini** | generateContent | `POST /v1beta/models/{model}:generateContent` | | | streamGenerateContent | `POST /v1beta/models/{model}:streamGenerateContent` | | **AWS Bedrock** | Converse | `POST /model/{modelId}/converse` | | | Converse Stream | `POST /model/{modelId}/converse-stream` | | **Azure OpenAI** | Chat Completions | `POST /openai/deployments/{id}/chat/completions` | ## 适用客户端 - **Claude Code** / Anthropic SDK(Python、Node.js) - **Google Generative AI SDK**(Python、Node.js) - **AWS Boto3 Bedrock Runtime**(自定义反序列化) - **Azure OpenAI SDK** - 任何兼容以上协议的工具(LangChain、LlamaIndex 等) ## 依赖 - CMake 3.16+ - Qt 6(Core、Network、Widgets 模块) - C++17 兼容编译器(MSVC 2022、GCC 9+、Clang 10+) ## 构建 推荐使用 Qt Creator 打开 `CMakeLists.txt` 后直接构建。 命令行构建(需 MSVC 环境): ```bash cmake -B build -S . cmake --build build --config Release ``` ## 配置 启动后可在 GUI 界面内直接编辑配置并点击「应用并重启」,也可手动编辑 `config/config.ini`: ```ini [listener] ; 代理监听端口,AI 客户端将连接此端口 port=8080 readTimeout=120000 maxRequestSize=10485760 minThreads=1 maxThreads=20 [openai] ; OpenAI 兼容后端地址(如 Ollama / vLLM / LM Studio) api_base=http://localhost:11434 ; 后端 API Key(无需认证时填 none) api_key=none ; 当请求未指定模型时使用的默认模型 default_model=qwen2.5-72b-instruct ``` ## 使用 1. 启动本地 OpenAI 兼容后端(例如 Ollama): ```bash ollama serve ``` 2. 启动 polyai-proxy,GUI 界面自动读取配置并启动监听。 3. 将客户端 API 地址指向代理: ```bash # Claude Code / Anthropic SDK export ANTHROPIC_BASE_URL=http://127.0.0.1:8080 export ANTHROPIC_API_KEY=any claude # Google Gemini SDK(Python) import google.generativeai as genai genai.configure(api_key="any", client_options={"api_endpoint": "http://127.0.0.1:8080"}) # Azure OpenAI SDK from openai import AzureOpenAI client = AzureOpenAI(azure_endpoint="http://127.0.0.1:8080", api_key="any", api_version="2024-02-01") ``` ## 项目结构 ``` polyai-proxy/ ├── CMakeLists.txt ├── config/ │ └── config.ini # 配置文件 ├── src/ │ ├── main.cpp # 程序入口 │ ├── mainwindow.h/.cpp # GUI 主窗口 + 系统托盘 │ ├── abstractproviderhandler.h/.cpp # 抽象基类(共享 NAM、透传) │ ├── claudeproxyhandler.h/.cpp # 路由层(分发到各 Handler) │ ├── anthropichandler.h/.cpp # Anthropic Messages API │ ├── geminihandler.h/.cpp # Google Gemini API │ ├── bedrockhandler.h/.cpp # AWS Bedrock Converse API │ └── azurehandler.h/.cpp # Azure OpenAI API ├── scripts/ │ └── test_proxy.py # 测试脚本 └── third_party/ └── httpserver/ # stefanfrings Qt HTTP Server ``` ## 许可 本项目使用的 [Qt HTTP Server](https://github.com/stefanfrings/QtWebApp)(stefanfrings)遵循 LGPL 许可证。