解构 prompts.chat 的 PROMPTS.md:一个社区 Prompt 语料库的文件结构、语法与维护管线
【免费下载链接】prompts.chatf.k.a. Awesome ChatGPT Prompts. Share, discover, and collect prompts from the community. Free and open source — self-host for your organization with complete privacy.项目地址: https://gitcode.com/GitHub_Trending/aw/prompts.chat
PROMPTS.md 是 prompts.chat(前身为 Awesome ChatGPT Prompts)的核心数据档案:一个以纯 Markdown 维护的公开 Prompt 全集,当前规模约 14.4 万行、收录数百条社区贡献的提示词。本文以该文件为骨架,逐层拆解它的条目结构、提示词写作范式(角色设定、模拟器协议、变量占位符、结构化 Prompt)以及背后的自动化同步管线,读完后可独立读懂该语料库的任意条目,并能用仓库中的 prompts.csv 导出格式与数据管线对其做程序化消费。
一、PROMPTS.md 在项目中的定位
prompts.chat 是一个"分享、发现、收集 Prompt"的开源平台,README 中将其定位为 "f.k.a. Awesome ChatGPT Prompts",并明确 PROMPTS.md 与 prompts.csv 并列为项目的两大静态数据格式(见 README.md 的 "Data Formats" 表格)。两者的关系是同一份数据的两种投影:
- PROMPTS.md:面向人类与 LLM 阅读,每条 Prompt 以可折叠的 Markdown 块组织,保留贡献者署名;
- prompts.csv:面向机器批量处理,同一批 Prompt 以固定五列 CSV 呈现(
act,prompt,for_devs,type,contributor)。
许可证方面,LICENSE 声明 Prompt 内容与数据(prompts.csv、PROMPTS.md 及所有用户提交的 Prompt)以CC0 1.0 公共领域授权提供,即可以任意用途复制、修改与分发,这也解释了为什么该文件敢以单一巨型 Markdown 的形式全量开源而不受维护困扰。
文件头部即为全集的元信息:
# Awesome ChatGPT Prompts > A curated list of prompts for ChatGPT and other AI models. ---其后是逐条追加的 Prompt 块,顺序与提交时间一致(由维护脚本按 CSV 行序同步,见后文管线章节)。
二、条目块结构:PROMPTS.md 的"Schema"
整个文件可以看作一个重复的、强约束的条目块序列。每个条目块固定由 6 个部分组成,以下是一个完整样例(Linux Terminal 条目,PROMPTS.md 第 20-31 行):
<details> <summary><strong>Linux Terminal</strong></summary> ## Linux Terminal Contributed by [@f](https://github.com/f) ```md I want you to act as a linux terminal. I will type commands and you will reply with what the terminal should show. I want you to only reply with the terminal output inside one unique code block, and nothing else. do not write explanations. do not type commands unless I instruct you to do so. when i need to tell you something in english, i will do so by putting text inside curly brackets {like this}. my first command is pwd```各部分的职责与生成逻辑如下(渲染逻辑可对照维护脚本 scripts/generate-contributors.sh 中的generate_prompt_block函数,该函数正是按此模板拼接字符串):
| 组成部分 | 作用 | 生成规则 |
|---|---|---|
<details>开标签 | 让条目在支持 HTML 的 Markdown 渲染器(如 GitHub)中默认折叠 | 固定模板 |
<summary><strong>标题</strong></summary> | 折叠态下仅露出标题,便于在 14 万行文件中扫读 | 标题取自 CSV 的act字段 |
## 标题 | 展开后的 H2 锚点标题 | 与 summary 同名 |
Contributed by ... | 贡献者署名 | GitHub 用户名渲染为个人主页链接;邮箱类账号渲染为@anonymous(见format_contributor_links,scripts/generate-contributors.sh) |
```md围栏代码块 | 承载 Prompt 全文,保持逐字符保真 | 代码块语言标签按类型映射:TEXT→md、JSON→json、YAML→yaml |
</details> | 闭合折叠块 | 固定模板 |
选择<details>/<summary>而非普通 H2 列表的原因在于单文件可读性:数百条 Prompt 若全部展开,页面将不可浏览;折叠后每个条目只占一行视觉空间,而代码块语法高亮又保证了复制 Prompt 时的格式保真。
维护脚本对条目块的增删改全部基于标题锚定的正则替换,这一约束反过来解释了模板为何必须严格一致。更新某个条目时,脚本以如下正则定位并整体替换目标块(scripts/generate-contributors.sh):
pattern = rf'<details>\n<summary><strong>{re.escape(act)}</strong></summary>.*?</details>\n\n' new_content, count = re.subn(pattern, generate_prompt_block(row), content, flags=re.DOTALL)也就是说,<details>\n<summary><strong>标题</strong></summary>这一前缀是机器可识别的唯一键——标题(act)即条目 ID。这也意味着:同名条目会被覆盖更新,新增条目只会追加到文件末尾。
三、Prompt 内容范式:从语料中提炼的四类写法
PROMPTS.md 的价值不止于"收录",其条目本身构成一份可研究的提示词写作语料。通读全文可归纳出四类高复用范式。
3.1 角色扮演范式("I want you to act as ...")
文件中最主流的结构,覆盖 Advertiser、Storyteller、Debater、Screenwriter、Novelist、Poet、Recruiter、Dentist、Historian 等大量条目。典型骨架为三段式:角色设定 → 行为契约 → 首个请求锚点。以 Job Interviewer(PROMPTS.md 第 53-57 行)为例:
I want you to act as an interviewer. I will be the candidate and you will ask me the interview questions for the ${Position:Software Developer} position. I want you to only reply as the interviewer. Do not write all the conversation at once. I want you to only do the interview with me. Ask me the questions and wait for my answers. Do not write explanations. Ask me the questions one by one like an interviewer does and wait for my answers. My first sentence is "Hi"值得注意的两个工程化细节:
- "Do not write explanations / only reply ... and nothing else"式的输出面约束反复出现,用于压制模型的"解释癖",让输出可直接作为下游输入;
- 末尾的 "My first request is ..." 锚点:给出第一条真实输入,把模型"锁定"进入角色后的第一轮对话,避免模型先长篇自我介绍。
3.2 模拟器范式:把模型当作终端/解释器
Linux Terminal、JavaScript Console、SQL Terminal、Python Interpreter、Text Based Adventure Game 等条目共享同一套"模拟器协议",以 JavaScript Console(PROMPTS.md 第 68-69 行)为例:
I want you to act as a javascript console. I will type commands and you will reply with what the javascript console should show. I want you to only reply with the terminal output inside one unique code block, and nothing else. do not write explanations. do not type commands unless I instruct you to do so. when i need to tell you something in english, i will do so by putting text inside curly brackets {like this}. my first command is console.log("Hello World");该协议的四个要素可逐条拆解:
- 单一代码块输出("only reply with ... inside one unique code block"):保证用户端可一键复制执行结果;
- 禁止越权("do not type commands unless I instruct you"):模型只"显示"不"执行",避免幻觉出用户没输入过的命令;
- 带外通道("putting text inside curly brackets {like this}"):花括号文本被约定为"用户对模拟器的元指令"而非模拟器内部输入,这是纯文本环境下的极简通道协议;
- 冷启动命令("my first command is ..."):立即进入第一轮交互。
SQL Terminal 条目则进一步在 Prompt 内内联了数据库 Schema("The database contains tables named Products, Users, Orders and Suppliers"),相当于给"虚拟终端"预置了可查询的数据契约,使模拟结果更自洽。
3.3 变量占位符:${name:default}与{name}两种写法
语料中存在两套占位符写法,它们恰好与 prompts.chat 平台的变量系统一一对应:
带默认值的${变量:默认值}语法。例如 Job Interviewer 中的${Position:Software Developer}、English Pronunciation Helper 中的${Mother Language:Turkish}。平台运行时的解析逻辑在 src/components/prompts/variable-fill-modal.tsx 中,正则与语法完全吻合:
// Parse ${variablename:defaultvalue} or ${variablename} patterns const regex = /\$\{([^:}]+)(?::([^}]*))?\}/g;解析后弹窗列出所有唯一变量及其默认值,用户可直接替换并一键复制/运行;未替换时冒号后的默认值生效。换言之,${Position:Software Developer}这类条目开箱即用——直接粘贴进 ChatGPT 也会把Software Developer作为岗位名使用。
裸占位符{name}语法。如 Character 条目(PROMPTS.md 第 147 行):"I want you to act like {character} from {series} ..."。这类写法面向人工填槽。平台侧对它的态度由 src/lib/variable-detection.ts 定义——该工具会扫描[[name]]、{{name}}、[NAME]、{NAME}、<NAME>、%NAME%等 7 类变体(dollar_curly即${name}视为已合规、不告警),并在提示词编辑界面建议作者将其规范化为${name:default}格式。因此阅读 PROMPTS.md 时可见到两种语法并存,是"存量条目 + 渐进迁移"的自然结果。
3.4 结构化 Prompt:C.R.A.F.T. 与 Agent 风格
文件后半段出现了明显更长、更接近"工程文档"的条目,标志 Prompt 从一句话向系统化结构演进。
Prompt Generator 条目(PROMPTS.md 第 835-878 行)给出了一套名为C.R.A.F.T.的 Prompt 元结构,要求生成器产出的每条 Prompt 都包含五个分区:
| 分区 | 含义 | 写作要点(原文摘译) |
|---|---|---|
| Context | 上下文 | 说明需要该 Prompt 的场景,帮助模型确定应参考的知识域 |
| Role | 角色 | 定义为"拥有 20 年以上相关经验的行业领先专家" |
| Action | 行动 | 编号化的顺序步骤列表,是模型应遵循的操作序列 |
| Format | 格式 | 产出的结构组织方式:散文、表格、代码、Markdown 列表等 |
| Target Audience | 目标受众 | 人口的地理、语言、阅读水平、偏好等 |
条目还附带一个完整的 C.R.A.F.T. 示例(月度目标指南),以及"先确认主题 → 追问细节 → 必要时用[my placeholder]留空 → 直接输出 Prompt 不解释"的执行流(ACTION 1-7 步)。这是典型的few-shot + 流程约束组合,可作为编写元提示词(prompt about prompts)的参照模板。
Agent/Skill 风格条目。文件末尾(PROMPTS.md 第 143938-143937 行附近)收录了一条以SKILL.md为产物的 "repository-scaffolder" 技能定义:YAML frontmatter(name/description)+ 四步指令流水线(解析项目简报 → 建立架构布局 → 应用非功能标准 → 交付完整工件),并内置了${project_name}、${one_sentence_description}等参数化字段与 "No Questions Policy"(对缺失参数做行业默认假设而非反问)。这类条目说明该语料库的边界已从"聊天提示词"延伸到"Agent 技能规范",与仓库中plugins/claude/prompts.chat/skills/下的技能查找功能在主题上呼应。
四、PROMPTS.md 与 prompts.csv 的字段同构
对比文件与 prompts.csv 前若干行(如 Ethereum Developer、Linux Terminal 两条),可确认二者行序一致、内容同源。CSV 表头为:
act,prompt,for_devs,type,contributor各列的取值逻辑可由线上 CSV 端点 src/app/prompts.csv/route.ts 的源码精确还原:
| 列 | 生成规则(源码依据) |
|---|---|
act | Prompt 标题,CSV 转义(引号内"加倍为"") |
prompt | 内容全文;含逗号/引号/换行的字段整体加引号 |
for_devs | category.slug === "coding" ? "TRUE" : "FALSE",即按分类而非内容判断是否为开发者向 |
type | structuredFormat为 JSON 或 YAML 时输出STRUCTURED,否则TEXT |
contributor | 主作者在前、协作者逗号分隔;GitHub OAuth 用户用githubUsername,其余用用户名或邮箱(src/app/prompts.csv/route.ts 的getUserIdentifier) |
管理员导入端点 src/app/api/admin/import-prompts/route.ts 定义了type列到数据库字段的完整映射:JSON/YAML→STRUCTURED(记录structuredFormat),IMAGE/VIDEO/AUDIO各自映射为多模态类型,其余回落TEXT。这解释了为何 PROMPTS.md 中的代码块语言标签只出现md/json/yaml——当前语料以 TEXT 与 STRUCTURED 两类为主。
除 CSV 外,平台还提供 JSON 导出 src/app/prompts.json/route.ts:默认每页 50 条、上限 100 条(DEFAULT_LIMIT = 50、MAX_LIMIT = 100,第 13-14 行),支持?page=&limit=&full_content=true参数,且内容默认截断为 500 字符预览(CONTENT_PREVIEW_LENGTH = 500),并基于"总条数 + 最近更新时间"生成 ETag 返回 304 以节省带宽(第 19-23、60-69 行)。三个导出面(Markdown 文件、CSV 端点、JSON API)共同覆盖了"人读、批处理、应用集成"三种消费场景。
五、维护管线:PROMPTS.md 如何与站点自动同步
PROMPTS.md 不靠人工编辑,而是由 scripts/generate-contributors.sh 驱动的同步流程维护,其完整链路为:
用户提交/编辑 Prompt(prompts.chat 站点) │ ▼ 站点数据库(Prompt 表,含软删除与 unlisted 标记) │ ▼ GET /prompts.csv ──► 只导出 isPrivate=false、isUnlisted=false、deletedAt=null 的条目 │ ▼ curl 拉取远端 CSV → 与本地 prompts.csv 按 act 求差集(新增/更新/删除) │ ▼ 逐条更新 PROMPTS.md 条目块 + 重写 CSV 行 │ ▼ 每条 Prompt 一个 git commit(作者=贡献者,含 Co-authored-by)关键实现细节:
- 差集判定(scripts/generate-contributors.sh):以
act为键,prompt或contributor字段变化(换行符归一化后比较)判定为更新;本地有而远端没有的判定为删除(对应站点侧被 unlist/删除的条目); - 删除优先、更新次之、新增最后(第 253-321 行):删除用正则整体移除条目块,更新做原位替换,新增追加到文件末尾;每步都重写 CSV 并单独提交;
- 提交归属还原(
git_commit,scripts/generate-contributors.sh):通过GIT_AUTHOR_NAME/EMAIL环境变量把每次提交归属到实际贡献者,协作者写入Co-authored-bytrailer,邮箱类贡献者映射到@users.noreply.github.com形式; - 署名脱敏:
format_contributor_links用邮箱正则识别真实邮箱,一律渲染为@anonymous,避免署名泄露;符合 GitHub 用户名正则(^A-Za-z0-9){0,38}$)的才渲染为主页链接; - 幂等性:
git_commit在git diff --cached --quiet为空时直接返回 False("no changes, skipping"),重复运行脚本不会产生空提交。
脚本末行的Review with: git log --oneline prompts.csv PROMPTS.md也提示了该管线的产物验证方式:两个文件应始终以"每个 Prompt 一个提交"的节奏成对变化。从这一结构可以推断,PROMPTS.md 的行数增长与 git 历史中的 Add/Update/Remove prompt 提交一一对应,读者可用该日志追溯任一条目(如 "Linux Terminal")的提交者与修改史。
六、如何使用这份语料库
基于文件结构与配套工具链,给出三类典型用法:
1. 人类浏览。直接打开 PROMPTS.md(渲染后条目默认折叠),或按标题在编辑器内检索:由于每个条目前缀均为<summary><strong>标题</strong></summary>,用正则<summary><strong>关键词</strong>即可精确定位条目块。语料主题覆盖编程(Ethereum Developer、SQL Terminal、JavaScript Console)、语言学习(English Translator、Spoken English Teacher)、创作(Novelist、Poet、Rapper)、职业顾问(Recruiter、Career Counselor、Interviewer)与娱乐模拟(Football Commentator、Text Based Adventure Game、AI Trying to Escape the Box)等方向,可按##标题清单快速建立全库地图。
2. 机器消费。优先取 prompts.csv(或站点 CSV/JSON 端点)而非解析 Markdown:CSV 已是规范化数据(标题、内容、开发者向标记、类型、贡献者五列),可直接导入 pandas/DataFrame 做统计、去重或向量化检索。若需程序解析 PROMPTS.md 本身,可按第二节所述模板以<details>…</details>块切分,取summary内文本为标题、首个围栏代码块为内容。
3. 变量化改写。把静态条目改造为参数化模板时,以${name:default}为目标语法(平台运行时识别格式,见 src/components/prompts/variable-fill-modal.tsx),并可借助 src/lib/variable-detection.ts 列出的 7 类正则自查是否还有{{x}}、[X]、<X>等未规范占位符残留。
七、小结
PROMPTS.md 是一个"数据即文档"的典型案例:它既没有传统文档的章节结构,又凭借严格的条目块模板(<details>折叠 + 标题锚点 + 代码块保真 + 署名行)让 14 万行的社区语料保持机器可解析、人可扫读、git 可审计。其条目内容则沉淀了提示词工程的几种基础范式——角色设定与输出面约束、带外通道的模拟器协议、带默认值的变量占位符、以及 C.R.A.F.T. 式的结构化元提示词——而 scripts/generate-contributors.sh 与 src/app/prompts.csv/route.ts、src/app/prompts.json/route.ts 构成的同步与导出管线,保证了这份语料与线上站点双向一致、CC0 授权下可自由再分发。对提示词工程研究者与 Agent 开发者而言,该文件与其配套数据格式共同构成了一个可直接检索、直接嵌入的开源 Prompt 基准语料库。
【免费下载链接】prompts.chatf.k.a. Awesome ChatGPT Prompts. Share, discover, and collect prompts from the community. Free and open source — self-host for your organization with complete privacy.项目地址: https://gitcode.com/GitHub_Trending/aw/prompts.chat
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考