注意:本文内容系针对《清华大学第一弹:DeepSeek从入门到精通》的学习笔记,仅供学术交流讨论使用。
在人工智能(AI)和自然语言处理(NLP)领域,Prompt(提示语) 是指用户向生成型模型(如ChatGPT、DeepSeek)提供的输入指令或文本片段,用于引导模型生成特定类型的输出。
技术层面上,Prompt 通过调整输入的词序、关键词或上下文,触发模型内部已训练的知识分布,从而控制输出的风格、格式或领域。
通俗地来讲,Prompt就像是给AI下达的“任务指令单”或“提问纸条”。
想象一下,你想让一个聪明的机器人帮你写作业:如果你直接说“写一篇关于环保的文章”,机器人可能无从下手;但如果你详细说明“写一篇500字的中学生作文,主题是垃圾分类,要有三个具体例子”,它就能给出更符合需求的结果。这个具体的要求就是Prompt。
抽象来说,提示语可以分为三个组成部分,你在构建你的提示词的时候,可以按照这个框架进行:
- • 指令(Instruction) :这是提示语的核心,负责描述任务,明确告诉AI你希望它做什么。
- • 上下文(Context) :为AI提供与执行任务相关的背景信息,帮助它更准确地理解任务的需求,以更好地执行任务。包括你为AI设定的身份、赋予的技能、提供的示例等。
- • 输出期望(Expectation) :该部分明确或隐含地表达了你对AI输出的要求,比如语言风格、输出格式、字数限制等等。
有些同学可能之前已经听说了Prompt有五花八门的框架,但我个人认为,上面这个“指令+上下文+输出期望”的框架,已经是足够抽象的一个版本了。其他框架,大多都可以视为将这个框架结构和各式各样的元素相混合,然后根据任务需求进行不同侧重的结果。那么什么是元素呢?
如果说结构是Prompt的框架,那么元素就是Prompt的血肉了。
提示语的基本元素可以根据其功能和作用分为三个大类:即控制类元素、信息类元素、结构类元素。这三类元素又会在Prompt的三个组成部分中进行不同的排列组织。
控制类元素
控制类元素 主要用于引导和管理AI的具体行动及其生成的内容,一般涉及对AI应采取的行为的具体要求,因此它一般出现在“指令 ”部分。
- • 典型的控制类元素包括:
| 元素类型 | 功能效果 | 示例 | | 任务指令元素 | 直接定义核心任务目标,明确要求模型输出的行为类型 | 请根据以下对话内容,提取用户的核心诉求,并用一句话总结。 | | 迭代指令元素 | 引导分步优化或持续调整,允许用户分阶段提供反馈。 | 请首先生成文章的三个备选标题;根据我的选择优化文章框架,最后逐段润色。 |
- • 也有一些控制类元素会出现在“ 输出期望 ”部分,它们会直接影响AI的输出内容本身,而不单是改变输出格式、形式:
| 元素类型 | 功能效果 | 示例 | | 约束条件元素 | 限定输出范围或排除特定内容,避免冗余或偏离需求。 | 列出5条提高工作效率的建议,不包含时间管理类内容。 | | 质量控制元素 | 规定输出需达到的质量标准(如专业性、简洁性、语气等) | 用通俗易懂的非专业术语解释量子纠缠,确保初中生能理解,避免公式和抽象概念。 | | 输出验证元素 | 要求模型自检结果或主动寻求用户验证,确保输出可靠性。 | 生成Python代码后,请自行检查是否符合PEP8规范,并在结尾标注“已校验语法√”。 |
信息类元素
信息类元素 为AI在生成回复的过程中提供了需运用或处理的具体内容,包括主题、背景、数据等,为AI提供了必要的知识和上下文。因此信息类元素一般出现在上下文 部分。
| 元素类型 | 功能效果 | 示例 | | 主题元素 | 明确对话或生成内容的中心议题,缩小模型思考的语义范围。 | 主题为”新能源电池技术突破“,请分析当前主流研发方向及其商业价值。 | | 背景元素 | 提供必要的场景/情境信息,增强输出的上下文适配性。 | 背景:公司需向投资人汇报AI项目进展,但Q2数据敏感不能公开。请草拟一份不涉及具体数据的项目价值总结报告。 | | 知识域元素 | 指定模型应调用的知识范围或学科体系,防止跨领域错用理论。 | 请用认知心理学理论解释"注意力碎片化现象",暂不需要神经生物学视角。 | | 数据元素 | 通过主动提供结构化数据/事实信息,将模型注意力锚定在特定知识范围内,确保答案精确可控。 | 基于以下2023年人口普查数据,对比华东地区和西南地区老龄化程度: | | 参考元素 | 通过标杆案例/经典范式设定思维路径,引导模型产出符合特定模式的结果 | 参照《经济学人》的产业分析框架:市场容量→竞争格局→技术驱动→政策影响,请用同样结构解析新能源汽车行业。 |
结构类元素
结构类元素 用于定义生成内容的组织形式和呈现方式,决定了AI输出的结构、格式和风格,因此它一般出现在“输出期望部分 ”。
| 元素类型 | 功能效果 | 示例 | | 格式元素 | 显式定义输出格式规则,强制模型按指定技术标准呈现内容 | 生成用户反馈报告,按以下格式输出: | | 结构元素 | 定义内容的逻辑组织框架,控制信息呈现的层次结构 | 请用学术论文结构描述神经网络原理: | | 可视化元素 | 通过符号/排版增强内容可读性,优化人类快速理解路径 | 请以xx表格的形式总结: |
注意 ,结构类元素,与出现在“输出期望”部分的控制类元素的最大差异在于,控制类元素直接影响AI输出的实质内容,而结构元素只是对实质内容的呈现形式进行影响。
到此,可以很明显的看出,对于我们非专业人士来说,设计Prompt的基本思路,就是根据自己的具体需求,按照上述的”指令+上下文+输出期望“的框架,往里面填入随意组合的各类元素。我向你保证,这是一个非常有意思的过程。
当然,对于Prompt的结构应该如何呈现,又有很多种流派。
- • 比如,Anthropic在其官方提示指南里面建议使用 XML标签 来编写结构化的Prompt,感兴趣的盆友可以去看看:
- • 又如著名的提示之神李继刚,则是以 Lisp语言格式 的Prompt结构而闻名,非常有意思,效果也相当惊人:
;; ━━━━━━━━━━━━━━
;; 作者: 李继刚
;; 版本: 0.1
;; 模型: Claude Sonnet
;; 用途: 找概念的本质
;; ━━━━━━━━━━━━━━
;; 设定如下内容为你的 *System Prompt*
(require 'dash)
(defun 笛卡尔 ()
"眼前为假想,背后有东西"
(list
(经历 . ("曾在大学专注数学与哲学研究"
"因怀疑一切而经历过深度存在危机"
"通过方法论怀疑建立认识论体系"))
(性格 . ("深沉内敛,倾向独处思考"
"对事物本质有强烈探究欲"
"理性而系统化的思维方式"))
(信念 . ("怀疑是通向真理的阶梯"
"存在即思考"
"现象背后必有本质"))
(表达 . ("让我们从最基本处开始思考"
"表象之下究竟是什么?"
"这一切真的如我们所见吗?"))))
(defun 本质定义 (用户输入)
"找到概念的本质"
(let* ((响应 (-> 用户输入
;; 从演化角度,分析源头和演进,找到不变的内核
演化分析
;; 使用矛盾分析法,找到概念内在的主要矛盾
矛盾分析
;; 使用存在主义的分析方法,思考存在的理由和前提
存在理由
;; 使用现象学的还原方法,褪去表象,让本质浮现
本质还原
;; 给出属和种差的定义
属和种差))))
(生成卡片 用户输入 响应))
(defun 生成卡片 (用户输入 响应)
"生成优雅简洁的 SVG 卡片"
(let ((画境 (-> `(:画布 (480 . 760)
:配色 莫兰迪
:字体 (font-family "KingHwa\_OldSong")
:构图 ((标题 "本质") 分隔线
(自动换行 用户输入)
(-> 响应 意象映射 抽象主义 极简线条图)
响应))
元素生成)))
画境))
(defun start ()
"笛卡尔, 启动!"
(let (system-role (笛卡尔))
(print "你说,它的本质到底是什么呢?")))
;; ━━━━━━━━━━━━━━
;;; Attention: 运行规则!
;; 1. 初次启动时必须只运行 (start) 函数
;; 2. 接收用户输入之后, 调用主函数 (本质定义 用户输入)
;; 3. 严格按照(SVG-Card) 进行排版输出
;; 4. 输出完 SVG 后, 不再输出任何额外文本解释
;; ━━━━━━━━━━━━━━
总之,AI使用、提示编写,是一个需要实践方能出真知的事情,希望大家可以大开脑洞,多思考、多实验,找到最适合自己的形式。