{"id":13468390,"url":"https://github.com/ourongxing/chatgpt-vercel","last_synced_at":"2025-05-14T06:14:30.903Z","repository":{"id":105294440,"uuid":"609427511","full_name":"ourongxing/chatgpt-vercel","owner":"ourongxing","description":"Elegant and Powerfull. Powered by OpenAI and Vercel.","archived":false,"fork":false,"pushed_at":"2024-10-16T20:31:38.000Z","size":6470,"stargazers_count":3215,"open_issues_count":40,"forks_count":2989,"subscribers_count":19,"default_branch":"main","last_synced_at":"2025-04-24T01:55:34.255Z","etag":null,"topics":["chatgpt","edge-function","solidjs","vercel"],"latest_commit_sha":null,"homepage":"https://vercel-chatgpt-github.vercel.app/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"ddiu8081/chatgpt-demo","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ourongxing.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-04T06:11:15.000Z","updated_at":"2025-04-17T03:45:10.000Z","dependencies_parsed_at":"2024-01-12T15:48:40.481Z","dependency_job_id":"92893f08-6fd8-4b7b-9b92-d3fad16b74ab","html_url":"https://github.com/ourongxing/chatgpt-vercel","commit_stats":{"total_commits":392,"total_committers":19,"mean_commits":20.63157894736842,"dds":0.09438775510204078,"last_synced_commit":"eb252f21a3365734e868caff9553b7bd67c4fb73"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ourongxing%2Fchatgpt-vercel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ourongxing%2Fchatgpt-vercel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ourongxing%2Fchatgpt-vercel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ourongxing%2Fchatgpt-vercel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ourongxing","download_url":"https://codeload.github.com/ourongxing/chatgpt-vercel/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254083932,"owners_count":22011905,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chatgpt","edge-function","solidjs","vercel"],"created_at":"2024-07-31T15:01:09.969Z","updated_at":"2025-05-14T06:14:30.830Z","avatar_url":"https://github.com/ourongxing.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","Web Apps","Uncategorized","Openai","A01_文本生成_文本对话","🌐 Web","web应用","Meta","Web applications"],"sub_categories":["ChatGPT-like UI","Uncategorized","大语言对话模型及数据","类似chatgpt的web-ui","Other"],"readme":"# ChatGPT-Vercel\n\n![](md-assets/preview-light.png#gh-light-mode-only)\n![](md-assets/preview-dark.png#gh-dark-mode-only)\n\n\n\nhttps://user-images.githubusercontent.com/48356807/232432194-46ba797f-ad9d-476a-a739-20e0b3d63eb2.mp4\n\n\n\n\u003e 本项目基于 [chatgpt-demo](https://github.com/ddiu8081/chatgpt-demo) 开发。正式版本（v1.0.0）使用 Solid-Start 框架，并且不再开启 SSR。请重新设置环境变量。\n\n在线预览:\n\n1. [vercel.app](https://vercel-chatgpt-github.vercel.app) 被墙。\n\n## 特点\n\n1. UI 优雅简洁的同时功能尽可能强大，细节满满，等你发现。同时满足小白和大佬使用。\n3. 支持 PWA。\n4. 支持 Prompts 预设，使用 \u003ckbd\u003e空格\u003c/kbd\u003e 或者 \u003ckbd\u003e/\u003c/kbd\u003e 搜索，可以模糊匹配，突出显示匹配的文字。\n5. 支持多个对话（聊天），并且每个对话都可以单独设置，自由设置角色，不同对话可以通过 URL 直达。使用 \u003ckbd\u003e空格\u003c/kbd\u003e\u003ckbd\u003e空格\u003c/kbd\u003e 或者 \u003ckbd\u003e/\u003c/kbd\u003e\u003ckbd\u003e/\u003c/kbd\u003e 搜索，可以模糊匹配，搜索历史消息。\n6. 支持导出和导入对话和设置。\n7. 实时查看当前对话会消耗的 token 以及回答的 token，及时打断。\n8. 支持多种余额查询方式，支持定时查询内置账号余额，并且发送到微信。\n9. 支持 URL query，当作搜索引擎使用，所有对话都支持。比如 `url?q=keyword` 或者 `url/session/xxxxx?q=keyword`\n\n## 使用技巧\n\n- 有效上下文：剔除报错的部分对话。如果关闭连续对话，将只统计锁定了的部分对话。这个概念很关键。\n- 锁定对话：点击每条消息前面的头像，就可以锁定了。锁定有什么好处？清空对话时，锁定了的不会删除。关闭连续对话时，始终会发送锁定了的对话，相当于角色设定。关闭 `记录对话内容` 后，始终会记录锁定了的对话，下次刷新仍然存在。\n- Open AI Key 要怎么获得：注册 OpenAI 的帐号，然后 [生成 Key](https://platform.openai.com/account/api-keys) 就行了。现在注册就送 5 美元，可以用一两个月。嫌注册麻烦，可以直接去买号，自行搜索。注意不要被骗，一般 5 元以下可以入手，看到有 120 美元的 key，这种属于是绑了虚拟信用卡，可以透支 120 美元，只能用一个月，而且容易封号。现在没绑卡的账号限制比较多，并且容易封号。绑了卡也会优先扣除赠送的余额。\n- 输入框\n  - \u003ckbd\u003eEnter\u003c/kbd\u003e发送（可关闭），\u003ckbd\u003eShift\u003c/kbd\u003e+\u003ckbd\u003eEnter\u003c/kbd\u003e换行。\n  - \u003ckbd\u003e空格\u003c/kbd\u003e 或者 \u003ckbd\u003e/\u003c/kbd\u003e 搜索 Prompt 预设，可以模糊匹配。所有 Prompt 可以查看 [prompts.md](prompts.md) 。\n  - 使用 \u003ckbd\u003e空格\u003c/kbd\u003e\u003ckbd\u003e空格\u003c/kbd\u003e 或者 \u003ckbd\u003e/\u003c/kbd\u003e\u003ckbd\u003e/\u003c/kbd\u003e 搜索其它对话，可以模糊匹配，搜索历史消息。\n  - \u003ckbd\u003e↑\u003c/kbd\u003e 将最近的一次提问填到输入框里。\n- 消息上的动作\n  - 提问\n    - 编辑：不能原地编辑，只能自动填到输入框里。\n    - 重新回答：删除当前对话，然后自动发送。\n    - 删除：删除当前对话。\n  - 回答\n    - 复制\n    - 重新回答\n    - 删除：只删除回答。\n- 点击顶部标题滚动到顶部，点击输入框滚动到底部。\n- url 里使用 `url?q=你好啊` 这种方式可以打开网页直接回答 `你好啊`，当作搜索引擎使用。所有的对话中都可以使用。\n\n### 设置与动作\n\n右边四个按钮是动作，点击就可以执行。\n\n- 伪装角色：伪装时直接进入对话里，不会发送请求。可以伪装成用户提问以及 GPT 回答。发送后自动关闭伪装。\n- 将当前对话生成图片，方便分享。在电脑上直接复制到剪贴板，手机上是下载。\n- 将当前对话生成 Markdown，直接复制到剪贴板。\n- 清空对话。\n\n![image-20230417134751367](https://testmnbbs.oss-cn-zhangjiakou.aliyuncs.com/pic/image-20230417134751367.png?x-oss-process=base_webp)\n\n现在支持了多个对话，也就是多个聊天。不同的对话可以单独设置，也有不同的链接，标题，图标。所以现在有了两个设置按钮，第一个是全局设置，可以填写密码，API Key，也可以关闭 Enter 键发送，这样在手机上也可以换行。\n\n![image-20230417134833609](https://testmnbbs.oss-cn-zhangjiakou.aliyuncs.com/pic/image-20230417134833609.png?x-oss-process=base_webp)\n\n第二个是对话设置，尽当前对话有效，针对不同的用途自行设置。目前 GPT4 仍然处于 waitlist 阶段，如果没有资格，那么无法使用。\n\n思维发散程度越高，ChatGPT 就会乱答，如果是开放性的问题，可以适当调高，但也不要超过 1。需要确切答案的建议调为 0。\n\n开启 `记录对话内容` 后，对话刷新也不会清空。开启连续对话后，每次会发送所有有效上下文，一开始提过有效上下文这个概念。\n\n![image-20230417134804056](https://testmnbbs.oss-cn-zhangjiakou.aliyuncs.com/pic/image-20230417134804056.png?x-oss-process=base_webp)\n\n当你点击了设置按钮之后，会发现右边的动作按钮也发生了变化。打开全局设置后，出现的导出和导入按钮。可以导出和导入所有的设置和对话。\n\n而打开对话设置之后，在首页，也就是主对话里，就只有一个新建对话的按钮，当你新建了对话。就会出现复制对话链接以及删除对话的按钮。值得注意的是，目前这个链接只能你自己能打开，并没有上传到云端。\n\n![image-20230417135644474](https://testmnbbs.oss-cn-zhangjiakou.aliyuncs.com/pic/image-20230417135644474.png?x-oss-process=base_webp)\n\n在新的对话里，你可以设置标题，甚至可以设置图标，试试在标题前面加一个 Emoji。\n\n## 部署一个你自己的 ChatGPT 网站（免费，国内直连）\n\n\u003e **Warning**\n\u003e\n\u003e vercel.app 域名已经被墙，但 vercel 本身没有被墙，所以你绑定自己的域名就可以了。如果广泛分享，域名有被墙的风险。如果是国内购买的域名，有请去喝茶的风险，所以要么小范围加密码使用，要么在国外购买域名。更推荐小范围内使用。\n\n如果你只需要部署一个你自己用的网站，而不需要定制，那么你完全不需要在本地跑起来，你可以直接点击下面的按钮，然后按照提示操作，然后在 Vercel 中填入环境变量即可。\n\n\n[![Deploy with Vercel](https://vercel.com/button?utm_source=busiyi\u0026utm_campaign=oss)](https://vercel.com/new/clone?utm_source=busiyi\u0026utm_campaign=oss\u0026repository-url=https://github.com/ourongxing/chatgpt-vercel\u0026env=OPENAI_API_KEY)\n\n不过上面这种方式不容易更新，最好还是先 fork 本仓库，然后在 [Vercel](https://vercel.com/new?utm_source=busiyi\u0026utm_campaign=oss) 中导入你自己的仓库，之后要更新就在 Github 里点击 `Sync fork` 就可以同步更新了。\n\n如果你需要部署给更多人用，需要修改一些代码，那么你可能需要将上面创建的你自己的仓库 `git clone` 到本地。改完了 `git commit \u0026 push` 即可重新部署，vscode 上点几下就可以了。也可以用 vercel 的 cli，`vercel deploy --prod`。\n\n如果你需要在本地开发和调试，有点麻烦：\n\n1. 升级到 `node18`，要用到原生的 `fetch` 和 `readableStream`。\n2. API 被墙了，自己想办法开代理，不然要报错。可以设置 OpenAI 的代理 API，也可以直接 `vercel deploy` 部署到 vercel 开发环境上调试。\n3. `pnpm i` 安装依赖。\n4. `pnpm dev` 启动项目。\n\n### 更多部署方案\n\n目前本项目除 Vercel 以外还支持\n\n- [Netlify](https://www.netlify.com/)：直接导入即可。\n- [CloudFlare Worker](https://cloudflare.com/)：使用 Github Action 部署，需要设置 `CF_API_TOKEN`。\n- [Railway](https://railway.app/)：直接导入即可。\n\n不建议使用除 Vercel 以外的部署方案。 除了比较慢以外，更重要的是只有 Vercel 支持设置 Edge Function 服务器的地区，其他平台会自动使用距离最近的服务器，有可能是 OpenAI 不支持的地区，从而导致封号。\n\n### 环境变量\n\n\u003e 以 `CLIENT_` 开头的变量会暴露给前端，请不要填写敏感信息。\n\n| 环境变量                  | 说明                                                         | 默认值                                                       |\n| ------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |\n| `OPENAI_API_KEY`          | OpenAI API Key，可以填写多个，用 \\| 或者 换行 隔开，随机调用。最好是多填几个，API 有并发上的限制。如果用户不填自己的 key，那么就会使用你的 key。 | 无                                                           |\n| `OPENAI_API_BASE_URL`     | 本地开发时可以填写 OpenAI 的代理服务器，但是 Vercel 不需要。并且不建议生产阶段使用。 | api.openai.com                                               |\n| `NO_GFW`                  | 表示可以服务器可以直连，不需要`OPENAI_API_BASE_URL`，就算设置了也不使用。 | false                                                        |\n| `TIMEOUT`                 | OpenAI API 超时。单位为毫秒，Vercel Edge Function 最大超时为 30000。 | 30000                                                        |\n| `PASSWORD`                | 网站密码                                                     | 无                                                           |\n| `CLIENT_DEFAULT_MESSAGE`  | 默认提示信息                                                 | - xx xx                                                      |\n| `CLIENT_GLOBAL_SETTINGS`  | 默认全局设置                                                 | {\"APIKey\":\"\",\"password\":\"\",\"enterToSend\":true}               |\n| `CLIENT_SESSION_SETTINGS` | 默认对话设置，对话设置在每个对话中都是独立的。               | {\"title\":\"\",\"saveSession\":true,\"APITemperature\":0.6,\"continuousDialogue\":true,\"model\":\"gpt-3.5\"} |\n| `CLIENT_MAX_INPUT_TOKENS` | 有效上下文+输入的 token 数。OpenAI 不同模型的最大 token 不一样，价格也不同，可以分别设置。并且 OpenAI 会统计输入+输出之和，但我们这里只限制输入。 | {\"gpt-3.5\":16000,\"gpt-4\":32000}                              |\n\n有两种设置方式\n\n1. 将 `.env.example` 文件修改为 `.env`，在 `.env` 中设置。\n\n2. Vercel 中设置 `Environment Variables`。尽量使用这种方式，比较方便。会在下次部署时生效。\n\n   ![](md-assets/environment.png)\n\n### 默认全局设置\n\n\u003e 记得删除注释，或者直接复制上面表格里的。\n\n```json5\n{\n  \"APIKey\": \"\", // 默认填写的 key，不需要填写，否则其他人看得到。\n  \"password\": \"\", // 默认填写的密码，不需要填写，否则其他人看得到。\n  \"enterToSend\": true // 回车键发送消息\n}\n```\n### 默认对话设置\n\n\u003e 对话设置在每个对话中都是独立的。记得删除注释，或者直接复制上面表格里的。\n\n```json5\n{\n  \"title\": \"\", // 对话标题，不需要填写\n  \"saveSession\": true, // 记录当前对话内容，刷新不会丢失。关闭后仍然会记录锁定的对话。\n  \"APITemperature\": 0.6, // 0-2，思维发散程度，越高 ChatGPT 思维就越发散，开始乱答，甚至会乱码，建议小于 1 。\n  \"continuousDialogue\": true, // 开启连续对话，每次都需要将上下文传给 API。\n  \"model\": \"gpt-4o-mini\" // 模型\n}\n```\n\n## 提交你的 Prompts\n\n1. Fork 本项目。\n2. 修改 `prompts.md`。\n3. Pull Request 即可。\n\n如果你不懂这个操作，也可以直接在 Issues 提交你的 Prompts。目前大部分 Prompts 来自于 [awesome-chatgpt-prompts-zh](https://github.com/PlexPt/awesome-chatgpt-prompts-zh)，当然，这个仓库大多数也是翻译的 [awesome-chatgpt-prompts](https://github.com/f/awesome-chatgpt-prompts)，一并感谢。\n\n#### 要求\n\n- 把需要输入的内容放在最后，可以提示 ChatGPT 开始输入了，比如 “我的第一句话是：”。\n- 尽可能去优化已有的 Prompts，而不是重复添加。\n- 添加到结尾，我会定期整理。\n\n## 赞赏\n\n如果本项目对你有所帮助，可以给小猫买点零食，但不接受任何付费功能请求。\n\n![](md-assets/reward.gif)\n\n## License\n\n[MIT](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fourongxing%2Fchatgpt-vercel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fourongxing%2Fchatgpt-vercel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fourongxing%2Fchatgpt-vercel/lists"}