基于 Cloudflare Workers 的 LLM API 反向代理

940 words5 min read

本项目是一个基于 Cloudflare Workers 构建的轻量级 LLM API 反向代理网关。它旨在解决国内访问受限问题,并统一了不同大模型平台的调用方式。

核心特性:

  • 🚀 多平台支持:一站式集成 OpenAI, Gemini, Groq, Mistral 等主流模型。
  • 接口统一:完全兼容 OpenAI API 规范,可直接使用 OpenAI SDK 或 LangChain 调用。
  • 🛡️ 隐私安全:代码开源,基于 Serverless 部署,不保存任何用户数据。
  • 🌍 无缝访问:解决部分 API 的地理位置限制(Geo-blocking)。
LLM API Proxy Architecture

快速开始 (Quick Start)

Demo API Endpoint: https://llmapi.ultrasev.com

1. API 路由说明

为了区分不同的底层模型服务商,请使用以下 Base URL。这可以配合 ChatBox沉浸式翻译 等支持自定义 OpenAI 接口的工具使用。

平台Base URL (路由地址)
OpenAIhttps://llmapi.ultrasev.com/v2/openai
Geminihttps://llmapi.ultrasev.com/v2/gemini
Groqhttps://llmapi.ultrasev.com/v2/groq
Mistralhttps://llmapi.ultrasev.com/v2/mistral

2. 调用示例 (Python)

由于接口完全兼容 OpenAI 规范,你只需要修改 base_urlapi_key 即可切换不同模型。

Gemini API 调用

from openai import OpenAI

# 配置 Gemini 的 API Key 和 Base URL
api_key = "YOUR_GEMINI_API_KEY"
base_url = "[https://llmapi.ultrasev.com/v2/gemini](https://llmapi.ultrasev.com/v2/gemini)"
model = "gemini-1.5-flash"

client = OpenAI(base_url=base_url, api_key=api_key)

response = client.chat.completions.create(
    model=model,
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is the meaning of life?"}
    ],
    temperature=0.7,
    max_tokens=1024,
    # top_p=1,
)

print(response.choices[0].message.content)

Mistral API 示例

from openai import OpenAI

# 配置 Mistral 的 API Key 和 Base URL
api_key = "YOUR_MISTRAL_API_KEY"
base_url = "[https://llmapi.ultrasev.com/v2/mistral](https://llmapi.ultrasev.com/v2/mistral)"
model = "open-mistral-7b"

client = OpenAI(base_url=base_url, api_key=api_key)

response = client.chat.completions.create(
    model=model,
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Explain quantum physics in 30 words."}
    ],
    stream=True  # 启用流式输出
)

print("Stream response:")
for chunk in response:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="", flush=True)

部署指南

如果你希望拥有独立的 API 服务,可以轻松部署自己的 Worker。

  1. 创建 Worker:登录 Cloudflare Dashboard,创建一个新的 Worker。
  2. 复制代码:将 api/llm_api_proxy.js 文件中的所有代码复制并粘贴到 Worker 的编辑器中。
  3. 部署:点击 "Save and Deploy"。
  4. 配置域名 (可选但推荐):由于默认的 workers.dev 域名在国内访问不稳定,建议绑定自定义域名。
    • 进入 Worker 设置 -> Triggers -> Custom Domains
    • 点击 "Add Custom Domain" 填入你的子域名即可。
Cloudflare Custom Domain Settings

视频教程

如果你更喜欢视频指引,可以查看我的 YouTube 教程:

使用 Cloudflare Worker 搭建 LLM API 反向代理

常见问题 (FAQ)

Q1: 为什么 Gemini API 报错 "User location is not supported"?

A: 这是一个常见问题。即使使用了 Cloudflare,Google 也会校验请求发起的地理位置。Cloudflare Worker 是边缘计算,它会尽可能在离用户最近的节点运行。

  • 原因:如果你的请求被分发到了 Google AI 不支持的地区(例如中国香港节点),API 就会拒绝访问。
  • 解决方法
    1. 尝试使用美国或其他支持地区的 IP 访问你的 Worker 域名。
    2. 在 Cloudflare 后台配置路由规则,强制某些流量走特定节点(较复杂,不推荐)。
  • 参考 Issue 讨论#11, #4

注意事项

  • 网络连接:如前所述,workers.dev 域名在国内通常无法直连,请务必绑定自定义域名。
  • 数据隐私:关于 Groq 的代理,本项目通过 Vercel + FastAPI 额外封装了一层(用于处理签名等逻辑)。该层仅做透明转发,绝不保存任何数据。如果你介意,可以参考源码自行部署该中间件。
  • 功能限制:目前部分模型的流式输出(Stream)可能存在兼容性问题,欢迎提交 Pull Request 修复。

参考 issues:

Git 项目地址:https://github.com/ultrasev/llmproxy