├── wrangler.toml
├── LICENSE
├── README.md
├── README_OLD.md
└── openai.html
/wrangler.toml:
--------------------------------------------------------------------------------
1 | name = "openai-webui-lite"
2 | main = "worker.js"
3 | compatibility_date = "2024-01-01"
4 |
5 | [env.production.vars]
6 | # 在 Cloudflare Dashboard 中配置敏感信息
7 | # API_KEYS = "key1,key2,key3"
8 | # API_BASE = "https://generativelanguage.googleapis.com"
9 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 icheer
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # OpenAI WebUI Lite - 自部署的 OpenAI API 代理服务
2 |
3 | [](https://dash.deno.com/)
4 | [](https://workers.cloudflare.com/)
5 | [](#license)
6 | [](https://platform.openai.com/)
7 |
8 | 一个简单、轻量且功能强大的 OpenAI API 代理服务。基于 Deno Deploy / Cloudflare Workers 构建,无需服务器,只需一个域名和 API Key,即可免费部署属于你自己的 AI 助手。
9 |
10 | ---
11 |
12 | ## ✨ 核心特性
13 |
14 | 本项目致力于提供“养老级”的稳定体验,功能丰富且不失简洁:
15 |
16 | - 🚀 **一键部署**:基于 Serverless 架构,免费、快速,无需维护服务器。
17 | - 🔐 **安全访问**:支持**共享密码**(长期使用)和**演示密码**(限制频率),保护 API Key 不泄露。
18 | - 💬 **流畅对话**:支持打字机流式响应 (Streaming),体验丝滑。
19 | - 🌐 **多模型支持**:兼容 OpenAI (GPT-4o/5)、Google (Gemini)、Claude、以及各类国产大模型(Qwen/DeepSeek等)。
20 | - 🔍 **联网搜索**:集成 Tavily Search API,让 AI 能够获取实时网络信息作为回答依据。
21 | - 🖥️ **全端适配**:精心设计的响应式 UI,完美适配桌面端和移动端。
22 | - 📱 **PWA 支持**:支持渐进式 Web 应用 (PWA) 标准,移动端可将网页添加到桌面,获得原生 App 般的沉浸体验。
23 | - 🛡️ **隐私优先**:聊天记录仅存储在浏览器本地 (IndexedDB),不上传服务器。
24 | - 📸 **一键分享**:自动生成精美的问答长图,方便社交分享。
25 | - 🏷️ **智能管理**:根据对话内容自动生成标题,支持两轮对话(一问一答+追问),保持界面清爽。
26 | - 🎨 **高度定制**:支持自定义网站标题、Favicon 图标以及模型列表。
27 |
28 | ## 🖼️ 界面预览
29 |
30 | 
31 | 
32 |
33 | ## 🚀 部署指南
34 |
35 | ### 准备工作
36 | 1. **API Key**: 准备好 OpenAI 或其他兼容服务的 API Key。
37 | 2. **域名**: 一个用于绑定的域名(推荐,可避免官方域名被墙)。
38 |
39 | ### ⚡ 一键部署
40 |
41 | 点击下方按钮,即可快速部署:
42 |
43 | [](https://deploy.workers.cloudflare.com/?url=https://github.com/icheer/openai-webui-lite)
44 |
45 | [](https://dash.deno.com/new?url=https://github.com/icheer/openai-webui-lite&entrypoint=worker.js)
46 |
47 | > 首次部署需要授权访问您的 GitHub 账户,系统会自动 Fork 本仓库并完成部署。
48 |
49 | ### 部署方式 A:GitHub 集成部署 (推荐)
50 | > **特点**:支持自动更新,当您同步了上游代码后,服务会自动重新部署。
51 | > **支持平台**:Deno Deploy / Cloudflare Workers
52 |
53 | 1. **Fork 项目**:将本项目 Fork 到您的 GitHub 仓库。
54 | 2. **创建项目**:
55 | - **Deno Deploy**: 登录 [Deno Dash](https://dash.deno.com/) -> New Project -> 选择 Fork 的仓库 -> Entry Point 选 `worker.js` -> Deploy。
56 | - **Cloudflare Workers**: 登录 [Cloudflare Dash](https://dash.cloudflare.com/) -> Workers & Pages -> Create application -> Connect to Git -> 选择仓库 -> Deploy。
57 |
58 | ### 部署方式 B:手动复制部署 (Playground)
59 | > **特点**:最简单,无需 GitHub 账号,直接复制粘贴代码即可。
60 | > **支持平台**:Deno Deploy / Cloudflare Workers
61 |
62 | 1. **复制代码**:复制本项目 `worker.js` 的全部内容。
63 | 2. **创建项目**:
64 | - **Deno Deploy**: 登录 [Deno Dash](https://dash.deno.com/) -> New Playground -> 粘贴代码 -> Save & Deploy。
65 | - **Cloudflare Workers**: 登录 [Cloudflare Dash](https://dash.cloudflare.com/) -> Workers & Pages -> Create Worker -> Edit code -> 粘贴代码 -> Deploy。
66 |
67 | ### 后续配置 (通用)
68 | 1. **绑定域名**:在项目设置中绑定您的自定义域名(自动申请 SSL)。
69 | - *Deno Deploy*: Settings -> Domains
70 | - *Cloudflare Workers*: Settings -> Triggers -> Custom Domains
71 | 2. **配置变量**:在项目设置中添加环境变量(见下文配置章节)。
72 | - *Deno Deploy*: Settings -> Environment Variables
73 | - *Cloudflare Workers*: Settings -> Variables
74 |
75 | > **⚠️ 平台选择建议**:
76 | > - **Deno Deploy**: 部署最简单,且节点 IP 通常未被 OpenAI/Google 封锁,可直接调用官方 API。
77 | > - **Cloudflare Workers**: 全球节点更多,连接速度可能更快,但调用官方 API 可能需要自备代理或使用中转。
78 | >
79 | > **⚠️ 中国大陆访问提示**:无论选择哪个平台,原生域名 (`*.deno.dev`, `*.workers.dev`) 在国内通常无法访问。请务必绑定自定义域名,并将域名托管在 Cloudflare,开启“小黄云”代理模式(CDN),即可在国内正常访问。
80 |
81 | ---
82 |
83 | ## ⚙️ 配置说明 (环境变量)
84 |
85 | 本项目主要通过环境变量进行配置,优先级高于代码中的默认值。
86 |
87 | | 变量名 | 必填 | 说明 | 示例 |
88 | | :--- | :---: | :--- | :--- |
89 | | `SECRET_PASSWORD` | 否 | **共享密码**。设置后,用户需输入此密码才能使用您配置的 API Key。适合家人朋友共享。 | `my-secret-pwd` |
90 | | `API_KEYS` | 否 | **API Key 池**。多个 Key 用英文逗号 `,` 分隔,系统会自动轮询使用,实现简单的负载均衡。 | `sk-key1,sk-key2` |
91 | | `MODEL_IDS` | **是** | **模型列表**。定义前端下拉框显示的模型。支持 `ID=显示名称` 格式。 | `gpt-4o,gemini-2.5-pro` |
92 | | `API_BASE` | 否 | **接口地址**。默认为 `https://api.openai.com`。如使用中转服务需修改此项。 | `https://api.openai.com` |
93 | | `TAVILY_KEYS` | 否 | **联网搜索 Key**。配置后前端会出现“联网搜索”选项。获取地址:[tavily.com](https://tavily.com/) | `tvly-xxxx` |
94 | | `TITLE` | 否 | **网站标题**。自定义浏览器标签页标题。 | `我的 AI 助手` |
95 | | `DEMO_PASSWORD` | 否 | **演示密码**。用于公开演示,有频率限制。 | `demo123` |
96 | | `DEMO_MAX_TIMES_PER_HOUR` | 否 | 演示密码每小时最大调用次数,默认 15。 | `20` |
97 |
98 | ### 🔌 常见服务商配置参考
99 |
100 | | 服务商 | API_BASE | API_KEYS 示例 | MODEL_IDS 示例 | 备注 |
101 | | :--- | :--- | :--- | :--- | :--- |
102 | | **OpenAI** | `https://api.openai.com` | `sk-proj-xxx` | `gpt-4o,gpt-4o-mini,o1-preview` | 推荐 Deno 部署 |
103 | | **Gemini** | `https://generativelanguage.googleapis.com` | `AIzaSyxxx` | `gemini-2.5-pro,gemini-2.5-flash` | 推荐 Deno 部署 |
104 | | **心流 AI** | `https://apis.iflow.cn` | `sk-xxx` | `qwen3-max,deepseek-v3` | 国产模型聚合,Cloudflare 部署即可 |
105 | | **OpenRouter** | `https://openrouter.ai/api` | `sk-or-xxx` | `anthropic/claude-sonnet-4.5` | 聚合平台 |
106 | | **DeepSeek** | `https://api.deepseek.com` | `sk-xxx` | `deepseek-chat,deepseek-coder` | 国产之光 |
107 |
108 | > **💡 资源推荐**:如果您需要免费且稳定的国产大模型 API(如 Qwen, DeepSeek),推荐尝试 [心流 AI](https://iflow.cn/?invite_code=vNEjKzbSTbhgWooCw15Bsw%3D%3D&open=setting),官方宣称 API 永久免费(但 API Key 有效期为7天,过期后需手动重置新 Key),支持 Cloudflare Workers 稳定调用。
109 |
110 | ---
111 |
112 | ## 📚 使用指南
113 |
114 | ### Web 界面使用
115 | 1. **访问**:打开您部署的域名。
116 | 2. **认证**:
117 | - 如果配置了 `SECRET_PASSWORD`,输入密码即可使用服务器端的 API Key。
118 | - 如果未配置密码,您可以直接输入自己的 OpenAI API Key 使用。
119 | 3. **对话**:选择模型,输入问题。支持 Markdown、代码高亮。
120 | 4. **功能**:
121 | - **联网搜索**:勾选后,AI 会先搜索网络信息再回答。
122 | - **追问**:一问一答后,支持一次追问,保持上下文。
123 | - **分享**:点击右上角分享按钮,生成长图。
124 |
125 | ### API 代理使用
126 | 本项目也完全兼容 OpenAI API 格式,可作为 API 网关使用。
127 |
128 | - **Endpoint**: `https://your-domain.com/v1/chat/completions`
129 | - **Authorization**: `Bearer YOUR_SECRET_PASSWORD` (如果设置了密码) 或 `Bearer sk-xxx` (直接透传)
130 |
131 | **curl 示例:**
132 | ```bash
133 | curl https://your-domain.com/v1/chat/completions \
134 | -H "Content-Type: application/json" \
135 | -H "Authorization: Bearer your-password" \
136 | -d '{
137 | "model": "gpt-4o",
138 | "messages": [{"role": "user", "content": "Hello!"}],
139 | "stream": true
140 | }'
141 | ```
142 |
143 | ---
144 |
145 | ## 🙋♂️ 常见问题 (FAQ)
146 |
147 | **Q: 部署需要付费吗?**
148 | A: Deno Deploy 和 Cloudflare Workers 都有免费额度,一般个人使用完全够用。
149 |
150 | **Q: 为什么我的自定义域名在国内无法访问?**
151 | A: Deno Deploy 和 Cloudflare Workers 的默认域名 (`*.deno.dev`, `*.workers.dev`) 在国内通常是被墙的。您必须绑定自己的域名。如果是 Deno Deploy,建议将域名 DNS 托管在 Cloudflare 并开启 CDN(橙色云朵),这样国内用户可以通过 Cloudflare 的节点访问。
152 |
153 | **Q: 为什么只支持两轮对话(提问+追问)?**
154 | A: 这是一个设计选择。为了保持界面极简和 token 消耗可控,我们限制了上下文长度。对于大多数日常查询,两轮对话已经足够。如果需要长对话,建议在“角色设定”中输入背景信息。
155 |
156 | **Q: 历史记录保存在哪里?会泄露吗?**
157 | A: 所有聊天记录仅存储在您浏览器的 **IndexedDB** 中,**绝不会**上传到任何服务器。这意味着如果您清除浏览器缓存或更换设备/浏览器,历史记录会丢失。
158 |
159 | **Q: 为什么推荐 Deno Deploy 而不是 Cloudflare Workers?**
160 | A: 虽然两者都支持,但 Deno Deploy 的出口 IP 质量目前更好,很少被 OpenAI 或 Google 封锁,因此可以直接调用官方 API 而不需要额外的代理层。
161 |
162 | **Q: 如何配置多个 API Key?**
163 | A: 在环境变量 `API_KEYS` 中填入多个 Key,用逗号分隔(如 `key1,key2,key3`)。程序会在每次请求时随机选择一个 Key,实现简单的负载均衡和防封号。
164 |
165 | **Q: 演示密码 (Demo Password) 有什么用?**
166 | A: 如果你想把网站分享给陌生人体验,但又怕 API 被刷爆,可以设置 `DEMO_PASSWORD`。使用该密码登录的用户,每小时只能进行有限次(默认15次)对话。
167 |
168 | **Q: 支持哪些模型?**
169 | A: 理论上支持所有兼容 OpenAI Chat Completion 接口的模型。您只需在 `MODEL_IDS` 环境变量中添加模型 ID 即可。
170 |
171 | **Q: 如何开启联网搜索功能?**
172 | A: 在环境变量中配置 `TAVILY_KEYS`,然后在 Web 界面勾选"联网搜索"选项即可。联网搜索会为 AI 提供实时的网络信息作为上下文,提升回答的时效性和准确性。
173 |
174 | **Q: Tavily API Key 如何获取?**
175 | A: 访问 [Tavily](https://tavily.com/) 注册账号并获取 API Key。可以配置多个 Key 用逗号分隔,系统会自动轮换使用。
176 |
177 | **Q: 如何自定义界面标题和 Favicon?**
178 | A: 通过环境变量 `TITLE` 设置自定义标题,如 `TITLE=My AI Assistant`。标题会同时影响网页标题和 Favicon 的显示样式。
179 |
180 | **Q: TITLE 环境变量是如何影响 Favicon 的?**
181 | A: `TITLE` 中包含 Gemini 或 Qwen 字样时(忽略大小写),网站 Favicon 会自动变为相应的模型 Logo,否则 Logo 默认为 ChatBot 的样式。
182 |
183 | ## 📄 许可证
184 |
185 | 本项目采用 [MIT License](LICENSE) 开源。欢迎 Fork 和 Star!
186 |
--------------------------------------------------------------------------------
/README_OLD.md:
--------------------------------------------------------------------------------
1 | # OpenAI WebUI Lite - 自部署的 OpenAI API 代理服务
2 |
3 | [](https://dash.deno.com/)
4 | [](https://workers.cloudflare.com/)
5 | [](#license)
6 | [](https://platform.openai.com/)
7 |
8 | 一个简单易用的 Deno Deploy / Cloudflare Worker 程序,让您能够快速部署自己的 OpenAI API 代理服务。只需要一个域名和 OpenAI API Key,即可免费为家人朋友提供 AI 问答服务。
9 |
10 | > 🎯 **何种情况下推荐使用 Deno Deploy 部署**
11 | > Deno Deploy 部署简单快捷,且在中国境内(及港澳地区)没有边缘节点,因此可以流畅代理请求发往 OpenAI、Gemini 官方 API 而不会因地区原因遭到拒绝。 因此代理上述官方 API 时首选 Deno Deploy 方式部署。
12 |
13 | > ⚠️ **中国大陆访问注意事项**
14 | > 由于 Deno Deploy 的 IPv4 地址在中国大陆地区无法直接访问,即使使用自定义域名 CNAME 解析也无法绕过此限制。如需确保中国大陆地区用户正常访问,建议将域名托管至 Cloudflare,并在 DNS 设置中启用代理模式(橙色云朵图标),通过 Cloudflare CDN 进行流量代理,代理至 Deno Deploy 的 IP。
15 |
16 | > 💡 **推荐使用心流 AI 获取免费 API**
17 | > 推荐使用阿里巴巴旗下的 [心流 AI](https://iflow.cn/?invite_code=vNEjKzbSTbhgWooCw15Bsw%3D%3D&open=setting) 获取免费的国产开源大模型 API Key。
18 | >
19 | > - **API 文档**: [https://platform.iflow.cn/docs/](https://platform.iflow.cn/docs/)
20 | > - **API_BASE**: `https://apis.iflow.cn`
21 | > - **API_KEYS**: 在 [心流 - 我的账户](https://iflow.cn/?invite_code=vNEjKzbSTbhgWooCw15Bsw%3D%3D&open=setting) 注册后申请
22 | > - **可用模型**: Qwen3-Max、Qwen3-Coder-Plus、Qwen3-VL-Plus、GLM-4.6、Kimi-K2、DeepSeek-V3.2-Exp、DeepSeek-R1 等国产大模型 ([完整列表](https://platform.iflow.cn/models))
23 | > - **注意事项**:
24 | > - 心流的 API Key 会在一段时间(约为七天)后自动过期(防滥用措施),过期后需在设置页面手动重置
25 | > - 每个 Key 最多同时发起一个请求,超出限制会返回 429 错误码
26 | > - 如果使用心流 AI 则更推荐 Cloudflare Workers 部署
27 |
28 | 请合理使用 AI 资源,避免滥用!
29 |
30 | ## ✨ 特性
31 |
32 | - 🚀 **一键部署** - 基于 Deno Deploy / Cloudflare Workers,免费且快速
33 | - 🔐 **密码保护** - 支持共享密码,保护您的 API Key
34 | - 🎯 **演示模式** - 支持临时演示密码,带有调用次数限制
35 | - 💬 **实时对话** - 流式响应,支持打字机效果
36 | - 📱 **响应式设计** - 完美适配桌面端和移动端
37 | - 💾 **本地存储** - 基于 IndexedDB 的持久化历史记录
38 | - 🎨 **极简界面** - 养老版 OpenAI Chat,简洁易用
39 | - 🌐 **多模型支持** - 支持 GPT、Gemini、Qwen 等多种 AI 模型
40 | - 🔍 **联网搜索** - 集成 Tavily 搜索,为 AI 提供实时网络信息
41 | - 📸 **分享问答** - 一键生成问答截图,方便社交分享
42 | - 🏷️ **智能命名** - 根据问答内容自动生成会话标题,便于查找管理
43 | - 🔠 **自定义标题** - 支持自定义界面标题和 Favicon
44 |
45 | ## 🖼️ 截图
46 |
47 | 
48 |
49 | 
50 |
51 | ## 🎯 功能说明
52 |
53 | ### 核心功能
54 |
55 | - **代理服务**: 提供标准的 OpenAI API 代理端点
56 | - **Web 界面**: 内置精美的聊天界面
57 | - **密码机制**: 可设置共享密码,避免直接暴露 API Key
58 | - **流式响应**: 实时显示 AI 回答,提升用户体验
59 |
60 | ### 使用特点
61 |
62 | - 支持两轮问答模式:每个会话可以进行一次追问
63 | - 历史记录保存在浏览器本地(注意:更换浏览器无法共享历史)
64 | - 支持角色设定和系统提示词
65 | - 支持 Markdown 渲染和代码高亮
66 | - 支持联网搜索:通过 Tavily API 为 AI 提供实时网络信息作为上下文
67 | - 支持自定义界面标题和 Favicon,打造个性化 AI 助手
68 |
69 | ## 🚀 快速开始
70 |
71 | ### 准备工作
72 |
73 | 1. **获取 OpenAI API Key**
74 |
75 | - 访问 [OpenAI Platform](https://platform.openai.com/api-keys)
76 | - 创建新的 API Key 并妥善保存
77 |
78 | 2. **获取 Tavily API Key(可选,用于联网搜索)**
79 |
80 | - 访问 [Tavily](https://tavily.com/)
81 | - 注册账号并获取 API Key
82 | - 配置后可在问答时勾选"联网搜索",为 AI 提供实时网络信息
83 |
84 | 3. **准备域名**
85 | - 拥有一个域名(可以是免费域名)
86 | - 用于绑定到部署服务
87 |
88 | ### 部署步骤
89 |
90 | **🎯 方式一:Deno Deploy(推荐)**
91 |
92 | > ⚡ 推荐使用 Deno Deploy,部署简单快捷,访问稳定。
93 |
94 | 1. **Fork 项目到您的 GitHub**
95 |
96 | - 将项目代码上传到您的 GitHub 仓库
97 |
98 | 2. **部署到 Deno Deploy**
99 |
100 | - 访问 [Deno Deploy](https://dash.deno.com/)
101 | - 使用 GitHub 账号登录
102 | - 点击 "New Project"
103 | - 选择您的 GitHub 仓库
104 | - 设置入口文件为 `worker.js`
105 | - 点击 "Deploy"
106 |
107 | 3. **配置环境变量(推荐)**
108 |
109 | - 在 Deno Deploy 项目设置中添加环境变量:
110 | - `SECRET_PASSWORD`: 共享密码
111 | - `API_KEYS`: API Key 列表(逗号分隔)
112 | - `MODEL_IDS`: 支持的模型列表(必需,逗号分隔)
113 | - `API_BASE`: OpenAI API 基础地址(可选,默认 `https://api.openai.com`)
114 | - `DEMO_PASSWORD`: 临时演示密码(可选)
115 | - `DEMO_MAX_TIMES_PER_HOUR`: 演示密码每小时调用次数限制(可选,默认 15 次)
116 | - `TAVILY_KEYS`: 用于启用联网搜索特性
117 | - `TITLE`: 用于自定义网站标题及 Favicon
118 | - 环境变量优先级高于代码中的硬编码值
119 |
120 | 4. **绑定自定义域名(推荐)**
121 |
122 | - 在项目设置中点击 "Domains"
123 | - 添加您的自定义域名
124 | - 按照提示配置 DNS 记录
125 | - Deno Deploy 会自动提供 SSL 证书
126 |
127 | 5. **测试部署**
128 | - 访问您的 Deno Deploy 域名(如:`https://your-project.deno.dev`)
129 | - 或访问您的自定义域名
130 | - 输入共享密码测试功能
131 | - 后续为确保国内免科学访问,需套用 Cloudflare CDN
132 |
133 | **🛠️ 方式二:Cloudflare Workers(备选)**
134 |
135 | 1. **创建 Cloudflare Worker**
136 |
137 | ```bash
138 | # 登录 Cloudflare Dashboard
139 | # 进入 Workers & Pages
140 | # 点击 "Create application" -> "Create Worker"
141 | ```
142 |
143 | 2. **配置代码**
144 |
145 | - 将 `worker.js` 中的 [代码](https://github.com/icheer/openai-webui-lite/blob/main/worker.js) 复制到 Worker 编辑器
146 | - 修改以下配置:
147 |
148 | ```javascript
149 | const SECRET_PASSWORD = 'your-shared-password'; // 设置共享密码
150 | const API_KEYS = 'sk-key1,sk-key2,sk-key3'; // API Key 列表,逗号分隔
151 | const MODEL_IDS = 'gpt-5-pro,gpt-5,gpt-5-mini'; // 支持的模型列表(必需)
152 | const API_BASE = 'https://api.openai.com'; // API 基础地址(可选)
153 | ```
154 |
155 | - 更推荐以环境变量方式配置以上参数
156 |
157 | 3. **绑定自定义域名**
158 |
159 | - 在 Worker 设置中添加自定义域名
160 | - 配置 DNS 记录(需要域名托管在 Cloudflare)
161 |
162 | 4. **测试部署**
163 | - 访问您的域名
164 | - 输入共享密码测试功能
165 |
166 | ## 📚 API 使用
167 |
168 | ### 基础端点
169 |
170 | ```
171 | https://your-domain.com/v1/chat/completions
172 | ```
173 |
174 | ### REST API 调用示例
175 |
176 | ```bash
177 | # 使用共享密码
178 | curl -X POST "https://your-domain.com/v1/chat/completions" \
179 | -H "Content-Type: application/json" \
180 | -H "Authorization: Bearer your-shared-password" \
181 | -d '{
182 | "model": "gpt-4",
183 | "messages": [
184 | {
185 | "role": "user",
186 | "content": "你好,请介绍一下自己"
187 | }
188 | ]
189 | }'
190 |
191 | # 也可以使用 query 参数传递密钥
192 | curl -X POST "https://your-domain.com/v1/chat/completions?key=your-shared-password" \
193 | -H "Content-Type: application/json" \
194 | -d '{
195 | "model": "gpt-4",
196 | "messages": [
197 | {
198 | "role": "user",
199 | "content": "Hello, how can you help me?"
200 | }
201 | ]
202 | }'
203 |
204 | # 使用完整 API Key
205 | curl -X POST "https://your-domain.com/v1/chat/completions" \
206 | -H "Content-Type: application/json" \
207 | -H "Authorization: Bearer sk-your-full-api-key" \
208 | -d '{
209 | "model": "gpt-5",
210 | "messages": [
211 | {
212 | "role": "user",
213 | "content": "What is the capital of France?"
214 | }
215 | ]
216 | }'
217 | ```
218 |
219 | ### 流式请求示例
220 |
221 | ```bash
222 | curl -X POST "https://your-domain.com/v1/chat/completions" \
223 | -H "Content-Type: application/json" \
224 | -H "Authorization: Bearer your-password" \
225 | -d '{
226 | "model": "gpt-4",
227 | "messages": [
228 | {
229 | "role": "user",
230 | "content": "写一首关于编程的诗"
231 | }
232 | ],
233 | "stream": true
234 | }'
235 | ```
236 |
237 | ## 🎨 Web 界面使用
238 |
239 | 1. **访问界面**: 打开 `https://your-domain.com`
240 | 2. **设置密钥**: 在左侧输入共享密码或完整 API Key
241 | 3. **角色设定**: (可选)设置系统提示词或角色设定
242 | 4. **开始对话**: 选择模型并输入问题
243 | 5. **联网搜索**: (可选)勾选"联网搜索"选项,AI 将获取实时网络信息作为回答参考
244 | 6. **追问功能**: 在第一个问题得到回答后,可以继续追问一次
245 | 7. **智能命名**: 系统会根据问答内容自动生成会话标题,便于管理查找
246 | 8. **分享问答**: 点击右上角"分享问答"按钮,生成问答截图
247 | 9. **查看历史**: 左侧会自动保存历史会话
248 |
249 | ### 支持的模型
250 |
251 | 默认支持所有 OpenAI 官方模型,包括但不限于:
252 |
253 | - `gpt-5-pro` - GPT-5-Pro 模型
254 | - `gpt-5` - GPT-5 模型
255 | - `gpt-5-mini` - GPT-5 Mini 模型
256 | - 以及其他 OpenAI 提供的模型
257 |
258 | 可以通过 `MODEL_IDS` 环境变量自定义显示在界面中的模型列表。
259 |
260 | ## ⚙️ 配置说明
261 |
262 | ### 环境变量配置(推荐)
263 |
264 | 项目支持通过环境变量进行配置,这样更安全且便于管理:
265 |
266 | **主要环境变量:**
267 |
268 | - `SECRET_PASSWORD`: 共享密码,用于正常无限制访问
269 | - `API_KEYS`: OpenAI API Key 列表,多个用逗号分隔
270 | - `MODEL_IDS`: 支持的模型列表,多个用逗号分隔(必需)
271 | - `API_BASE`: OpenAI API 基础地址(可选,默认 `https://api.openai.com`)
272 | - `DEMO_PASSWORD`: 临时演示密码,有调用次数限制(可选)
273 | - `DEMO_MAX_TIMES_PER_HOUR`: 演示密码每小时最大调用次数(默认 15 次)
274 | - `TAVILY_KEYS`: Tavily API Key 列表,用于联网搜索功能,多个用逗号分隔(可选)
275 | - `TITLE`: 自定义 Web 界面标题和 Favicon(可选,默认 `OpenAI Chat`)
276 |
277 | ### 不同 API 提供商配置示例
278 |
279 | 以下是常见 API 提供商的配置示例,帮助您快速配置环境变量:
280 |
281 | | API 提供商 | API_BASE | API_KEYS 示例 | MODEL_IDS 示例 | 备注 |
282 | | ----------------- | ------------------------------------------- | --------------------------- | --------------------------------------------------------------------------- | ------------------------------------------- |
283 | | **OpenAI 官方** | `https://api.openai.com` | `sk-proj-xxxxxx` | `gpt-4o,gpt-4o-mini,o1-preview,o1-mini` | 官方 API |
284 | | **Google Gemini** | `https://generativelanguage.googleapis.com` | `AIzaSyxxxxx1,AIzaSyxxxxx2` | `gemini-2.5-pro,gemini-2.5-flash,gemini-2.5-flash-lite` | 官方 API |
285 | | **心流 AI** | `https://apis.iflow.cn` | `sk-xxxx1,sk-xxxx2` | `qwen3-max,glm-4.6,kimi-k2,deepseek-v3.2-exp=DeepSeek V3.2` | 可以通过 `等号=` 自定义界面上外显的模型名称 |
286 | | **OpenRouter** | `https://openrouter.ai/api` | `sk-or-v1-xxxxxx` | `openrouter/polaris-alpha,minimax/minimax-m2:free` | 官方提供若干免费模型可供调用 |
287 | | **API 中转商 A** | `https://api.example.com` | `sk-xxxxxx` | `claude-sonnet-4.5,gemini-3-pro-preview-11-2025` (根据中转商提供的模型列表) | 第三方中转,注意服务稳定性和隐私 |
288 |
289 | **配置说明:**
290 |
291 | - OpenAI 官方:建议使用 Deno Deploy 部署 worker
292 | - Google AiStudio 官方(Gemini):需要使用 Google AI Studio 获取 API Key,适合使用 Gemini 系列模型,建议使用 Deno Deploy 部署 worker
293 | - 心流 AI:国内免费额度,适合体验国产大模型,Key 有效期约 7 天,Cloudflare Workers 部署即可
294 | - API 中转商:第三方服务,大部分都兼容 OpenAI API 格式
295 |
296 | **Deno Deploy 环境变量设置:**
297 |
298 | 1. 在项目设置页面找到 "Environment Variables"
299 | 2. 添加以下环境变量:
300 | - `SECRET_PASSWORD`: 共享密码,如 `mypassword123`
301 | - `API_KEYS`: API Key 列表,多个用逗号分隔,如 `sk-key1,sk-key2,sk-key3`
302 | - `MODEL_IDS`: 模型列表,如 `gpt-5-pro,gpt-5,gpt-5-mini`(必需)
303 | - `API_BASE`: 如 `https://api.openai.com`(可选)
304 | - `DEMO_PASSWORD`: 演示密码,如 `demo123`(可选)
305 | - `DEMO_MAX_TIMES_PER_HOUR`: 如 `10`(可选,默认 15)
306 | - `TAVILY_KEYS`: Tavily API Key 列表,如 `tvly-key1,tvly-key2`(可选,用于联网搜索)
307 | - `TITLE`: 自定义标题,如 `My AI Chat`(可选)
308 |
309 | **Cloudflare Workers 环境变量设置:**
310 |
311 | 1. 在 Worker 设置中找到 "Variables"
312 | 2. 添加环境变量(同上)
313 |
314 | ### 代码配置(备选)
315 |
316 | 如果不想使用环境变量,也可以直接在 `worker.js` 中修改:
317 |
318 | ```javascript
319 | // ⚠️ 注意: 当您fork项目并且仓库为公开时,请务必谨慎操作,以免您包含OpenAI密钥的Commit被暴露在公网,造成Key泄露的情况
320 | // ⚠️ 注意: 仅当您有密码共享需求时才需要配置这些变量
321 | // 否则无需配置,默认会使用 WebUI 填写的 API Key 进行请求
322 |
323 | // 共享密码 - 您和朋友约定的密码
324 | const SECRET_PASSWORD = 'your-shared-password';
325 |
326 | // OpenAI API Key 列表 - 多个用逗号分隔,支持自动轮换,不建议这样明文写在代码里,谨防Key泄露!
327 | const API_KEYS = 'sk-key1,sk-key2,sk-key3';
328 |
329 | // 支持的模型列表 - 多个用逗号分隔(必需)
330 | const MODEL_IDS = 'gpt-5-pro,gpt-5,gpt-5-mini';
331 |
332 | // OpenAI API 基础地址(可选)
333 | const API_BASE = 'https://api.openai.com';
334 |
335 | // 临时演示密码 - 有调用次数限制(可选)
336 | const DEMO_PASSWORD = 'demo123';
337 |
338 | // 演示密码每小时最大调用次数
339 | const DEMO_MAX_TIMES_PER_HOUR = 15;
340 |
341 | // Tavily API Key 列表 - 用于联网搜索功能(可选)
342 | const TAVILY_KEYS = 'tvly-key1,tvly-key2';
343 |
344 | // 自定义界面标题和 Favicon(可选)
345 | const TITLE = 'OpenAI Chat';
346 | ```
347 |
348 | ### 配置优先级
349 |
350 | 1. **环境变量** > **代码硬编码值**
351 | 2. 如果都未配置,将使用默认值:
352 | - `SECRET_PASSWORD`: 随机生成(如 `yijiaren.123`)
353 | - `API_KEYS`: 示例密钥(需要替换)
354 | - `MODEL_IDS`: 默认模型列表(如 `gpt-5-pro,gpt-5,gpt-5-mini`)
355 | - `API_BASE`: `https://api.openai.com`
356 | - `DEMO_PASSWORD`: 默认为空(不开启演示模式)
357 | - `DEMO_MAX_TIMES_PER_HOUR`: 默认为 `15`
358 | - `TAVILY_KEYS`: 默认为空(不开启联网搜索功能)
359 | - `TITLE`: 默认为 `OpenAI Chat`
360 |
361 | ### 使用说明
362 |
363 | **无需配置的情况:**
364 |
365 | - 如果您只是想个人使用,无需配置任何环境变量
366 | - 直接在 Web 界面输入您的 API Key 即可正常使用
367 |
368 | **需要配置的情况:**
369 |
370 | - 想要分享给朋友使用,避免暴露真实 API Key
371 | - 希望配置多个 API Key 实现负载均衡
372 | - 需要统一管理 API Key
373 | - 需要提供临时演示访问,限制调用次数
374 | - 需要开启联网搜索功能,为 AI 提供实时网络信息
375 | - 需要自定义界面标题和 Favicon
376 |
377 | ### 密码类型说明
378 |
379 | **正式密码 (`SECRET_PASSWORD`):**
380 |
381 | - 无调用次数限制
382 | - 适合长期使用
383 | - 建议设置强密码
384 |
385 | **演示密码 (`DEMO_PASSWORD`):**
386 |
387 | - 有调用次数限制(默认 15 次/小时)
388 | - 适合临时演示和测试
389 | - 超出限制后需要等待下一小时重置
390 | - 可通过 `DEMO_MAX_TIMES_PER_HOUR` 调整限制
391 |
392 | ### 安全建议
393 |
394 | - **优先使用环境变量**:避免在代码中硬编码敏感信息
395 | - **使用强密码**:设置复杂的 `SECRET_PASSWORD`
396 | - **定期轮换**:定期更换共享密码和 API Key
397 | - **访问控制**:不要在公开场合分享您的域名
398 | - **多密钥配置**:配置多个 API Key 提高可用性和稳定性
399 |
400 | ## 🔧 自定义修改
401 |
402 | ### 修改界面样式
403 |
404 | Web 界面的 HTML/CSS/JS 代码都在 `getHtmlContent()` 函数中,您可以:
405 |
406 | - 修改主题颜色
407 | - 调整布局结构
408 | - 添加新功能
409 |
410 | ### 添加新模型
411 |
412 | 在 `MODEL_IDS` 环境变量或代码中添加新的模型名称:
413 |
414 | ```javascript
415 | // 通过环境变量
416 | MODEL_IDS = 'gpt-5-pro,gpt-5,gpt-5-mini';
417 |
418 | // 或在代码中
419 | const MODEL_IDS_DEFAULT = 'qwen3-max,kimi-k2,your-new-model';
420 | ```
421 |
422 | ## 📱 移动端支持
423 |
424 | 界面完全适配移动端:
425 |
426 | - 响应式布局
427 | - 触摸友好的操作
428 | - 侧边栏自动收缩
429 | - 优化的输入体验
430 | - 便捷分享功能:
431 | - **微信浏览器**: 显示图片弹窗,支持长按保存/转发
432 | - **其他浏览器**: 自动下载截图文件
433 |
434 | ## 🤝 贡献
435 |
436 | 欢迎提交 Issue 和 Pull Request!
437 |
438 | ## 📄 许可证
439 |
440 | 本项目采用 MIT 许可证,详见 [LICENSE](LICENSE) 文件。
441 |
442 | ## ⚠️ 注意事项
443 |
444 | - 历史记录仅保存在浏览器本地,更换设备或清除浏览器数据会丢失
445 | - 请合理使用 API,避免过度消耗配额
446 | - 建议定期备份重要的对话记录
447 | - 本项目仅供学习和个人使用
448 |
449 | ## 🙋♂️ 常见问题
450 |
451 | **Q: 只支持 OpenAI 的模型吗?**
452 | _A: 不是。本项目支持所有兼容 OpenAI API 格式的模型和服务,包括但不限于 OpenAI、Gemini、Qwen、GLM、Kimi、DeepSeek 等。只需配置相应的 `API_BASE` 和 `API_KEYS` 即可使用。_
453 |
454 | **Q: 为什么推荐 Deno Deploy 而不是 Cloudflare Workers?**
455 | _A: Deno Deploy 部署简单快捷,提供稳定的全球访问。两个平台都适用,根据个人偏好选择即可。_
456 |
457 | **Q: 两个平台的功能有区别吗?**
458 | _A: 功能完全相同,只是部署方式不同。代码都支持流式响应、密钥轮换、Web 界面等全部特性。_
459 |
460 | **Q: 可以同时部署到两个平台吗?**
461 | _A: 可以的!`worker.js` 内部判断了当前服务器环境,可以同时部署到两个平台。_
462 |
463 | **Q: 为什么选择两轮问答模式?**
464 | _A: 在保持简洁的基础上,支持一次追问能够满足大多数场景需求,避免过于复杂的多轮对话造成不可控的额外开销。_
465 |
466 | **Q: 可以支持更多轮对话吗?**
467 | _A: 目前限制为两轮(一问一答+一次追问),这样设计是为了保持界面简洁和交互清晰。如需更复杂对话,建议在角色设定中添加上下文。_
468 |
469 | **Q: 会话标题是如何生成的?**
470 | _A: 当您首次在会话中提问并得到回答后,系统会根据问题和回答的内容自动生成一个简洁的标题,方便您后续查找和管理会话。_
471 |
472 | **Q: 分享功能在哪些环境下可用?**
473 | _A: 所有现代浏览器都支持。微信浏览器会显示图片弹窗供长按保存,其他浏览器会自动下载 PNG 文件。_
474 |
475 | **Q: 历史记录可以导出吗?**
476 | _A: 目前使用 IndexedDB 存储,可以通过浏览器开发者工具查看和导出数据。_
477 |
478 | **Q: 部署需要付费吗?**
479 | _A: Deno Deploy 和 Cloudflare Workers 都有免费额度,一般个人使用完全够用。_
480 |
481 | **Q: 如何配置多个 API Key?**
482 | _A: 在环境变量 `API_KEYS` 中用逗号分隔多个密钥,如 `sk-key1,sk-key2,sk-key3`,系统会自动轮换使用。_
483 |
484 | **Q: 不配置环境变量可以使用吗?**
485 | _A: 可以!如果不配置环境变量,直接在 Web 界面输入您的 API Key 即可正常使用。环境变量主要用于密码共享场景。_
486 |
487 | **Q: 环境变量和代码配置的优先级?**
488 | _A: 环境变量优先级更高。如果设置了环境变量,会优先使用环境变量的值,否则使用代码中双竖线`||`后面的默认值。_
489 |
490 | **Q: 忘记了共享密码怎么办?**
491 | _A: 查看您部署时配置的环境变量,或查看代码中的 `SECRET_PASSWORD` 常量。_
492 |
493 | **Q: 演示密码和正式密码有什么区别?**
494 | _A: 演示密码 (`DEMO_PASSWORD`) 有调用次数限制,默认每小时最多 15 次,适合临时演示;正式密码 (`SECRET_PASSWORD`) 无限制,适合长期使用。_
495 |
496 | **Q: 演示密码的调用次数用完了怎么办?**
497 | _A: 需要等待下一个小时重置,或者使用正式密码继续访问。管理员可以通过 `DEMO_MAX_TIMES_PER_HOUR` 环境变量调整限制次数。_
498 |
499 | **Q: 如何开启联网搜索功能?**
500 | _A: 在环境变量中配置 `TAVILY_KEYS`,然后在 Web 界面勾选"联网搜索"选项即可。联网搜索会为 AI 提供实时的网络信息作为上下文,提升回答的时效性和准确性。_
501 |
502 | **Q: Tavily API Key 如何获取?**
503 | _A: 访问 [Tavily](https://tavily.com/) 注册账号并获取 API Key。可以配置多个 Key 用逗号分隔,系统会自动轮换使用。_
504 |
505 | **Q: 如何自定义界面标题和 Favicon?**
506 | _A: 通过环境变量 `TITLE` 设置自定义标题,如 `TITLE=My AI Assistant`。标题会同时影响网页标题和 Favicon 的显示样式。_
507 |
508 | **Q: TITLE 环境变量是如何影响 Favicon 的?**
509 | _A: `TITLE` 中包含 Gemini 或 Qwen 字样时(忽略大小写),网站 Favicon 会自动变为相应的模型 Logo,否则 Logo 默认为 OpenAI 的样式。_
510 |
511 | ---
512 |
513 | 如果这个项目对您有帮助,请给个 ⭐ Star!
514 |
--------------------------------------------------------------------------------
/openai.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |