- AI 应用
- 提示工程
- 人工智能
- 前端
【免费下载链接】ChatGPT-Shortcut
Stop writing prompts from scratch — a searchable prompt library for ChatGPT, Claude, Gemini and Cursor · Русский 한국어 العربية हिन्दी ไทย | 别再从头写提示词:现成的拿来就用,好用的收进自己的库
本文基于 ChatGPT-Shortcut(AiShort)项目的部署文档编写,系统讲解如何自托管这一「可搜索 AI 提示词库」:先按需求在三种部署形态中选型,再分别掌握标准部署(本地构建、Vercel、Cloudflare Pages、Docker)、面向企业内网的离线部署版、站点与提示词的自定义配置,以及让 Fork 自动跟随上游更新的同步机制。读完本文,你将具备独立搭建、定制并长期维护一套 AiShort 实例的完整能力。
部署形态选型:先想清楚再动手
AiShort 允许开发者自部署或深度定制,官方将部署方式归纳为三种形态,选型时主要看对后端与数据归属的需求:
| 形态 | 后端 | 说明 |
|---|---|---|
| 标准部署(默认) | 复用官方共享后端 | Fork 后可自定义网站名称、描述、提示词等(见 配置与自定义);登录、收藏、社区、同步开箱即用 |
| 离线部署版 | 无后端,数据存浏览器本地 | 企业内网、政务等无外网环境,无需账户 |
| 带后端的完整自部署 | 自建独立后端 | 需要独立的账户体系、数据自主可控、私有社区 |
前两种形态按本文即可完成部署。第三种因后端服务本身并未开源,需要邮件联系开发者并简要说明使用场景与规模,由官方提供部署方案与支持。
本指南按部署流程拆分为四篇子文档,本文将其逐一展开并结合仓库源码佐证:标准部署、离线部署版、配置与自定义、开启同步更新。
标准部署:复用官方共享后端,开箱即用
标准部署的核心思路是复用官方共享后端——登录、收藏、社区、评论、跨设备同步等能力开箱即用,你只需要把前端静态站点跑起来。先 Fork 本项目,再任选一种方式部署。
环境要求:Node.js 20.0 或更高版本(package.json 的engines字段明确标注"node": ">=20.0"),支持 macOS、Windows(含 WSL)和 Linux。
本地构建
# 安装依赖 yarn # 本地开发 yarn start # 构建:默认按 scripts/i18nLocales.mjs 的 defaultLocale 生成静态产物到 build 目录 yarn build只构建部分语言:用yarn build --locale <locale>(如zh-Hans、en、ja……完整 locale 列表见 scripts/i18nLocales.mjs)。多语言可串联:yarn build --locale zh-Hans && yarn build --locale en。
从源码层面看,yarn build实际执行的是node scripts/buildPhased.mjs(见 package.json 的scripts.build)。该脚本的设计值得了解:
- 默认语言单一数据源:
defaultLocale(当前为zh-Hans)与 18 个locales都定义在 scripts/i18nLocales.mjs,同时被docusaurus.config.js与分段构建脚本引用,从根上避免「配置里的 locales」与「实际构建的 locales」脱钩(历史上这种脱钩正是脏 URL 的根源之一)。 - 透传模式:当显式传入参数(如
yarn build --locale pt)时,scripts/buildPhased.mjs 直接把参数转交给单次docusaurus build,不再分段,与 Vercel/Cloudflare 等只部署单一/少数语言的场景保持一致。 - 分段构建防 OOM:不带参数的全量
yarn build会把 18 个 locale 切成每块 ≤3 个语言的小块,每块单独跑一个docusaurus build进程、进程退出即释放内存——因为一次性docusaurus build全部 18 个 locale 会在单进程内把内存撑爆。块大小可用环境变量BUILD_CHUNK调整(默认 3,内存吃紧可用 2)。构建完成后还会把所有 locale 的 sitemap 合并进根build/sitemap.xml,让 robots 指向的站点地图覆盖全部 18 种语言。
Vercel 部署
Vercel 支持导入仓库一键部署:先在页面右上角 Fork 本项目,再到 Vercel 新建项目页面导入刚 Fork 的仓库即可,其余配置保持默认。
注意:Vercel 免费版可能因内存不足报错。改单语言部署即可——进入项目Settings → Build & Deployment → Build Command,点Override,改成单语言命令(中文
yarn build --locale zh-Hans,葡萄牙语yarn build --locale pt,其他类推)。这正是分段构建脚本中「透传模式」的设计动机:单语言场景下直接跑一次docusaurus build,峰值内存远低于全量 18 语言构建。
Cloudflare Pages 部署
- 先在仓库页面点击Fork生成自己的副本。
- 登录 Cloudflare Pages,选择Create a project,绑定刚 Fork 的仓库。
- 配置构建参数:
- Build command:
yarn build --locale zh-Hans(按要部署的语言换 locale,葡萄牙语用yarn build --locale pt) - Output directory:
build
- Build command:
- 点部署,等待 Cloudflare Pages 构建完成。
之后每次推新代码都会自动触发构建和部署。
Docker 部署
一行命令即可启动:
# ghcr.io docker run -d -p 3000:3000 --name chatgpt-shortcut ghcr.io/rockbenben/chatgpt-shortcut:latest # docker hub docker run -d -p 3000:3000 --name chatgpt-shortcut rockben/chatgpt-shortcut:latest或用docker-compose(仓库根目录自带一份可直接使用的 docker-compose.yml):
services: chatgpt-shortcut: container_name: chatgpt-shortcut image: ghcr.io/rockbenben/chatgpt-shortcut:latest ports: - "3000:3000" restart: unless-stopped镜像背后的实现(见 Dockerfile):采用两阶段构建——第一阶段用node:24-alpine作为构建器执行yarn install --frozen-lockfile与yarn build,期间通过SKIP_GIT_INFO=true关闭对 git 的依赖(构建日期回退为当前时间,见docusaurus.config.js的buildDate逻辑),从而无需安装 git、可把.git排除出构建上下文;第二阶段用nginx:stable-alpine托管静态产物,并把仓库自带的 nginx.conf 复制进容器。nginx 配置监听 3000 端口,location /下用try_files $uri $uri/ /index.html实现 SPA 回退,另配置error_page 404 /404.html。
离线部署版:企业内网与无外网环境
适用场景:企业内网、政务网络、保密环境、校园网等无法或不便访问外网的环境(如对数据驻留有要求的机构等)。离线版无后端、无需注册——所有数据存在浏览器本地。部署后内网团队打开浏览器即可使用。
团队使用方式
离线版是纯静态网站,部署到内网服务器后:
- 管理员将离线版部署到内网服务器(如
http://192.168.1.100:3000)。 - 团队成员用浏览器打开该地址,即可浏览、搜索、复制提示词。
- 每个人的收藏和自建提示词保存在自己的浏览器中,互不影响。
- 无需注册账户,无需安装任何软件,打开即用。
提示词库(精选提示词)是构建时打包的静态数据,所有用户看到的内容一致;而每个用户的收藏、自建提示词、排序和标签保存在各自浏览器的 localStorage,彼此独立。
与在线版的功能区别
| 功能 | 在线版 | 离线版 |
|---|---|---|
| 提示词浏览/搜索/筛选 | ✅ | ✅ |
| 提示词复制 | ✅ | ✅ |
| 收藏管理 | 服务器存储 | 浏览器本地存储 |
| 自定义提示词 | 服务器存储 | 浏览器本地存储 |
| 我的收藏(拖拽排序、标签) | ✅ | ✅ |
| 多语言支持(18 种) | ✅ | ✅ |
| 数据导入/导出 | ✅ | ✅(格式互通) |
| 提示词详情页 | ✅ | ✅(静态数据,无评论) |
| 用户注册/登录 | ✅ | ❌(无需账户) |
| 社区提示词列表/投票 | ✅ | ❌ |
| 评论反馈 | ✅ | ❌ |
浏览器本地数据存储
每位用户的数据保存在自己浏览器的 localStorage,与服务器无关,共使用四个存储键:
| 数据 | 存储键 | 说明 |
|---|---|---|
| 收藏列表 | local_favorites | 收藏的提示词 ID 数组 |
| 自建提示词 | local_user_prompts | 用户创建的提示词数据 |
| 排列顺序 | local_myspace_order | 我的收藏中的卡片排序 |
| 自定义标签 | local_custom_tags | 标签定义和分配关系 |
注意事项:
- 浏览器本地存储约 5MB 容量上限,日常使用够用。
- 清除浏览器数据会丢失个人数据——建议定期通过「我的账户 → 数据管理 → 导出数据」备份。
- 更换电脑或浏览器后需重新导入数据。
部署方式
离线版基于offline分支。管理员完成一次部署后,团队成员无需任何操作即可使用。
Docker 部署(推荐)——一行命令即可在内网服务器运行:
# 使用预构建的离线版镜像 docker run -d -p 3000:3000 --name aishort-offline ghcr.io/rockbenben/chatgpt-shortcut:offline # 或使用 Docker Hub docker run -d -p 3000:3000 --name aishort-offline rockben/chatgpt-shortcut:offline部署后团队成员访问http://<服务器IP>:3000即可使用。使用docker-compose:
services: aishort-offline: container_name: aishort-offline image: ghcr.io/rockbenben/chatgpt-shortcut:offline ports: - "3000:3000" restart: unless-stopped源码构建——如需自定义提示词内容或修改配置:
# 克隆离线版分支(offline 分支是否可用以你实际获取的仓库为准) git clone -b offline https://gitcode.com/gh_mirrors/ch/ChatGPT-Shortcut.git cd ChatGPT-Shortcut # 安装依赖 yarn # 本地开发 yarn start # 构建单语言版本(如中文 / 印尼语) yarn build --locale zh-Hans yarn build --locale ind # 构建全部语言 yarn build构建产物在build/目录,可部署到任意静态文件服务器(Nginx、Apache、Caddy 等)。
Nginx 配置示例:
server { listen 3000; server_name _; root /path/to/build; index index.html; location / { try_files $uri $uri/ /index.html; } }平台部署:Vercel、Cloudflare Pages 等平台部署时选择offline分支即可,其他步骤与在线版一致。
数据导入导出与迁移
导出:进入「我的账户 → 数据管理 → 导出数据」,将个人收藏和自建提示词导出为 JSON 文件。
导入支持以下格式的 JSON 文件:
- 离线版导出的文件:完整恢复收藏、提示词、排序和标签。
- 在线版导出的文件:自动兼容处理——
- 用户提示词 → 合并到本地(按标题去重);
- 精选收藏(card)→ 合并到本地收藏;
- 社区收藏(community)→ 自动转为本地自建提示词;
- MySpace 排序 → 恢复到本地;
- 自定义标签 → 追加合并(不覆盖已有)。
从在线版迁移:在在线版(aishort.top)的「我的账户」页面导出数据,再到离线版的「我的账户 → 数据管理」导入该 JSON 文件;社区收藏会自动转为本地提示词,精选收藏正常同步。
常见问题
- 部署后团队怎么用?管理员部署到内网服务器后,把访问地址(如
http://192.168.1.100:3000)告诉团队成员即可。每个人用浏览器打开,无需安装、无需注册。 - 每个人的数据会互相影响吗?不会。每个人的收藏和自建提示词保存在各自浏览器的 localStorage,完全独立。服务器上只有共享的提示词库(只读)。
- 数据会丢失吗?清除浏览器数据/缓存、使用隐私/无痕模式浏览、更换电脑或浏览器,都会导致个人数据丢失。建议重要数据定期通过「我的账户 → 数据管理 → 导出数据」备份为 JSON 文件。
- 能否在团队间共享自建提示词?可以。一人导出 JSON 文件后,其他成员在「我的账户 → 数据管理 → 导入数据」中导入即可,自动去重。
- 如何更新提示词库?提示词库是构建时打包的静态数据:管理员拉取最新的
offline分支代码,重新构建并部署(或拉取最新 Docker 镜像),团队成员刷新浏览器即可看到新内容,个人数据不受影响。 - 离线版的数据格式和在线版兼容吗?兼容。导出的 JSON 格式相同,可在两个版本间互相导入。提示词 ID 不同(在线版用服务器 ID,离线版用时间戳 ID),但导入按标题去重,不会冲突。
配置与自定义:标题、描述、提示词与后端
AiShort 开源,可以自由修改网站标题、描述、提示词与后端等内容。
站点标题与描述
编辑docusaurus.config.js即可。仓库当前的配置中,title仅保留品牌名AiShort,url为正式站点地址、baseUrl为/;构建日期取自 HEAD commit 时间以保证 18 个语言版本的 schema.org 时间字段一致(非 git 环境或 Docker 构建中SKIP_GIT_INFO=true时回退为当前时间)。
使用说明与介绍
修改 docs 目录下的对应文件即可(如 docs/introduction.md 与 docs/guides 下的各指南)。
主页提示词:数据模型与生成流水线
源数据在src/data/prompt.json——一个数组,每个对象按zh/en/ja等语言代码键存放所有语言的版本。新增提示词时格式如下:
{ "zh": { "title": "custom prompt", "prompt": "custom prompt", "description": "custom description", "remark": "custom mark" }, "en": { "title": "custom prompt", "prompt": "custom prompt", "description": "custom description", "remark": "custom mark" }, "website": null, "tags": ["music"], "id": 500, "weight": 1 }编辑后运行python CodeUpdateHandler.py,脚本会按预设规则拆分prompt.json生成各语言的prompt_<locale>.json,并同步更新各语言的主页面和精选提示词页面。
从 CodeUpdateHandler.py 的源码可以看到流水线的关键实现:
- 脚本按
src/data下的prompt.json为单一输入,依据语言列表(首语言zh-Hans为主语言)拆分为多份语言文件,并生成卡片 JSON 与详情页数据; - 若检测到
opencc库则用 OpenCC 完成简体到繁体的自动转换,否则跳过转换并给出警告; - 脚本还会为每张卡片注入
(id, lang)维度的datePublished/dateModified:卡片内容未变则保留旧日期(跨多次重建保持稳定),内容变更则更新dateModified、保留datePublished,卡片不存在则两个日期都用构建时间。
注意:建议将
id设为 500 以上,避免与现有提示词或社区内容的 ID 冲突。运行python CodeUpdateHandler.py会自动为每条提示词(含新增的)生成卡片数据和详情页,无需手动创建页面文件;自定义提示词默认没有精选元描述和评论数据。
自定义后端:API 模块结构
项目默认连接一个共享后端(登录、收藏、社区、评论、跨设备同步等功能都依赖它),src/api提供了完整的接口契约可供参考。后端服务本身并未开源;如需带后端的完整自部署,参见前文「部署形态选型」。
API 模块结构:
src/api/ ├── index.ts # 统一导出入口 ├── config.ts # API URL 配置 ├── client.ts # Axios 客户端(含认证拦截器) ├── auth.ts # 认证 API(登录/注册/OAuth) ├── prompts.ts # 提示词 CRUD + 搜索 + 投票 ├── favorites.ts # 收藏操作 ├── myspace.ts # 我的空间数据(核心数据源) ├── comments.ts # 评论系统 └── user.ts # 用户信息关键实现细节(结合源码):
- src/api/config.ts 集中定义所有接口地址:主 API 地址
API_URL(生产环境为https://api.newzone.top/api,Strapi 后端)、Google OAuth 登录入口服务地址、以及新旧 OAuth 流程的开关USE_LEGACY_GAUTH。所有接口地址集中在此,便于后期修改。 - src/api/client.ts 创建 Axios 实例(
baseURL取API_URL,30 秒超时兜底),请求拦截器自动附加Authorization: Bearer <token>;响应拦截器统一处理错误,遇到 401 会清除本地auth_token并联动清理用户相关缓存。
缓存机制:API 数据通过lscache结合 ETag 实现智能缓存——服务器返回 304 Not Modified 时直接复用本地缓存,减少数据传输。缓存 TTL 在 src/utils/cache.js 中定义(如提示词卡片 100 天、社区/用户/评论/我的空间等数据 30 天,均配合 ETag 使用),并在lscache之上再加一层内存 Map 缓存以保证同一 key 多次读取返回同一引用。
开启同步更新:Fork 自动跟随上游
Vercel 一键部署的项目可能一直提示存在更新——因为Vercel 默认新建项目而非 fork,无法检测上游更新。解决方法:
- 删除原仓库;
- 用页面右上角的Fork按钮 fork 本项目;
- 在 Vercel 新项目页面的 Import Git Repository 处重新选择刚 fork 的项目并部署。
打开自动更新
Fork 后需手动在Actions页面启用 Workflows,并跑一次Upstream SyncAction(如果遇到 Upstream Sync 执行错误,请先手动执行一次 Sync Fork)。启用后项目每天自动同步上游更新,避免功能落后。
手动更新代码
想手动立即更新时,可参考代码托管平台关于「同步 fork」的官方文档,通过 Web 界面或命令行把上游的更新合并进自己的 fork。也可以关注(star / watch)本项目,及时获得新功能更新通知。
小结
三种部署形态对应三类需求:标准部署(含本地构建、Vercel、Cloudflare Pages、Docker 四种落地方式)适合大多数希望「开箱即用 + 轻度定制」的场景;离线部署版适合隔离网络环境,四个 localStorage 存储键把数据完全留在用户浏览器;带后端的完整自部署则需要联系官方获取方案。若想深度定制,站点元信息在docusaurus.config.js、提示词在src/data/prompt.json+CodeUpdateHandler.py、后端契约在src/api,而多语言构建的默认语言与语言列表统一由 scripts/i18nLocales.mjs 这一个数据源驱动。部署完成后,别忘了按上文「开启同步更新」一节让 Fork 每天跟随上游,持续获得新功能。
- AI 应用
- 提示工程
- 人工智能
- 前端
【免费下载链接】ChatGPT-Shortcut
Stop writing prompts from scratch — a searchable prompt library for ChatGPT, Claude, Gemini and Cursor · Русский 한국어 العربية हिन्दी ไทย | 别再从头写提示词:现成的拿来就用,好用的收进自己的库
相关推荐
AiShort(ChatGPT-Shortcut)部署实战:Vercel / Cloudflare / Docker / 企业内网离线版全解析
AiShort(ChatGPT Shortcut)部署实战:Vercel / Cloudflare / Docker / 企业内网离线版全解析 本篇以 Chat
AI 应用提示工程人工智能前端AiShort(ChatGPT-Shortcut)部署实战指南:标准部署、离线内网版与配置自定义全解析
AiShort(ChatGPT Shortcut)部署实战指南:标准部署、离线内网版与配置自定义全解析 本文基于仓库内部署文档体系( 项目部署 https://
AI 应用提示工程人工智能前端AiShort(ChatGPT-Shortcut)项目部署实战指南:标准部署、离线版、配置自定义与自动同步
AiShort(ChatGPT Shortcut)项目部署实战指南:标准部署、离线版、配置自定义与自动同步 本文面向想要自托管或二次定制 AiShort 的开发
AI 应用提示工程人工智能前端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考