[基石1]提示词工程(Prompt Engineering)
[基石1]提示词工程(Prompt Engineering)
为什么说【提示词工程】是基石?
因为后来火热的所谓的MCP、A2A、Skills本质都是要写好相关提示词,然后加上工程设计【那个叫上下文工程】结合,然后加上一点设计者的想法,沉淀出的一些协议和范式而已
- 所以,我认为AI开发的两大基石只有:提示词工程和上下文工程
Prompt:在大语言模型应用中,用于“提示”模型唤起特定能力以解决实际问题的提问方式,是prompt工程的核心。
不少技术背景用户初接触 Prompt Engineering 时的第一印象:“不过就是加个括号、写清楚点,没啥技术含量。”
- 但是prompt 工程的“门槛低”只是表象,真正的技术含量在于你能用 prompt 解决多难的问题、做出多稳的系统,此外prompt的设计其实还是有一些框架、套路(因为现代大模型预训练埋下的一些训练语料的刻意练习)
- “写 prompt 像写邮件,门槛低,但写得让人秒懂、有逻辑、有策略,是个高级技能。”
1、Prompt的整体设计框架选型
现在大部分情况都是直接使用RTF框架
RTF(Role-Task-Format)框架
- R-Role(角色):指定大模型担当固定角色(程序员、数据分析师、讲解员、记者等等)
- T-Task(任务): 任务,告诉大模型需要为我们做的事情
- F-Format(格式):大模型最终结果的返回格式(比如:表格、Markdown、英文等等)
这是一个非常简单通用的Prompt提示框架,我们和任意大模型对话场景都可以使用该规范进行输出。
RISEN框架
- R-Role:大模型扮演的角色
- I-Instructions: 指示命令,和Task-任务差不多
- S-Steps: 步骤
- E-End Goal: 最终目标
- N-Narrowing(Constraints): 缩小范围(约束条件),和RTF框架中的Format有异曲同工之妙,一个是格式的约束,而这里的约束可以是任意方面,比如回答的内容(特定领域)、字数限制等等方面
该框架主要适合:
- 撰写具有特定约束的任务(例如博客文章)
- 有明确指导方针的任务(例如商业计划)
我的思考:好像cursor的每一步规划,可能也是产出这样的prompt?
RODES框架
- R-Role: 角色
- O - Objective: 目标
- D - Details: 详细的细节
- E - Examples: 示例
- S - Sense Check: 感官检查
密度链模式
密度链模式Prompt是Salesforce、麻省理工学院和哥伦比亚大学的研究人员推出的一种新提示,它非常的高效,使用递归来创建越来越好的输出的提示,与普通提示生成的 GPT-4 摘要相比,它生成的摘要更加密集且更适合人们理解。
适合:
- 总结
- 改进您最喜欢的提示
- 通过递归生成可用的长格式内容
思考链模式
只需要在末尾添加”让我们逐步思考”即可。
通过这种模式来逐步改善大模型的推理能力,非常适合一些****复杂的任务处理。例如:
- 分析型或者逻辑推理型的任务
- 决策
- 解决问题(比如程序员根据错误日志找Bug)
而要使用这种模式,只需要在末尾添加”让我们逐步思考”即可。
2、[实践真正有用的技巧]
技巧1.格式化输出的核心技巧:分隔符
在大量的 prompt 实验中,人们发现使用结构符号、强调符号,可以显著提高模型响应的准确性和一致性。【我在实践中也发现这个有效,但是随着2025年一年的努力,好像大模型进化到自己能更好的理解了】
使用分隔符清晰界定输入部分,核心原因:标记符(如[]、<>、【】)有助于形成明确的结构边界,让模型能更容易理解上下文的角色和任务划分
- 在构建prompt时,使用分隔符将特定文本部分与提示的其他部分清晰隔开,能有效避免提示词冲突。任何能让模型识别出单独部分的符号都可作为分隔符,常见的包括:
- 章节标题:通过不同层级的标题区分不同内容模块。也就是markdown的那些
#、## - 三重双引号:
""",在代码编写中常用于包裹较长的文本字符串。【类似python中的那些】 - 三重单引号:
''',功能与三重双引号类似,适用于不同的语法环境。【类似python中的那些】 - 三重破折号*:
---,在文本中起到明显的分隔作用。 - 角括号*:
<>,常被用于标记特定元素。 - XML标签:,利用结构化的标签形式区分不同内容。
[]和<>:表示关键结构、标签或占位符,引起模型注意注意:,像文档警告或说明,模型倾向提高注意力- 中文普通句子
- 无明显结构边界,语义模糊,容易被模型“平均处理”
- 章节标题:通过不同层级的标题区分不同内容模块。也就是markdown的那些
为什么这些符号这么有效?看上去能让模型“更聪明”?
- 1、大模型(如GPT系列)在**预训练**中接触了大量有明确结构的文本:
- 编程语言里的
<tag>、[param]、{value} - 网页/HTML/XML格式、Markdown、JSON 等结构化数据
- 各种提示工程(Prompt engineering)范例里大量使用
<>,[],---,###分隔语法 - 所以它习惯性地将这些字符视为一种“分隔任务”或“标记角色”的信号
- 编程语言里的
- 2、Token 分词更稳定
- 特殊字符如
[]、<>本身是**单独成一个token**,分词不会混乱; - 而中文如果没有加标记,模型可能对句子结构的切分就不明确,尤其是你输入的句子不够规范或存在歧义。
- 特殊字符如
技巧2.角色扮演
加入 persona 能大幅优化回答质量:
你是一个资深产品经理
技巧3.控制输出格式,比如xml、json、html、svg、markdown
你控制格式化输出格式,你就能基于数据做兜底策略!
技巧4.使用思维链(Chain-of-Thought , CoT),一步步引导模型(分步思考)
让模型先“想”再写, 它是一种使用起来较为简单的引导方法,但能够显著提高大模型在复杂场景下的推理能力。
比如
“让我们一步一步地推理。”或者
请一步步思考,并最终得出答案。
问题:有 12 颗苹果,其中 4 颗烂掉了,剩下的能吃的苹果是多少?或者用更结构化的方法:
请依照以下步骤回答问题:
1. 阅读问题
2. 提取已知信息
3. 推理过程
4. 输出最终结果技巧5.抗幻觉:加规则限制、加反例
大模型爱“胡说八道”(hallucinate),你可以这样提示它更小心:
请严格基于提供的信息回答,若信息不完整,请直接说“信息不足”。
示例:
输入:[问题] 孙悟空是哪一年出生的?
输出:[回答] 信息不足。没有可靠历史记录说明孙悟空的出生年份。技巧6.**Few-shot / Zero-shot **
这些可以说是必备的做法:
- Zero-shot(零样本)****:模型不提供例子,直接输出
- Few-shot**:提供 1~3 个例子,引导模型模仿格式/思路**
技巧7.风格控制【仅在角色扮演中使用】
请用通俗易懂的大白话解释以下术语:Transformer 编码器技巧8.使用Meta Prompting 技术
- Meta Prompting**:提示模型自己生成 Prompt(这是提示的提示)**
3、prompt工程和上下文工程的结合【详细的看上下文工程】
技巧1.组合 Prompt,做工具链调用(Tool Use)
比如用 ReAct 思路,让模型先思考再调用工具,再观察结果——这些属于“多阶段”提示设计。
4、评估prompt工程的效果
批量数据验证prompt
- 使用dify:https://dify.ai/zh
- 使用coze(扣子):https://loop.coze.cn/
5、学习他人的prompt技巧【逆向工程】
附录1.术语表
- Prompt:在大语言模型应用中,用于“提示”模型唤起特定能力以解决实际问题的提问方式,是prompt工程的核心。
- RTF框架:Role - Task - Format框架,通过指定角色、任务和格式规范大模型输出,简单通用。
- 思考链模式:在提示末尾添加“让我们逐步思考”,引导大模型逐步分析复杂任务,改善推理能力。
- RISEN框架:包含角色、指示命令、步骤、最终目标和缩小范围(约束条件),适合特定约束或明确指导方针的任务。
- RODES框架:涵盖角色、目标、详细细节、示例和感官检查的提示框架。
- 密度链模式:利用递归创建更好输出的提示,生成的摘要更密集且适合理解,适用于总结等任务。
- 少样本提示(Few - shot prompting):为模型提供少量任务示例,帮助其学习任务模式和规律,提升在复杂或特定格式任务中的表现。
- 零样本提示(Zero - Shot Prompting):模型在无特定任务示例展示下,依靠自身预训练知识和任务理解能力直接处理任务。
- 思维链提示(Chain - of - Thought Prompting):为模型展示详细推理过程,提升其在复杂推理任务中的表现,可与少样本提示结合。
- 自我一致性(Self - Consistency):通过提供多个少样本推理示例,让模型筛选最一致答案,增强在算术和常识推理任务中的可靠性。
- 生成知识提示(Generated Knowledge Prompting):先让模型生成与任务相关知识,再整合知识得出准确答案,解决模型处理需额外知识任务的局限性。
- 链式提示(Prompt Chaining):将复杂任务拆分为多个子任务,逐个子任务生成提示并传递结果,提高任务处理准确性与可靠性。
- 思维树(ToT):通过维护思维树,让模型生成和评估中间思维步骤,结合搜索算法应对复杂探索性任务。
- 检索增强生成(RAG):将信息检索与文本生成结合,检索相关文档为模型提供知识支持,缓解“幻觉”问题。
策略1.RAG的做法,在prompt里面,换多个关键词去调用工具查找
- 自动推理并使用工具(ART):使模型自动生成包含推理步骤的程序,并在需要时调用外部工具,提升解决问题能力和效率。
- 自动提示工程师(APE):利用大型语言模型生成指令候选项,依据评估分数选择最佳指令,提升提示生成效率与效果。
- Active - Prompt:先查询模型生成多个答案,计算不确定度后挑选最不确定问题由人类注释示例,优化模型对不同任务的适应性。
- 方向性刺激提示(Directional Stimulus Prompting):训练策略LM生成引导提示,增强对模型生成结果的掌控力,提升文本摘要等任务的质量。
- PAL(程序辅助语言模型):让模型生成程序来解决问题,借助编程运行时提升解决复杂问题的能力。
- ReAct框架:使模型交错生成推理轨迹和操作,提升答案的可靠性与可解释性,在知识密集型和决策任务中表现良好。
- 自我反思(Reflexion):包含参与者、评估者和自我反思三个模型,帮助模型从错误中学习并提升性能。
附录2、还有一个影响你对自己Prompt水准判定的因素:基础模型本身的水准
比如,同一个好的prompt,可能你放国内某些模型就很差,但是放到claude之类,发现更差的prompt也都能做得很好
原因有2个
1、claude之类,本身的prompt工程可能做得更好
2、claude基础模型本身在特定领域水准领先日常某些模型,一方面是训练语料问题、一方面是他们的上下文工程设计得很出色
所以结论就是:你的prompt要和具体基础模型去微小绑定!而不是一条prompt吃遍所有大模型
比如,好的基模+比较一般的prompt:claude
绘制 xxx 结构图(SVG)
- 元素不重叠,避免内容过于拥挤
- 添加小型公式来解释关键计算
- 使用精确的专业术语
- 数学公式使用公式字体,英文使用 time news roman 字体,中文使用宋体效果也很好,但是在很多其他模型表现就很不好,那就需要更高端的prompt工程
上面的一般的prompt:完全可以让你的论文、演讲、教学材料立刻提升一个档次!
参考资料
- 大模型Prompt技巧全解析:https://mp.weixin.qq.com/s/u-79q3R0l01oO-7WWUNF2A
- ReAct模式,姚顺宇,https://arxiv.org/abs/2210.03629