Skip to content

YutianGe/polyai-proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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/modelsGET /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 环境):

cmake -B build -S .
cmake --build build --config Release

配置

启动后可在 GUI 界面内直接编辑配置并点击「应用并重启」,也可手动编辑 config/config.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):
ollama serve
  1. 启动 polyai-proxy,GUI 界面自动读取配置并启动监听。

  2. 将客户端 API 地址指向代理:

# 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(stefanfrings)遵循 LGPL 许可证。

About

一个将多种 AI 服务商 API 格式相互转换并转发到本地 OpenAI 兼容后端(如 Ollama、vLLM、LM Studio)的轻量级代理服务器,带 GUI 界面。

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors