什么是Prompt
提示词(Prompt)是我们用户与大模型对话的一段文本内容。它可以用于引导大模型生成期望的输出,或是引导大模型解决问题。它是我们与大模型对话的“语言”,是模型理解我们对他提出的需求的“工具”。简单来说,Prompt就是我们告诉大模型“应该做什么、不应该做什么、怎么做、结果应该是怎么样的”的一段人机交互的自然语言指令。
只要Prompt设计得合理,大模型就能够读懂你的意图,并且输出你想要的结果。
理解Prompt的重要性
对于同一个模型,使用合适的Prompt与不合适的Prompt结果可能相差甚远。这里基于QWen3-Max举个例子,就能够理解其中的差异。
Prompt1:
帮我写一个300字的体检报告
Prompt1的输出:
体检报告(摘要) 受检者:张某某,男,42岁 体检日期:2024年6月15日 本次体检项目包括内科、外科、血常规、肝肾功能、血脂、空腹血糖、甲状腺功能、心电图、腹部B超及胸部X光。整体评估:健康状况良好,无重大器质性病变。血压126/82 mmHg,属正常高值,建议关注日常盐摄入与规律运动;体重指数(BMI)23.8,处于正常范围。血常规、肝肾功能、甲状腺功能均在参考区间内;空腹血糖5.3 mmol/L(正常),总胆固醇4.9 mmol/L,甘油三酯1.4 mmol/L,血脂水平理想。心电图示窦性心律,大致正常;腹部B超提示肝胆胰脾肾未见明显异常;胸部X光未见活动性肺部病变。 温馨提示:虽当前指标良好,但鉴于年龄增长及职场压力,建议每半年监测血压、每年复查全套体检;保持均衡饮食、每周中等强度运动≥150分钟;戒烟限酒,保证7小时优质睡眠。已预约专科咨询(如有家族高血压史,可进一步行动态血压监测)。 报告医师:李医生 签发日期:2024年6月18日
Prompt2:
# 角色
你是一名专业的医疗数据分析师。
# 任务
请根据以下患者的体检数据(血压、血糖、心率等)和病史,分析健康状况、潜在风险,并提出生活或治疗建议。最后以专业报告格式输出。
# 患者信息
姓名:李明
性别:男
年龄:30岁
血压:110-150
身高:174cm
体重:100kg
症状:长期失眠,头痛,心慌
病史:长期吸烟酗酒史,有高血压
# 输出要求
1. 以“患者姓名+健康报告”为标题
2. 章节段落分明
3. 总输出控制在300字以内。
Prompt2输出:
**李明健康报告**
**一、健康评估** 血压150/110 mmHg(收缩压/舒张压),属3级高血压(高危);BMI=33.0 kg/m²,达肥胖标准。长期吸烟酗酒、失眠、头痛、心慌提示交感神经持续激活及靶器官潜在损害(如左心室肥厚、脑血管调节异常)。
**二、主要风险**
① 心血管事件(心梗、卒中)风险显著升高;② 代谢紊乱(隐匿性糖尿病/胰岛素抵抗可能性大);③ 睡眠障碍与高血压互为因果,加重自主神经失调。
**三、干预建议** ✅ 立即戒烟限酒,每日酒精摄入≤25g; ✅ 严格低盐(<5g/d)、低脂、高纤饮食,减重目标:3–6个月内减轻体重5–10%; ✅ 每日规律有氧运动(快走/游泳)≥30分钟; ✅ 尽快至心内科就诊,启动降压药物治疗(如ACEI/CCB类),并完善空腹血糖、血脂、心电图及睡眠监测; ✅ 认知行为疗法改善失眠,避免睡前使用电子设备。 (字数:298)
从这两个不同提示词的输出可以看出,在提供的信息不足时,大模型会编造一些假数据(幻觉),当数据充足时,大模型会分析的很专业也很具体。也就是说Prompt的设计质量直接决定了模型输出的质量。
提示词的设计原则和技巧
为模型指定一个明确的角色
指定一个合适的、明确的角色有助于让大模型理解到任务是属于哪一个领域的问题,方便其理解上下文以及输出符合该角色定位的回答。
例如在上面的Prompt2中指定的:
# 角色
你是一名专业的医疗数据分析师。
给出清晰且具体的任务
在设计具体的Prompt时,必须避免模糊、笼统的指令,要明确告诉大模型它需要做什么、如何做以及他的输出需要以什么风格。
例如:
## 模糊、笼统的任务指令(效果差)
写一篇不少于800字的文章。
## 具体且清晰的任务指令(效果会更加满足用户需求)
写一篇不少于800字的文章,主题是在AI日新月异发展的背景下程序员应如何正视AI所带来的影响,可以从对生活和工作等方面进行讨论,要求条例清晰、逻辑缜密。用于发表到公众号上。
现在我在QWen3-Max上分别使用这两个提示词,看看输出的效果。
可以看出通过清晰且具体的任务指令,大模型能明确任务目标、内容范围和输出要求,从而生成更贴合预期的输出。
使用结构化的提示词
像上面Prompt2所使用的就是结构化提示词,它是一种通过明确划分提示内容结构以强化语义层次来提升模型理解和输出质量的提示词设计方法。它通过清晰地定义角色、任务、输出要求等关键信息,并且通过分隔符(如Markdown标题,有序列表等),将复杂的指令拆解为模块化的指令输入。
这种方式能够比较显著提高模型对任务的理解,使得输出能够更加可控、稳定且更加符合预期结构。除了这几个优势之外,使用结构化的提示词也可以提高设计提示词时的准确性和可读性。
接下来我给出两种我常用的结构化提示词示例:
零样本提示词
这种提示词比较适合于简单任务,不需要给大模型额外的示例提示。
例如:
# 任务:
根据用户给出的位置信息,给出用户所在地的天气信息
但这种提示词具有可能会导致模型的输出格式不统一的缺点,如果需要模型输出一种具体的格式,就不适合使用这种提示词。
少样本提示词
这种提示词是在提示词中加入少量的示例,让模型通过这些示例模仿输出风格。一般来说给出2到3个示例就已经足够,示例不宜过多,因为示例越多,占用的上下文长度就越多。
这种方式的优点是:模型更容易理解任务边界,输出更加稳定,风格也更加一致。但缺点是:提示词会很明显的变长,占据大量的上下文长度(所以示例不用给太多)
指定输出格式
这在我们开发Agent工程中几乎是必须要使用的,指定输出格式其实是明确地告知大模型“我所需要的结果应该是什么样的格式,什么样的数据类型”,指定输出格式能够显著提升输出的结构化和一致性。
由于程序处理格式统一的和结构化的数据比较简单,且如果大模型在不限制输出格式的情况下往往会“自由发挥”,导致输出的数据不便于我们处理,所以向大模型指定输出格式往往是必要的。
举个例子,在开发用于生成PPT的Agent时,我们可能会用到以下的Prompt指定大模型输出的格式:
## 输出要求
输出详细的PPT大纲结构,包括每页的主题和要点。
使用清晰的结构化格式,每页内容以"--- Page X ---"开头,其中X是页码。
每页应包含:
1. 页面类型(COVER/CATALOG/CONTENT/COMPARE/END等,根据模板结构)
2. 页面标题
3. 主要内容要点(充分参考搜索信息,使内容更加丰富准确)
页面类型说明:
- COVER: 封面页,包含主标题、副标题、作者信息
- CATALOG: 目录页,列出主要章节
- CONTENT: 内容页,展示主要内容(可以重复使用,根据用户的页数需求来选择复制多份)
- COMPARE: 对比页,用于对比两个事物(可以重复使用,根据用户的页数需求来选择复制多份)
- END: 结束页,感谢或总结
示例格式:
--- Page 1 ---
type:COVER
title:演示文稿名称
subtitle:副标题或说明
author:作者姓名
--- Page 2 ---
type:CATALOG
title:目录
- 目录项1
- 目录项2
- 目录项3
通过这段Prompt,大模型的输出大致会为:
--- Page 1 ---
type:COVER
title:标题
subtitle:副标题或说明
author:xxx
使用不同类型的提示词
提示词一般分为三种:系统提示词,用户提示词和Assistant提示词。
其中:
- 系统提示词(System Prompt):系统提示词一般是由Agent应用开发者预先设定的一段提示词文本,它常被用于引导模型的整体行为、角色定位、输出风格、安全边界等。其特点是:与Agent交互的用户通常看不到该提示词或者不能直接修改该提示词,它是由Agent应用开发者直接在代码中指定的。
- 用户提示词(User Prompt):一般是用户在与AI交互时主动输入的问题、指令或请求。它的作用是:明确用户当前的具体需求;提供具体的上下文信息。特点是:该提示词是用户自由输入的,它决定单次交互的具体内容方向。
- Assistant提示词(Assistant Prompt):这种提示词是大模型输出的内容,一般在设计具有记忆功能的Agent时,就会把大模型输出的内容也作为提示词输入。特点是:该提示词无法被用户进行修改。
提示词的设计实际需要多次尝试
一个相同的提示词在不同的大模型中,可能具有不同的表现,在设计提示词的时候需要尝试和观察不同的提示词组合、结果和参数所带来的效果,但大致上来说在提示词的设计上也还是离不开上述所讲的这些内容。
而且,模型的输出质量也收到诸多因素的影响,有的模型天生就对指令的理解比较精确,有的则需要更多示例来辅助理解,特别是对于参数较少的模型来说,即使提示词写的再清晰,也会因为理解能力比较有限导致出现偏差或格式不一致的输出。
所以,对于提示词的设计,为了追求效果,我们可能会需要多次试验、调整和优化直到达到满意的效果。