语言: 简体中文 | English
一个功能完整的本地提示词管理系统,支持版本控制、搜索、标签管理、导入导出功能。采用Python + Flask + SQLite 构建,无需外部依赖,开箱即用。
A fully functional local prompt management system that supports version control, search, tag management, and import/export features. Built with Python + Flask + SQLite, it requires no external dependencies and works out of the box.
- 创建编辑:支持名称、来源、标签、备注等完整元信息
- 内容预览:首页显示内容摘要,支持一键复制完整内容
- 置顶功能:重要提示词可置顶显示
- 智能搜索:支持名称、来源、备注、标签、内容的全文搜索
- 语言切换:支持中/英切换
- 语义化版本:遵循
主版本.次版本.补丁版本格式 - 灵活升级:支持补丁版本(+0.0.1)、次版本(+0.1.0)、主版本(+1.0.0)升级
- 历史回滚:可从任意历史版本创建新版本,不覆盖原有数据
- 自动清理:可设置版本保留阈值(默认200),自动清理旧版本
- Diff视图:左右并排显示版本差异
- 词级对比:精确到词汇级别的变更高亮(默认)
- 行级对比:支持传统行级别的 diff 视图
- 快速切换:词级/行级对比模式一键切换
- 层级标签:支持
场景/客服这样的层级分类 - 智能联想:输入时自动提示已有标签
- 多维度筛选:支持按标签排序和筛选
- 双主题支持:浅色/深色主题,自动跟随系统
- 响应式设计:完美适配桌面端和移动端
- 流畅动画:精心设计的交互动画和过渡效果
- 键盘快捷键:支持 Ctrl+S 保存、Ctrl+P 预览等快捷操作
- 桌面端视图切换:首页支持列表/网格一键切换,并记住偏好
- 提示词颜色标注(新):在“高级设置”为提示词设置颜色(支持 #RGB/#RRGGBB),首页卡片将显示细微的同色外圈;提供可视化取色器、小圆点预览与“一键清除”按钮;留空则不设置
- 界面语言(新):在“设置”中可切换界面语言(中文/英文),默认中文
- 导入导出:JSON 格式完整数据备份和恢复
- 数据安全:本地 SQLite 存储,无云端依赖
- 设置管理:可配置版本清理阈值与访问密码等系统参数
- 支持切换界面语言(中文/英文)
- 三选一模式(设置页):关闭 / 指定提示词密码 / 全局密码
- 密码要求:4–8 位,首次启用需先设置密码
- 指定提示词密码:在提示词编辑页勾选“该提示词需要密码访问”
- 首页行为(指定提示词密码模式):受保护卡片仅显示标题与“来源:需要密码”,不展示标签、备注与内容预览;点击卡片进入解锁页
- 会话解锁:本次会话内对已解锁的提示词放行;可通过右上角“退出”清除认证
- Docker 和 Docker Compose
- 镜像地址:
docker.io/zhuchenyu2008/prompt-manage:latest
# 拉取镜像
docker pull zhuchenyu2008/prompt-manage:latest
# 运行容器(持久化数据到名为 prompt-data 的卷)
docker run -d \
--name prompt-manage \
-p 3501:3501 \
-v prompt-data:/app/data \
zhuchenyu2008/prompt-manage:latest
# 访问应用
# http://localhost:3501-
克隆项目
git clone https://github.com/zhuchenyu2008/prompt-manage cd prompt -
启动应用(本地构建)
# 启动服务 docker-compose up # 或后台运行 docker-compose up -d
-
使用以构建的镜像(生产推荐) 若希望直接使用已发布的官方镜像,可将
docker-compose.yml中的build:替换为:services: prompt-manager: image: zhuchenyu2008/prompt-manage:latest ports: - "3501:3501" volumes: - prompt-data:/app/data environment: - FLASK_ENV=production restart: unless-stopped
# 构建镜像(本地开发场景)
docker build -t prompt-manager .
# 运行容器
docker run -d -p 3501:3501 -v prompt-data:/app/data prompt-manager- Python 3.9+
- Flask 框架及相关依赖
-
克隆或下载项目
git clone https://github.com/zhuchenyu2008/prompt-manage cd prompt -
安装依赖
pip install -r requirements.txt
-
启动应用
python app.py
-
访问应用 打开浏览器访问:http://localhost:3501
注意:应用会在首次运行时自动创建数据库文件。
- 容器/Compose 环境:默认路径为
/app/data/data.sqlite3(已挂载为持久化卷),无需额外配置。- 本地直跑(非 Docker):请通过环境变量覆盖路径,例如
DB_PATH=./data.sqlite3 python app.py,数据库将创建在项目根目录。
prompt/
├── app.py # Flask 应用主文件
├── requirements.txt # Python 依赖文件
├── data.sqlite3 # 本地运行时可选的数据库文件(通过 DB_PATH 指向)
├── Dockerfile # Docker 镜像配置
├── docker-compose.yml # Docker Compose 配置文件
├── .dockerignore # Docker 构建忽略文件
├── templates/ # HTML 模板
│ ├── layout.html # 基础布局模板
│ ├── index.html # 首页(卡片/列表切换 + 预览)
│ ├── prompt_detail.html # 详情页(编辑页面)
│ ├── versions.html # 版本历史页面
│ ├── diff.html # 对比页面
│ ├── settings.html # 设置页面
│ └── auth.html # 登录/解锁页面(访问密码)
├── static/ # 静态资源
│ ├── css/
│ │ └── style.css # 样式文件
│ └── js/
│ └── main.js # 前端脚本
└── README.md # 项目说明文档
- prompts: 提示词基本信息
id,name,source,notes,color,tags,pinned,created_at,updated_at,current_version_id,require_password
- versions: 版本历史记录
id,prompt_id,version,content,created_at,parent_version_id
- settings: 系统设置
key,value- 关键键值:
version_cleanup_threshold:版本保留阈值(默认 200)auth_mode:访问密码模式(off|per|global)auth_password_hash:访问密码的 SHA-256 哈希
{
"prompts": [
{
"id": 1,
"name": "客服助手",
"source": "ChatGPT",
"notes": "处理客户咨询的标准回复模板",
"color": "#409eff",
"tags": ["场景/客服", "业务/售后"],
"pinned": true,
"require_password": false,
"created_at": "2024-01-01T00:00:00",
"updated_at": "2024-01-02T12:34:56",
"current_version_id": 3,
"versions": [
{
"id": 1,
"prompt_id": 1,
"version": "1.0.0",
"content": "你是一个专业的客服助手...",
"created_at": "2024-01-01T00:00:00",
"parent_version_id": null
}
]
}
]
}-
创建提示词
- 点击首页"新建提示词"按钮
- 填写名称、来源等信息
- 编写提示词内容
- 选择版本升级类型并保存
-
版本管理
- 编辑时勾选"保存为新版本"创建版本历史
- 在详情页查看所有版本历史
- 可对比任意两个版本的差异
- 支持从历史版本回滚
-
搜索和筛选
- 使用首页搜索框进行全文搜索
- 支持按创建时间、修改时间、名称、标签排序
- 置顶重要提示词便于快速访问
- 标签系统:使用
/创建层级标签,如部门/技术/开发 - 批量操作:通过导入导出功能进行批量数据管理
- 版本对比:支持词级和行级两种对比模式
- 主题切换:点击右上角主题按钮切换深色/浅色模式
- 颜色导入导出:导出 JSON 包含
color字段;导入时自动识别与校验(非法值忽略),留空按未设置处理
- 打开“设置 → 访问密码”。
- 设置/修改密码(4–8 位)。
- 选择模式:
- 指定提示词密码:在提示词编辑页勾选“该提示词需要密码访问”。
- 全局密码:开启后访问任意页面均需先登录。
- 首页在“指定提示词密码”模式下会隐藏受保护提示词的标签、备注和内容,仅显示“来源:需要密码”;点击卡片可解锁。
- 位置:提示词统计栏下方、列表上方的圆角小按钮。
- 图标:网格视图
fa-table-cells与列表视图fa-list两个图标来回切换。 - 默认:网格视图(卡片式布局,自动自适应列数)。
- 记忆:切换结果会保存在
localStorage.viewMode中,刷新后仍保持。 - 移动端:为保证阅读性,隐藏切换按钮且强制单列显示。
默认监听端口 3501,可在 app.py 中修改:
app.run(host='0.0.0.0', port=3501, debug=True)- 默认每个提示词保留最新 200 个版本
- 超出限制时自动删除最旧的版本
- 可在设置页面调整此阈值
- 访问密码为轻量级访问控制,密码以 SHA-256 存储,无盐;请勿用于高安全场景。
- 忘记密码可通过 SQLite 工具清除:
清除后重启应用并在设置页重新配置。
-- 使用 sqlite3 打开数据库后执行 DELETE FROM settings WHERE key='auth_password_hash'; UPDATE settings SET value='off' WHERE key='auth_mode';
- 后端: Flask (Python Web 框架)
- 数据库: SQLite (轻量级本地数据库)
- 前端: 原生 HTML/CSS/JavaScript
- 样式: CSS 变量 + Flexbox/Grid 布局
- 图标: Font Awesome
- 依赖: Flask, Werkzeug
- 主题系统: 使用 CSS 变量和
data-theme属性 - 响应式设计: 移动优先的响应式布局
- 无依赖构建: 纯静态资源,无需构建工具
- 数据持久化: localStorage 保存用户偏好设置
- 依赖缺失:运行
pip install flask安装 Flask 框架 - 端口占用:修改
app.py中的端口号 - 权限问题:确保对当前目录有读写权限
- 数据库损坏:删除 DB_PATH 指向的数据库文件后重新生成(容器默认
/app/data/data.sqlite3;本地示例./data.sqlite3)
如需重置所有数据,删除 DB_PATH 指向的数据库文件后重启应用即可(容器默认 /app/data/data.sqlite3;本地示例 ./data.sqlite3)。
- DB_PATH: 指定 SQLite 数据库文件路径
- 容器/Compose 默认:
/app/data/data.sqlite3 - 本地运行示例:
DB_PATH=./data.sqlite3 python app.py - 未设置时使用默认值;应用会在首次访问时自动创建目录与数据库文件
- 容器/Compose 默认:
- ✅ 新增提示词颜色标注:在“高级设置”可设置颜色(#RGB/#RRGGBB),首页卡片显示细微彩色外圈;内置可视化取色器、预览圆点与清除按钮;导入/导出完整支持
color字段 - ✅ 首页卡片式网格布局 + 桌面端视图开关
- ✅ 完善的黑夜模式适配
- ✅ 首页内容预览一键复制
- ✅ 动态页面标题显示
- ✅ 简化的用户界面
- ✅ 增强的颜色主题系统
- ✅ 新增访问密码(关闭/指定提示词/全局)与卡片加锁显示
- 统一使用相对路径作为
next- 在全局密码拦截中将
next从request.url改为相对路径(如/settings?...),避免出现http://127.0.0.1这类内部地址。 - 在登录与解锁处理中对
next做安全归一化,只允许站内相对路径,防止外部跳转导致失败或安全风险。
- 在全局密码拦截中将
- 信任反向代理的头
- 加入
ProxyFix,尊重X-Forwarded-Proto/Host等头,确保request.host/request.url能反映真实外网域名与协议。
- 加入
- 修复设置页未授权修改密码的逻辑漏洞,避免任意用户可进入设置修改密码。