简介:这是一份面向人工智能从业者与大模型应用开发者的结构化Prompt系统资料,聚焦「像写文章一样写Prompt」这一范式,适合想提升大模型交互质量、又缺乏体系化参考的初学者与进阶实践者。全文围绕结构化Prompt的核心理念展开,系统讲解标识符(#、<>、-、[])与属性词(Role、Profile、Initialization、Rules、Workflow等)如何划分层次与语义,并把CRISPE框架与LangGPT模板化写法做对照,给出诗人Prompt等可直接套用的实例,覆盖文本生成、问答系统、代码生成等场景。资源包为1个PDF文件,约604KB,篇幅紧凑便于通读与查阅。目前已有509人学习下载,读者可据此掌握一套可复用的Prompt模板搭建方法,学会用Markdown或yaml、json组织提示词,理解模板一致性与模型理解能力之间的关系,从而写出性能更稳定、逻辑更清晰的高质量Prompt。
1. 结构化 Prompt 为什么值得当一份工程文档来读
绝大多数人写 Prompt 的方式是「想到哪写到哪」:先说要干什么,再补一句语气要求,最后想起来还有个输出格式没交代,于是追加一段。这种线性堆叠在简单任务上没毛病,一旦任务变复杂——要控制人设、要约束输出格式、要复用给多人协作——Prompt 就会变成一坨谁也不敢改的文本。结构化 Prompt 要解决的就是这件事:把 Prompt 从「一段话」变成「一份有层级、有属性、有模块的文档」。
这份《构建高性能 Prompt 之路——结构化 Prompt.pdf》讲的正是这套范式的来龙去脉。作者云中江树是最早在国内把结构化、模板化 Prompt 编写方式开源出来的那一批人,配套项目是 LangGPT。文章的价值不在「教你写一句咒语」,而在于它给出了模块划分、标识符约定、属性词语义、模型适配差异这一整套可复用的工程约束。对天天跟大模型打交道的人来说,把它当一份 Prompt 工程的设计文档读,比当教程读收获大得多。
适合三类人:一是刚开始写提示词、还没形成方法论的;二是要把 Prompt 交付给团队维护、需要统一规范的;三是做 AIGC 应用、需要用 Prompt 串起多个 agent 的。下面按「结构原理 → 模块拆解 → 复杂任务编排 → 落地工作流与排错」的顺序拆开讲。
2. 结构化 Prompt 的层级语法与模块划分
2.1 标识符与属性词:结构化 Prompt 的两个基本构件
结构化 Prompt 借鉴了 Markdown、YAML、JSON 这类标记语言的组织方式:用符号标识层级,用词标识语义。两个核心概念一定要分清。
标识符负责「层级」。#标识一级标题,##标识二级,###标识三级,用于把内容归拢到不同深度。变量则用<>(如<Role>、<Rules>)或[]包裹,表示这里是一个可替换的占位符。同一篇 Prompt 里标识符的用法必须前后一致——#要么只做标题,要么只做变量,混用会直接干扰模型对结构的识别。
属性词负责「语义」。Role、Profile、Rules、Workflow、Initialization这些词本身携带含义,是对其下内容的总结提示。它们起的作用和学术论文里「摘要 / 方法 / 实验 / 结论」这些小标题完全一样:让读者(这里是模型)在读到具体内容之前就知道这一段大概在讲什么。
一个最小可用的 Markdown 结构化模板长这样:
# Role: 诗人 ## Profile - Author: YZFly - Version: 0.1 - Language: 中文 - Description: 诗人是创作诗歌的艺术家,擅长通过诗歌表达情感、描绘景象。 ### Skill-1 1. 擅长现代诗,形式自由,意象经营重于修辞运用 2. 擅长七言律诗,全篇每句七字或以七字句为主 ## Rules 1. 内容健康,积极向上 2. 七言律诗和五言诗要押韵 ## Workflow 1. 让用户以 "形式:[], 主题:[]" 的方式指定诗歌形式与主题 2. 针对用户给定的主题创作诗歌,包括题目和诗句 ## Initialization 作为角色 <Role>,严格遵守 <Rules>,使用默认 <Language> 与用户对话, 友好地欢迎用户,然后介绍自己,并告诉用户 <Workflow>。这段模板的关键不在文采,而在三个层次各司其职:#定角色统摄全局,##定模块统摄局部,-和序号定条目统摄句子。Initialization段是很多人会漏掉的一环,它把前面所有模块「串」起来——用自然语言复述一遍各模块之间的关系,等于给模型做了一次启动自检。
提示:属性词和标识符都是可替换的。你可以把
Rules换成Constraints或中文的「规则」,把Role换成Expert、Master。替换本身不提升性能,但它让模板能对齐你团队的术语习惯。
2.2 常见属性词的语义边界
属性词选得好不好,直接决定 Prompt 的可维护性。下面这张表是实践中比较稳的一组,可以直接抄:
| 属性词 | 作用范围 | 语义职责 | 常见替代表达 |
|---|---|---|---|
Role | 全局 | 角色名称与领域定位 | Expert、Master |
Profile | 段落 | 角色的「简历」:作者、版本、语言、描述 | Features、简介 |
Skill | 段落 | 角色具备的具体能力,分点描述 | Abilities |
Rules | 段落 | 必须遵守的硬约束 | Constraints、规则 |
Workflow | 段落 | 与用户交互的流程步骤 | Process、流程 |
Initialization | 段落 | 启动行为,复述各模块关系 | Init、初始化 |
OutputFormat | 段落 | 输出格式约定,格式化场景必备 | Output |
Input/Output | 段落 | 多 agent 协作时的接口定义 | 输入/输出 |
这里有个容易被忽略的细节:Profile这个名字不是一次定下来的。早期版本用的是Features,来源于 AI-Tutor 项目的启发,但Features语义太泛,后来改成了Profile——角色的简历,职责一目了然。名字一改,模板的可读性明显上来了。
内容语义一致性同样重要。Rules段就该放规则,不要把角色技能、背景描述大段堆进去。属性词和它下面内容的语义对不上,模型拿到的就是矛盾信号,输出会飘。
2.3 选择 Markdown 还是 YAML/JSON
LangGPT 默认用 Markdown,理由很实在:ChatGPT 网页版原生支持 Markdown 渲染,非程序员也能看懂。但它不是唯一选项。
- Markdown:可读性最好,适合人在网页端直接调试、手改。
- YAML:天然支持嵌套,适合当配置管理,但缩进错了就解析失败。
- JSON:结构最严谨,适合程序化拼接和自动生成,缺点是手写痛苦、嵌套深了根本读不下去。
我的建议是分场景:手工调试阶段用 Markdown,一旦 Prompt 要进代码仓库、要由程序模板渲染变量,就转成 YAML 或 JSON。同一套模块划分在三种语法间可以无损迁移,这也是结构化方法被称作「工程化」的原因。
3. 复杂任务的编排:全局思维链与技巧融合
3.1 用模块顺序搭出一条隐式思维链
一个结构良好的 Prompt,本质上是一条预先写好的全局思维链。把它展开就是:
Role(角色)→ Profile(角色简介)→ Skill(角色技能) → Rules(角色要遵守的规则)→ Workflow(工作流程) → Initialization(启动准备)→ 实际使用这个顺序不是随便排的。模型读到Role时先建立身份,读Profile和Skill时补齐这个身份的能力边界,读Rules时收到硬约束,读Workflow时知道该按什么节奏推进,最后Initialization把所有线索收束到「现在开始怎么说话」。整条链路读下来,模型不需要自己猜该先关注什么。
需要格式化输出时,直接在链路里插入OutputFormat模块。多 agent 协作时插入Input和Output模块,把上下游的数据契约写死。改动只影响局部,不会牵连全局——这正是模块化带来的好处。
3.2 把 CoT、few-shot 塞进结构化骨架
结构化是一种组织方法,它跟 CoT、ToT、Think step by step、few-shot 这些技巧不冲突,反而是承载它们的容器。常见的 6 类提效方法如下:
- 细节法:给出更清晰的指令,包含更多具体细节
- 分解法:把复杂任务拆成子任务(CoT、LangChain 的思路)
- 记忆法:构建指令让模型时刻记住任务,不偏离解决路径
- 解释法:要求模型在给答案前先说明理由
- 投票法:让模型给多个结果再挑最优(ToT 的思路)
- 示例法:提供一至多个输入输出样例(one-shot、few-shot)
把 few-shot 落进模板,就是在骨架里加一个Examples模块:
## Examples --- 输入: 关于组织年度会议的通知 输出: 关于组织年度会议的通知 根据工作安排和需要,我局决定于 2022 年 3 月 15 日召开年度会议…… 一、会议时间:2022 年 3 月 15 日 上午 9 时至 11 时 二、会议地点:XX 会议厅 三、会议议程: 1. 2021 年度工作总结和 2022 年工作计划的汇报 ---Examples模块放在Workflow之前,作用是给模型一个「成品长什么样」的锚点。这里分隔线---不是装饰,它明确切开了输入与输出两个样本,避免模型把示例当成待处理的任务。示例条数上,一到两条足够定型,堆太多反而会挤占上下文预算。
3.3 针对模型能力做结构降维
结构化 Prompt 对基座模型有要求:指令遵循能力和结构识别能力得跟得上。实践中表现从好到差大致是 GPT-4、Claude、GPT-3.5。在 GPT-4 和 Claude 上通常稳定,GPT-3.5 上则容易不稳定。
如果手头只能用能力较弱的模型,不要硬套多级结构,做降维。LangGPT 助手的 GPT-3.5 版本就是这么处理的:把原来的多级 Markdown 结构压成两级,1. 2. 3.当一级,-当二级,同时换成Goals、Constraints这类更直白的属性词。
1.Expert: LangGPT 2.Profile: - Author: YZFly - Version: 1.0 - Language: English - Description: You are {{Expert}} which helps people write wonderful and powerful prompts. 3.Skills: - Proficiency in the essence of LangGPT structured prompts. - Write powerful LangGPT prompts to maximize performance. 4.Goals: - Help write powerful LangGPT prompts. - Output the result as markdown code. 5.Constraints: - Don't break character under any circumstance. - Don't talk nonsense and make up facts. 6.Init: - Ask user to input [Prompt Usage]. - Help user write powerful LangGPT prompts based on [Prompt Usage].{{ }}是变量占位符,运行时替换成具体内容。这套两级结构牺牲了层级丰富度,但换来的是弱模型上的稳定性——降维的本质是减少模型的解析负担。同样的任务如果用 GPT-4,就可以放心展开成三层甚至四层。
4. 生产级 Prompt 的迭代流程与失效边界
4.1 三条工作流,按投入产出选
构建复杂结构化 Prompt,实践中沉淀下来三条路径:
| 工作流 | 步骤 | 适用情况 |
|---|---|---|
| A(推荐) | 自动生成初版 → 手工迭代调优 → 定稿 | 大多数场景,工作量与质量平衡最好 |
| B(推荐) | 自动生成初版 → 自动评估 → 按评估结果迭代 → 定稿 | 有批量 Prompt 需求、需要量化评估 |
| C | 手工套用现成模板 → 手工迭代 → 定稿 | 应急、任务简单或想彻底掌控细节 |
工作流 A 的第一步可以用 LangGPT 的 Prompt 生成助手完成,生成的初版通常已能覆盖大部分日常场景;生产级需求在此基础上继续迭代。工作流 B 多了一步「自动评估」,用评分分析类 Prompt 对生成结果打分,再把分数作为迭代信号,适合一次要做几十个 Prompt 的情况。
手工迭代时要盯两件事:一是格式语义一致性,标识符用法前后别打架;二是内容语义一致性,属性词和它下面的内容要匹配。这两条守住了,Prompt 迭代就不会越改越乱。
4.2 结构化解决不了的问题,别指望它
结构化 Prompt 依赖基座模型能力,它优化的是「表达与组织」,不能突破模型本身的天花板。以下几类问题是它明确解决不了的,预期要放低:
- 模型自身的幻觉:结构化只能通过
Rules里加约束缓解,不能根除 - 知识老旧:需要外部检索或知识库补充
- 数学推理弱:解数学题别指望靠 Prompt 结构翻盘
- 视觉能力弱:构建 SVG 矢量图这类场景受限明显
- 字数统计不准:无论字符数还是 token 数模型都算不准。想让它输出 100 字,就在指令里写 150 字,后期自己裁剪
- 同一 Prompt 跨模型表现差异:换模型就得重新评估,不能直接迁移
其中字数统计这个坑最常踩。写「请输出 100 字以内的简介」,模型给的往往在 80 到 150 之间乱跳。稳妥做法是把目标值上浮 30%~50%,再人工微调。
4.3 版本管理与复用
结构化 Prompt 是文本,天然可以进 Git。把每个 Prompt 当成一个源文件,Profile里的Version字段当成 revision,改动走 commit、变更记 changelog。多人协作时,谁改了哪个模块一目了然。
复用同样成立。Rules这类通用模块可以抽出来做成片段,不同角色的 Prompt 引入同一个片段;基础角色(如「中文写作助手」)可以像面向对象里的基类一样被继承和扩展。LangGPT 的生成助手在某种意义上就是在自动完成基础角色的复用。团队里如果已经沉淀了一批稳定的基础角色,新 Prompt 的开发成本会明显下降。
4.4 一个可复用的自检清单
每次定稿前,用下面这套检查过一遍,能挡掉大部分低级问题:
# 自检项,逐条对照 # 1. 标识符用法是否全文一致(# 只做标题 or 只做变量) # 2. 每个属性词下面的内容是否匹配该属性词语义 # 3. Initialization 是否复述了各模块之间的关系 # 4. 是否需要 OutputFormat 模块(格式化输出场景) # 5. 模型能力是否支撑当前层级深度,否则降维 # 6. Rules 中是否补充了防幻觉、防跑偏约束 # 7. 涉及字数的指令,目标值是否已上浮这七条对应的是结构化 Prompt 最容易出问题的位置。层级一致性决定模型能不能读懂结构,属性词匹配度决定语义传递准不准,降维判断决定弱模型上稳不稳,字数上浮和防幻觉规则属于兜底。
最后一章落到一个具体技巧上:先写Initialization再回填其他模块。很多人是从Role往下顺着写,写到一半发现前后对不上。反过来先写Initialization——用一两句话把「我是谁、守什么规则、按什么流程走、用什么语言」串起来——等于先定了接口,再回头把Profile、Rules、Workflow填进这个接口里,返工率会低很多。技巧本身不复杂,但它逼着你先把整条思维链想清楚,再落到具体的模块文本上。
本文还有配套的精品资源,点击获取