Appearance
14.3 prompt
14.3.1 什么是 prompt
大模型 prompt 指在大语言模型应用中,用于 “提示” 模型唤起特定能力以解决实际问题的提问方式
prompt 就像钥匙,引导模型从预训练积累的海量信息中,精准唤起如理解复杂文本、总结信息、生成内容、逻辑推理等能力,满足用户实际需求
14.3.2 prompt 的基本框架
prompt 包含的要素:
- 指令:明确告诉模型需要完成的任务或目标
- 上下文:提供必要的背景信息或示例,以帮助模型理解任务
- 输入数据:用户提供的具体数据或问题,模型将基于这些信息进行处理和生成输出
- 输出指示:模型生成的结果,通常是对输入的回答或处理结果
prompt 五大框架
1. RTF框架
RTF(Role-Task-Format)框架是一个非常简单通用的Prompt提示框架,我们和任意大模型对话场景下都可以使用该规范进行改进输出
- R-Role:角色,指的是你希望模型扮演的角色色(程序员、数据分析师、讲解员、记者等等)
- T-Task:任务,指的是你希望模型完成的具体任务
- F-Format:格式,指的是你希望模型输出的结果格式(比如:表格、Markdown、英文等等)
- 主要优点:
- 简单、方便
- 指定Role角色,可以让大模型在当前的角色范围内回答知识,这在一些特定的领域中非常有效
- 指定Role角色也能让工程上检索知识能够确定边界范围,配合元数据所发挥的威力会更强
- 如果结合RAG知识内容检索,那么上下文回答的内容会让用户感觉更加是顺畅
2. 思考链模式
通过这种模式来逐步改善大模型的推理能力,非常适合一些复杂的任务处理。例如:
- 分析型或者逻辑推理型的任务
- 决策
- 解决问题(比如程序员根据错误日志找Bug)
而要使用这种模式,只需要在末尾添加”让我们逐步思考”即可。例如:
python
# 数据源(与指令区分)
user_datasource = """XXX……"""
prompt1 = """分析一下在人工客服服务场景下,'''{user_datasource}'''中客户有哪些诉求。用一句话概括。"""
prompt2 = """分析一下在人工客服服务场景下,'''{user_datasource}'''中客户有哪些诉求。用一句话概括。让我们逐步思考。"""
# 模型输出结果
output1:在人工客服服务场景下,客户主要诉求为:微信账号存在安全风险导致无法添加好友、单点拦截、下载安装微信出现问题等,寻求客服协助解决问题。
output2:在人工客服服务场景下,客户主要诉求为:微信账号存在安全风险导致无法添加好友,以及因违规行为被限制登录,客户希望客服能够尽快处理这些问题。
# 分析结果
output1中的”单点拦截”并不是用户的诉求,而output2显然更加正确3. RISEN框架
- R-Role:大模型扮演的角色
- I-Instructions:指示命令,和Task-任务差不多
- S-Steps:步骤
- E-End Goal:最终目标
- N-Narrowing(Constraints):缩小范围(约束条件),和RTF框架中的Format有异曲同工之妙,一个是格式的约束,而这里的约束可以是任意方面,比如回答的内容(特定领域)、字数限制等等方面
该框架主要适合:
- 撰写具有特定约束的任务(例如博客文章)
- 有明确指导方针的任务(例如商业计划)
4. RODES框架
- R - Role:角色
- O - Objective:目标
- D - Details:详细的细节
- E - Examples:示例
- S - Sense Check:感官检查
5. 密度链模式
密度链模式Prompt是Salesforce、麻省理工学院和哥伦比亚大学的研究人员推出的一种新提示,它非常的高效,使用递归来创建越来越好的输出的提示,与普通提示生成的 GPT-4 摘要相比,它生成的摘要更加密集且更适合人们理解。
适合:
- 总结
- 改进您最喜欢的提示
- 通过递归生成可用的长格式内容
14.3.3 打造高效 prompt 的两大核心原则
原则一:编写明确和具体的指令
为了让模型精准理解我们的意图,编写清晰、明确且具体的指令至关重要。这不仅能避免模型产生误解,还能显著提升输出结果的相关性和准确性。
- 使用分隔符清晰界定输入部分 在构建prompt时,使用分隔符将特定文本部分与提示的其他部分清晰隔开,能有效避免提示词冲突。任何能让模型识别出单独部分的符号都可作为分隔符,常见的包括:
- 章节标题:通过不同层级的标题区分不同内容模块
- 三重双引号:
"""在代码编写中常用于包裹较长的文本字符串 - 三重单引号:
'''功能与三重双引号类似,适用于不同的语法环境 - 三重破折号:
---在文本中起到明显的分隔作用 - 角括号:
<>常被用于标记特定元素 - XML标签:利用结构化的标签形式区分不同内容
python
# 示例1:假设我们需要对一段产品描述进行总结,可通过如下方式使用分隔符:
product_description = f"""这是一款全新的智能手表,具备心率监测、睡眠追踪等健康功能,还支持多种运动模式记录,拥有高清显示屏和长达7天的续航能力。"""
prompt = f"""请总结以下产品描述:'''{product_description}'''"""
# 示例2:如果要让模型对一段用户评论进行情感分析,示例如下:
user_comment = f"""这款手机的拍照效果真的太棒了,色彩还原度高,夜景模式也很出色,唯一不足的是电池续航有点短。"""
prompt = f"""分析以下用户评论的情感倾向:''' {user_comment}''' """这种方式能够确保模型明确区分指令和待处理文本,避免因指令混淆而产生错误输出
- 要求结构化输出 为了便于后续对模型输出进行解析和处理,我们可以要求模型以特定的结构化格式输出,如HTML或JSON。这种方式能极大提高数据处理的效率,尤其是在Python编程环境中,结构化输出可直接读入字典或列表中,方便进一步的分析与操作。
python
# 示例 1:要求模型以 JSON 格式输出
prompt = "请以json格式列出每个nodeType所体现的用户诉求、客服方案。每一个json-value不超过20个字"
# 数据源(与指令区分)
user_datasource = """XXX……"""
# 模型输出
{
"IVR": {
"用户诉求": "微信使用问题求助",
"客服方案": "引导正常使用或自助处理"
},
"ASYNC": {
"用户诉求": "账号封禁等相关申诉",
"客服方案": "按规则处理或引导自助"
},
"AI": {
"用户诉求": "支付相关问题咨询",
"客服方案": "要求用户详细描述问题"
}
}
# 示例2:以HTML格式输出一个简单的书籍
prompt = "请以HTML格式列出三本你推荐的科幻小说及其作者。"
# 模型输出
<ul>
<li>《三体》 - 刘慈欣</li>
<li>《基地》 - 艾萨克·阿西莫夫</li>
<li>《银河帝国:机器人五部曲》 - 艾萨克·阿西莫夫</li>
</ul>- 要求模型检查条件是否满足
在面对复杂任务时,如果在一些假设条件,而这些条件并非总是成立,那么我们需要引导模型首先对这些假设进行检查。若条件不满足,模型应明确指示并停止继续执行任务,以避免无效计算和错误结果
python
# 示例:假设我们要求模型计算一个数学表达式,但前提是表达式所有都为正数。
expression = "5 + 3 - (-2)"
prompt = f"""首先检查表达式 '{expression}' 中的所有数字是否都为正数。如果是,请计算该表达式的值;如果不是,请输出'表达式中存在非正数,无法计算'。"""
# 模型输出
表达式中存在非正数,无法计算- Few-shot prompting(少样本提示) 在要求模型执,提供成功完成任务的示例,能够帮助模型更好地理解任务要求和期望输出的格式
python
# 示例:要求模型按照特定格式将中文词汇翻译成英文并造句。
prompt = """
示例1:
中文词汇:苹果
翻译:apple
造句:I like to eat apples.
示例2:
中文词汇:学校
翻译:school
造句:I go to school every day.
中文词汇:图书馆
翻译:
造句:
"""
# 模型输出
翻译:library
造句:I often read books in the library.原则二:予模型充足的思考时间
- 明确完成任务所需的步骤
python
# 示例:要求模型分析一首古诗,格式为“诗歌主题 - 主要意象 - 表达情感”
poem = "床前明月光,疑是地上霜。举头望明月,低头思故乡。"
prompt = f"""请按照“诗歌主题 - 主要意象 - 表达情感”的格式分析这首诗:{poem}"""
# 模型输出
思乡之情 - 明月 - 对故乡的深切思念- 引导模型在得出结论前充分思考方案
python
# 示例:问模型“如何提高公司的员工满意度”
prompt = "在回答如何提高公司的员工满意度之前,请先思考至少三个方面的因素,然后综合这些因素给出全面的建议。"
# 模型输出
首先,从薪酬福利方面,可适当提高薪资水平、完善福利体系,如增加带薪休假天数等;其次,从职业发展角度,为员工提供更多培训机会和晋升通道;再者,从工作环境来看,营造舒适、和谐的办公氛围,加强团队建设活动。综合这些方面,提高公司员工满意度可以从优化薪酬福利、提供职业发展机会以及改善工作环境等措施入手。原则三:模型的局限性与应对策略
模型“幻觉”
即使模型在训练过程中接触了海量知识,但它并不能完美记住所有信息,也难以精准把握自身知识的边界。这就导致在面对晦涩主题的问题时,模型可能会编造出看似合理但实际上错误的内容,这就是所谓的“幻觉” 解决幻觉的一种策略
为了有效应对幻觉问题,我们可以要求模型在回答问题前,首先从给定文本中寻找相关引用,并依据这些引用来构建答这种方式,模型的回答将基于可靠的信息来源,而非凭空臆测,从而大大提高回答的准确性和可信度。同时,这种方法还能够实现答案的可追溯性,便于对模型输出进行验证和审查
python
# 示例:给定一段关于历史事件的文本,要求模型回答相关问题。
text = """1861年,美国爆发了南北战争,这场战争是美国历史上的重要转折点,它主要围绕奴隶制的存废问题展开,北方主张废除奴隶制,南方则坚持保留。最终北方取得了胜利,为美国的工业化发展铺平了道路。"""
prompt = f"""请从上述文本中找出相关信息,回答南北战争主要围绕什么问题展开?"""
# 模型输出
南北战争主要围绕奴隶制的存废问题展开,北方主张废除奴隶制,南方则坚持保留。14.3.4 不同需求类型的prompt设计
| 需求类型 | 特点 | 需求表达公式 | 推理模型适配策略 | 通用模型适配策略 |
|---|---|---|---|---|
| 决策需求 | 需权衡选项、评估风险、选择最优解 | 目标 + 选项 + 评估标准 | 要求逻辑推演和量化分析 | 直接建议,依赖模型经验归纳 |
| 分析需求 | 需深度理解数据/信息、发现模式或因果关系 | 问题 + 数据/信息 + 分析方法 | 触发因果链推导与假设验证 | 表层总结或分类 |
| 创造性需求 | 需生成新颖内容(文本/设计/方案) | 主题 + 风格/约束 + 创新方向 | 结合逻辑框架生成结构化创意 | 自由发散,依赖示例引导 |
| 验证需求 | 需检查逻辑自洽性、数据可靠性或方案可行性 | 结论/方案 + 验证方法 +风险点 | 自主设计验证路径并排查矛盾 | 简单确认,缺乏深度推演 |
| 执行需求 | 需完成具体操作(代码/计算/流程) | 任务 + 步骤约束 + 输出格式 | 自主优化步骤,兼顾效率与正确性 | 严格按指令执行,无自主优化 |
14.3.5 提示语设计案例
复杂任务的设计案例
语用意图分析(PIA):解码内容生成目的
PIA建立在语用学和言语行为理论的基础上,通过分析任务的语用意图,为AI设定明确的任务目标,并提出了以下分类:陈述型(Assertive)、指令型(Directive)、承诺型(Commissive)、表达型(Expressive)、宣告型(Declarative)
- PIA实施步骤:
- 识别主要语用意图:确定任务的首要目的
- 分析次要语用意图:识别可能的辅助目的
- 评估语用意图的强度:量化每种意图的强度
- 构建语用意图矩阵:创建语用意图及其强度的矩阵
- 示例: 假设需要撰写一篇关于“气候变化”的文章,目的是“增强公众意识并促进行动”:
plaintext
任务目标:创作一篇关于气候变化的文章,旨在提高公众意识并促进行动。
主要语用意图:
(1)陈述型(强度8):提供可靠的气候变化数据和科学发现。
(2)指令型(强度7):鼓励读者采取具体的环保行动。
(3)表达型(强度6):传达对气候变化威胁的紧迫感。
请确保文章:
包含来自权威来源的最新气候数据
解释气候变化的原因和影响
提供至少5个读者可以立即采取的行动建议
使用引人入胜的语言来激发读者的环保意识。主题聚焦机制(TFM):锁定核心内容
TFM借鉴了认知语言学中的“原型理论”和“框架语义学”,可开发以下技巧:
主题原型构建:确定主题的核心特征和典型例子语义框架设置:创建与主题相关的概念网络重点梯度建立:设定主题相关性的层级结构
- TFM实施步骤:
- 定义主题原型:列出主题的关键特征和代表性例子
- 构建语义框架:创建与主题相关的概念图
- 设置重点梯度:按重要性排序相关概念和子主题
- 创建主题引导符:设计特定的关键词或短语来保持主题聚焦
细节增强策略(DES):深化内容质量
DES整合了认知叙事学和信息处理理论,开发了以下策略: 多模态描述、微观—宏观连接、对比强化、时空定位、数据可视化