前言
通常我们在使用大语言模型(LLM)时,都是通过输入指令的形式,让LLM完成指定的任务。
在用户指令输入后,LLM首先会将文本指令做分词处理(以BPE分词为例):
- LLM训练阶段:会将数据集中的文本拆分成一个个小的子词单元(即Token),然后通过统计每个词出现频率来构建词汇表。然后合并频率最高的词汇形成新的词汇,反复迭代后就形成词汇表。
- 用户输入阶段:LLM用训练阶段生成的词汇表对输入的指令进行分词,将文本转换为模型可识别的子词单元(即Token),然后把这些Token作为模型的输入
- 模型输出阶段:模型将每个Token转化为一个固定长度的向量,然后通过Transformer架构做上下文处理后,生成输出对应的文案。
因此数据集和分词的质量直接影响到模型对输入文本的理解和处理效果。如果数据集中没有对应的知识,或者说数据集的知识是错的,LLM生成的结果就容易不符合预期。
示例:
这是一个简单的Prompt:
1 | 让AI补充以下词汇,原()()动: |
AI一般的回答都是:原(封)(不)动、原(始)(冲)动
如果给他一个背景呢?
1 | 你是一名原神玩家,请补充以下词汇,原()()动: |
这时AI的回答就是:原(神)(启)动
什么是Prompt?
提示词(Prompt)一种是给大模型(LLM)的文本指令,引导大模型解决指定的问题或完成指定的任务。也就是说,大语言模型通过提示词+用户输入
的方式来理解用户需求并生成准确答案。因此
prompt 的好坏,直接决定了大模型生成结果是否符合预期。
举个例子,这是一个简单的Prompt:
1 | 请介绍大语言模型,字数控制在100个字符以内 |
AI就会基于这个提示词,通过特定的算法模型生成下面的内容:
1 | 大语言模型是基于海量文本训练的人工智能系统,能理解并生成自然语言文本,广泛应用于写作、翻译、问答等领域,为人们提供高效便捷的语言处理服务,推动人工智能发展。 |
Prompt设计的陷阱及优化
针对不同业务场景设计不同Prompt时,经常踩到各种各样的坑里,下面是对一些遇到的坑进行归纳总结:
AI产生幻觉
AI生成与事实不符的信息或凭空捏造不存在内容等胡编乱造的行为,称之为“AI幻觉”。
示例Prompt:
1 | 请告诉我中国第一位女性宇航员的名字。 |
AI乱答:
1 | 中国第一位女性宇航员是李娜,她在 2008 年乘坐神舟七号进入太空。 |
优化:要求AI说明信息来源
当 AI 被要求提供信息来源时,它会更加谨慎地筛选数据,因为需要对信息的出处负责。
优化后的Prompt:
1 | 请告诉我中国第一位女性宇航员的名字,并说明数据来源。 |
AI回答:
1 | 中国第一位女性宇航员是刘洋,她于2012年6月16日成功进入太空。这一信息来源于百度百科,该页面详细介绍了刘洋的生平、教育背景、工作经历以及她成为宇航员的过程 |
优化:使用限定词,引导AI仅在已知信息范围内作答
在Prompt加上这一句:
1 | 如果你不确定答案,请回答 “我不知道”,而不要编造信息。 |
这一策略能有效避免 AI 在知识盲区随意编造答案。让 AI 没有确切把握回答时回复 “我不知道”,而不是给出错误引导,保障用户获取信息的准确性。
优化:让AI以多种方式验证答案
在Prompt加上这一句:
1 | 请提供你刚才回答的三个独立信息来源,并进行交叉验证。 |
AI 可能会通过多个数据库、书籍以及他人观点等多个渠道验证信息来源,进而确保信息的准确性。
优化:使用反向Prompt让AI质疑自己的回答
在Prompt加上这一句:
1 | 你刚才的回答可能有错误。请重新检查,并说明你为何认为这个答案是正确的。 |
促使 AI 重新审视答案,避免因初始判断失误而给出错误信息。
信息可信度低
优化:按特定格式输出答案
为方便用户快速评估信息质量与可靠性,可以让AI采用结构化格式输出答案
例如:
1 | 请按照以下格式回答: |
当用户问题为“中国第一位女性宇航员是谁”时,AI输出如下:
1 | 问题:中国第一位女性宇航员是谁? |
优化:限制回答范围
如果问题涉及复杂领域,可以让AI只回答它有信心的内容。
例如,在Prompt加上这一句:
1 | 你只能基于 2023 年的数据回答问题,不要使用推测信息。 |
这种方式可以减少 AI 乱编数据的情况,确保信息的可信度。
AI自带偏见
AI可能会因为训练数据的刻板印象而带有偏见,例如:
- 性别偏见:“医生通常是男性,护士通常是女性。”
- 文化偏见:“成功的企业家通常来自发达国家。”
- 政治偏见
- 其他偏见:如数据计算、常识判断等,例如9.11比9.9大、3个月按半年算等经典问题
优化:要求使用中立语言
在Prompt加上这一句:
1 | 请提供多个不同角度的观点,并保持中立态度。 |
让AI使用中立语言客观分析,避免因倾向性语言导致片面结论。
优化:避免出现暗示性字眼
检查设计的Prompt中是否带有“…比…更好”、“…优于…”的字眼
优化:让AI自己检查偏见
在Prompt加上这一句:
1 | 你的回答是否可能包含性别、种族或文化偏见?请重新检查并调整。 |
让AI 通过自我检查修正潜在偏见,确保不出现误解或偏见性描述
优化:适当补充示例
在Prompt中补充对结果影响比较大的其他偏见示例,例如加上以下示例语句:
1 | 示例1、某AI统计工龄时,认为3个月=半年: |
回答前后矛盾
在多轮对话中,如果AI没有启用记忆功能,用户先问“畅享卡有哪些套餐”,再接着问“你确定吗?”。就可能会因为没有保持上下文一致性或者是在不同轮次调用了不同的数据集从而得到不同的回复。
优化:强制AI记住上下文
强制AI记住上下文,在Prompt加上这一句:
1 | 请确保后续回答与之前保持一致。 |
优化:让 AI 复述自己的回答
在Prompt加上这一句:
1 | 你能用不同的表述方式重复你的答案吗? |
优化:固定输出格式
在Prompt加上这一句:
1 | 你需要始终按照“事实+证据”的格式回答问题。 |
无法控制AI生成的内容长度
优化:回答过于简略,需要限制最少字数
Prompt里限制最少字数及其要点
1 | 你的回答必须至少包含 50 个字,并提供具体理由。 |
优化:避免回答过于冗长,需要限制最多字数
Prompt里限制最多字数及其要点
1 | 你的回答不能超过3句话,并且要直截了当 |
Prompt结构化模板
尽管 AI 具备强大的语言理解能力,但其输出质量仍然受到 Prompt 设计的影响。如果 Prompt 过于模糊或不够具体,AI 可能会给出偏差较大的答案。因此,优化 Prompt 是提升 AI 交互体验的关键。
常用的 Prompt 文字模板
关键点
常用的Prompt模板通常包含以下几个关键点:
- 背景信息:提供相关背景信息,让AI可以更准确地理解问题含义
- 任务说明:明确清晰地告诉AI需要完成什么任务
- 约束条件:限制AI的输出,包括且不限于格式、字数、风格等
- 示例参考:通过具体示例引导AI产生符合预期的输出,例子数量不能太多,控制在1-2个即可
示例
举个例子,这是一个普通的Prompt:
1 | 你是一位健身教练,介绍一款热门的健身APP。 |
根据上面的Prompt,AI生成以下结果:
1 | 这款健身APP非常受欢迎,它提供了多种健身课程,包括瑜伽、力量训练和有氧运动。用户可以根据自己的目标选择合适的课程,比如减脂、增肌或提高柔韧性。APP还支持自定义训练计划,用户可以设置自己的健身目标和时间,APP会生成个性化的训练方案。此外,它还有社区功能,用户可以分享自己的健身成果,互相激励。总的来说,这款APP功能强大,界面友好,适合各种水平的健身爱好者。 |
但如果我用了Prompt模板后再去实现同一功能呢?下面是套用模板后的Prompt:
1 | 背景信息&&约束条件:你是一位健身教练,需要为你的客户介绍一款热门的健身APP。请根据提供的APP名称和功能描述,撰写一段详细的介绍文本。确保介绍内容包括APP的主要功能、特色、适用人群以及使用建议。这款健身APP必须是一个真实存在的应用,应用的介绍内容需是真实有效的,不得自行编造。 |
根据这个的Prompt,AI生成以下结果:
常用的 Prompt XML模板(在dify中使用最佳)
在编写Prompt时,使用 XML 标签可以保证Prompt的清晰度、准确性、灵活性及可解析性。其不仅能帮助更好地组织和结构化信息,还能提高 AI 模型的理解能力和响应质量。
常用XML标签
<instruction>
用途:提供给AI的具体指令,明确模型需要执行的任务。
示例:
1 | <instructions> |
<context>
- 用途:提供任务的背景信息或上下文,帮助 AI 更好地理解指令。
- 示例:
1 | <context> |
<examples>
- 用途:提供示例来指导 AI 的响应风格和格式。多个示例可以帮助模型更好地理解指令意图。
- 示例:
1 | <examples> |
<user_input>
- 用途:包含用户输入的内容,通常用作提示的动态部分。
- 示例:
1 | <user_input> |
<output>
- 用途:指定 AI 应该生成的输出格式或样式,确保输出内容与预期一致。
- 示例:
1 | <output> |
标签顺序
标签的位置和先后顺序能够显著提升AI模型对提示的解析效果,进而提高其响应质量。
推荐的标签顺序如下:
<instructions>
: 描述AI应遵循的具体指令。<context>
: 提供任务背景信息,便于AI理解上下文。<examples>
: 通过示例引导AI如何准确生成响应。<user_input>
: 包含用户的输入内容。<output>
: 定义AI应该输出的格式或样式。
注意事项
- 标签名称的一致性:XML
标签区分大小写,因此请确保标签字母大小写的一致性,如
<Tag>
与<tag>
是不同的元素。 - 格式正确性:确保 XML 文档格式正确,所有标签都必须闭合,且标签间的嵌套关系需符合 XML 规范。
- 安全性考虑:当提示中包含用户输入时,建议对用户输入进行转义处理,以防止潜在的安全问题,例如代码注入或无效的标签解析。
示例
将常用的Prompt文字模板例子中的Prompt使用xml模板将改写成以下格式:
1 | ``xml |
根据这个的Prompt,AI生成以下结果:
编写Prompt工具推荐
使用dify自带的提示词优化器:输入具体的需求可以一键生成xml格式的prompt
让AI帮忙优化:使用kimi、豆包、腾讯元宝、通义千问等AI工具,输入
请参照常用的prompt模板,帮我优化以下prompt:具体的需求
就能生成较为规范的prompt提示词优化器:提示词优化器 输入自己写好的prompt后,使用优化器进行优化(需要配模型api)
高阶Prompt设计技巧
示例驱动Prompt
示例驱动Prompt通过提供示例,引导AI按照特定风格或格式输出结果。
示例1,生成一个关于冒险的故事:
1 | 请生成一个关于冒险的故事。 |
那么AI会参照示例里的格式输出:
1 | 在璃月的清泉镇,旅行者得知了“归乡之玉”的传说。这块玉器据说能指引失散的亲人重逢。旅行者与钟离一同前往玉京台遗迹,在途中遭遇了愚人众执行官的阻挠,还解开了岩元素机关唤醒了守护灵猴。最终,他们找到了归乡之玉,却发现它与旅行者失散的亲人有着神秘的联系…… |
示例2,编写一个计算角色伤害的函数:
1 | 请编写一个计算角色伤害的函数。 |
那么AI会参照示例里的格式输出:
1 | def calculate_damage(atk, defense, elemental_reaction=None): |
该技巧的适用场景如下:
- 根据指定格式生成文案
- 故事创作:提供角色、地点和任务框架
- 信息提取:明确输入输出格式
- 代码实现:通过示例设定逻辑规则
链式思维Prompt
链式思维Prompt是指,通过逐步引导模型进行推理和探索,将复杂任务分解为多个步骤,逐步完善输出,特别适合需要逻辑推理和逐步深入的场景。
一般Prompt可能会让AI直接给出答案,而链式思维Prompt会要求AI详细推理出答案的过程。就像是qwen模型和deepseek模型回答问题的区别。
例如,在计算数学问题时,可以要求AI按步骤计算,而不是直接给出答案。
示例1,一般Prompt计算25*48:
1 | 计算25*48的结果* |
AI会直接回答:1200
使用链式思维Prompt:
1 | 计算25*48的结果,请逐步拆解计算过程,并给出最终答案 |
AI会则会回答:
1 | 25 × 48 = 25 × (50 - 2) |
示例2,生成一个关于冒险的故事:
单轮的Prompt:
1 | 请为我规划一次提瓦特大陆的旅行,包括主要景点和活动。 |
使用链式思维Prompt:
1 | 确定主题: |
该技巧的适用场景如下:
- 数学计算
- 复杂逻辑推理
- 代码调试与优化
- 业务决策分析
- 逐步推理与验证
反向Prompt
反向Prompt就是通过提供错误或不理想的示例,引导模型避免这些错误并输出更符合预期结果。
示例1,让AI生成一个关于冒险的故事 :
1 | 请生成一个关于《原神》的冒险故事,确保包含具体角色、地点和冲突。 |
示例2,让AI生成计算角色伤害的函数:
1 | 请编写一个计算《原神》角色伤害的函数,确保包含元素反应的加成逻辑。 |
该技巧的适用场景如下:
- 修正模糊输出
- 修正不完整信息
- 修正逻辑错误
多轮交互Prompt
多轮交互Prompt是指,通过多轮对话逐步引导模型输出更精准的内容,适合需要逐步细化的场景。在某些情况下,一次性提供完整的Prompt不一定能得到最佳答案,这时候就需要通过多轮的交互来优化AI的响应。
示例1,一般Prompt:
1 | 请写一篇关于人工智能的文章。 |
AI会直接给出一篇关于人工智能的文章。
使用多轮交互Prompt:
1 | 用户:我想写一篇关于人工智能的文章,你能帮我吗? |
示例2,我想要让AI为我规划一次提瓦特大陆的旅行:
1 | 用户:请为我规划一次提瓦特大陆的旅行。 |
该技巧的适用场景如下:
- 产品设计
- 内容创作
- 心理咨询
层级Prompt
层级Prompt是指通过分层结构逐步引导模型输出,适合需要分步骤完成的复杂任务。在处理复杂问题时,将问题分解成多个子问题,让AI逐步回答。
示例1,我想要让AI为我规划一次提瓦特大陆的旅行。应用层级Prompt的用例如下:
1 | 顶层Prompt(第一次提问): |
AI最终生成的回答如下:
1 | 旅行主题:冒险探索 |
示例2,我想要让AI生成一个关于 2024 年全球新能源市场趋势的分析报告。应用层级Prompt的用例如下:
1 | 顶层Prompt(第一次提问): |
AI让将这个复杂的问题拆分成4个小的问题,逐步分析解答,最后再汇总。
该技巧的适用场景如下:
- 报告撰写
- 系统设计
- 商业分析
- 语料生成
总结
- 链式思维Prompt:逐步推理和探索,适合复杂任务分解。
- 示例驱动Prompt:通过示例引导风格和格式,适合个性化输出。
- 反向Prompt:通过错误示例避免常见问题,适合修正错误。
- 多轮交互Prompt:通过多轮对话逐步细化输出,适合逐步细化的任务。
- 层级Prompt:通过分层结构逐步引导输出,适合复杂任务分解。