前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >从菜鸟到大神,Prompt设计的核心秘诀全在这里!

从菜鸟到大神,Prompt设计的核心秘诀全在这里!

作者头像
福大大架构师每日一题
发布2025-04-02 11:09:09
发布2025-04-02 11:09:09
10300
代码可运行
举报
运行总次数:0
代码可运行

在数字化浪潮的推动下,人工智能大模型凭借其卓越的自然语言处理能力和智能交互特性,正迅速渗透到各行各业。与传统的客服方式相比,AI大模型展现出了显著的优势。通过精心设计的提示语(prompt),我们可以在客服外包、智能客服等多个项目和业务场景中发挥重要作用,显著提高工作效率并优化成果质量。

为了提升个人能力并促进产研学习氛围的建设,我在学习完吴恩达教授以及其他专家关于提示语的相关课程后,整理了一份学习资料,供大家进行交流和学习。这份笔记将深入分析提示语的定义及其撰写框架,详细介绍高效提示语的构建原则和策略。同时,从技术原理角度解读提示语的相关内容,帮助读者更好地运用大模型,从而提升业务的整体价值。

第一节:Prompt的定义及基本框架

一、什么是Prompt

在大语言模型的应用中,prompt指的是一种用于引导模型激活特定功能以解决实际问题的提问方式。最初,这种方法被称为“输入形式”或“输入模板”,但后来“prompt”(提示)这一术语逐渐获得认可,因为它更贴切地反映了在大语言模型语境下的关键作用。

大模型的核心能力大多数在预训练阶段已形成,而prompt就像钥匙一样,帮助模型从海量的预训练信息中精准提取出理解复杂文本、总结信息、生成内容和逻辑推理等能力,以满足用户的实际需求。它并不是将模型视为一个简单的知识库,而是有效地调用其智能,达到类似人类解决复杂问题的效果。了解和掌握prompt工程对充分利用大语言模型的潜力具有重要意义。

二、撰写Prompt的基本框架

1. Prompt的基本要素
  • 指令:用户希望模型执行的具体任务或指令。
  • 上下文:提供额外的信息或背景,以帮助语言模型更准确地响应。
  • 输入数据:用户提供的内容或问题。
  • 输出指示:明确所期望的输出类型或格式。
2. Prompt的五大框架
2.1 RTF框架

RTF(Role-Task-Format)框架是一个简洁且通用的提示语结构,适用于各种与大模型的对话场景。

  • R-Roles(角色):指定模型所扮演的角色(如程序员、数据分析师、讲解员、记者等)。
  • T-Tasks(任务):明确告知模型需要完成的任务。
  • F-Format(格式):指定返回结果的格式(如表格、Markdown、英文文本等)。

主要优点

  • • 简单易用。
  • • 指定角色能够限制模型的回答范围,对特定领域的知识需求作用显著。
  • • 指定角色还可以帮助在工程中更有效地检索相关知识,结合元数据可以获取更精确的结果。
  • • 结合RAG(Retrieval-Augmented Generation)知识内容检索时,可以使回答更加流畅自然。
2.2 思考链模式

思考链模式用于提升大模型的推理能力,特别适合处理复杂的任务,如:

  • • 分析性或逻辑推理任务
  • • 决策过程
  • • 问题解决(例如,程序员根据错误日志进行调试)

要使用此模式,只需在提示的末尾添加“让我们逐步思考”。这样可以引导模型进行系统性思考,从而得到更优质的答案。

代码语言:javascript
代码运行次数:0
运行
复制
# 数据源(与指令区分)
user_datasource = """XXX……""" 

prompt1 = """分析一下在人工客服服务场景下,'''{user_datasource}'''中客户有哪些诉求。用一句话概括。"""
prompt2 = """分析一下在人工客服服务场景下,'''{user_datasource}'''中客户有哪些诉求。用一句话概括。让我们逐步思考。"""

# 模型输出结果
output1:在人工客服服务场景下,客户主要诉求为:微信账号存在安全风险导致无法添加好友、单点拦截、下载安装微信出现问题等,寻求客服协助解决问题。
output2:在人工客服服务场景下,客户主要诉求为:微信账号存在安全风险导致无法添加好友,以及因违规行为被限制登录,客户希望客服能够尽快处理这些问题。

# 分析结果
output1中的”单点拦截”并不是用户的诉求,而output2显然更加正确
2.3 RISEN框架
  • R-Roles(角色):指定大模型所扮演的角色。
  • I-Instructions(指示命令):类似于任务的指示,明确告知模型需要执行的操作。
  • S-Steps(步骤):执行任务的具体步骤。
  • E-End Goal(最终目标):明确希望达成的最终结果。
  • N-Narrowing(约束条件):设定范围限制,这可以涉及回答内容的特定领域、字数限制等,与RTF框架中的格式约束有所不同。

该框架主要适用于:

  • • 撰写具有特定限制的任务,例如博客文章。
  • • 具有明确指导方针的任务,比如商业计划书的撰写。
2.4 RODES框架
  • R-Roles(角色):定义模型的角色。
  • O-Objective(目标):明确任务的目标。
  • D-Details(详细信息):提供任务所需的具体细节。
  • E-Examples(示例):列举相关实例以提供参考。
  • S-Sense Check(感官检查):确保输出符合预期,进行有效性检查。
2.5 密度链模式

密度链模式是一种由Salesforce、麻省理工学院和哥伦比亚大学研究人员提出的新型提示方式。它通过递归的方法生成更有效的输出,生成的摘要相比普通提示产生的内容更加紧凑且易于理解。

适用场景:

  • • 内容总结
  • • 改进已有提示
  • • 使用递归生成长格式内容

第二节:打造高效Prompt的两大核心原则

在Prompt工程领域,掌握高效的撰写策略是充分发挥语言模型潜力的关键。本节将重点介绍构建有效prompt的两大核心原则,教您如何通过优化指令,使得模型生成更符合需求和质量更高的输出。

一、原则一:编写明确且具体的指令

为了让模型准确理解我们的意图,撰写清晰、具体的指令至关重要。这不仅能够减少误解的风险,还能大幅提升输出结果的相关性和准确性。

策略1:使用分隔符清楚区分输入部分

在构建prompt时,使用分隔符将特定文本部分与提示的其他内容明确分开,可以有效防止提示词之间发生冲突。任何能够让模型识别独立部分的符号都可以作为分隔符,常见的包括:

  • 章节标题:通过不同层次的标题来区分内容模块。
  • 三重双引号("""):在编程中常用于包围较长的文本串。
  • 三重单引号('''):与三重双引号功能相似,适用于不同的语法环境。
  • 三重破折号(---):在文本中提供明显的分隔效果。
  • 角括号(<>):常用于标记特定元素。
  • XML标签:利用结构化标签区分不同内容。

示例1:如果我们希望总结一段产品描述,可以采用如下方式进行分隔:

代码语言:javascript
代码运行次数:0
运行
复制
product_description = f"""这是一款全新的智能手表,具备心率监测、睡眠追踪等健康功能,还支持多种运动模式记录,拥有高清显示屏和长达7天的续航能力。"""
prompt =  f"""请总结以下产品描述:'''{product_description}'''"""

示例2:如果需要让模型对一段用户评论进行情感分析,示例如下:

代码语言:javascript
代码运行次数:0
运行
复制
user_comment = f"""这款手机的拍照效果真的太棒了,色彩还原度高,夜景模式也很出色,唯一不足的是电池续航有点短。"""
prompt = f"""分析以下用户评论的情感倾向:''' {user_comment}''' """

这种方法可以确保模型清晰地分辨指令和待分析文本,避免因指令混淆而导致的错误输出。

策略2:请求结构化结果

为了便于后续解析和处理模型输出,我们可以要求模型采用特定的结构化格式,比如HTML或JSON。这样可以显著提高数据处理效率,特别是在Python编程环境中,结构化的输出可直接导入字典或列表中,便于后续分析和操作。

示例 1:请要求模型以JSON格式给出输出。

代码语言:javascript
代码运行次数:0
运行
复制
prompt = "请以json格式列出每个nodeType所体现的用户诉求、客服方案。每一个json-value不超过20个字"

# 数据源(与指令区分)
user_datasource = """XXX……"""

# 模型输出
{
"IVR": {
"用户诉求": "微信使用问题求助",
"客服方案": "引导正常使用或自助处理"
},
"ASYNC": {
"用户诉求": "账号封禁等相关申诉",
"客服方案": "按规则处理或引导自助"
},
"AI": {
"用户诉求": "支付相关问题咨询",
"客服方案": "要求用户详细描述问题"
}
}

示例2:请以HTML格式提供一本书籍的简单信息。

代码语言:javascript
代码运行次数:0
运行
复制
prompt = "请以HTML格式列出三本你推荐的科幻小说及其作者。"
# 模型输出
<ul>
    <li>《三体》 - 刘慈欣</li>
    <li>《基地》 - 艾萨克·阿西莫夫</li>
    <li>《银河帝国:机器人五部曲》 - 艾萨克·阿西莫夫</li>
</ul>

策略3:引导模型检查条件是否成立

在处理复杂任务时,如果依赖于某些假设条件,而这些条件并不总是有效,那么需要指导模型首先验证这些假设。如条件不满足,模型应清晰说明并终止任务执行,以避免无意义的计算和错误结果。同时,考虑可能的边缘情况并制定相应的处理规则,可以有效降低意外错误的发生,确保模型输出的稳定性和可靠性。

示例:假设我们要求模型进行一个数学表达式的计算,但前提是所有的表达式都必须为正数。

代码语言:javascript
代码运行次数:0
运行
复制
expression = "5 + 3 - (-2)"
prompt = f"""首先检查表达式 '{expression}' 中的所有数字是否都为正数。如果是,请计算该表达式的值;如果不是,请输出'表达式中存在非正数,无法计算'。"""
# 模型输出
表达式中存在非正数,无法计算

策略4:少样本提示

在让模型执行任务时,提供成功完成该任务的示例可以帮助模型更好地理解要求和期望的输出格式。通过这些示例,模型能够掌握任务的模式和规律,从而在处理实际输入时生成更符合预期的结果。少样本提示特别适用于处理复杂任务或具有特定格式要求的情境,能够显著提升模型的表现。

示例:请要求模型将中文词汇翻译成英文,并使用特定格式造句。

代码语言:javascript
代码运行次数:0
运行
复制
prompt = """
示例1:
中文词汇:苹果
翻译:apple
造句:I like to eat apples.

示例2:
中文词汇:学校
翻译:school
造句:I go to school every day.

中文词汇:图书馆
翻译:
造句:
"""
# 模型输出
翻译:library
造句:I often read books in the library.

二、原则二:给予模型足够的思考时间

当模型因急于得出结果而发生推理错误时,可以通过优化策略为其提供更加清晰的推理路径,促使模型进行更深入和全面的思考。

策略1:清晰指明完成任务所需的步骤

详细列出模型完成任务时需要遵循的各个步骤,有助于模型进行系统的推理和计算。这样一来,模型能够更好地理解任务的逻辑结构,避免因为思路混乱而导致的错误。例如,要求模型按照特定格式输出信息,可以有效引导其在处理过程中关注信息的组织和表达方式。

示例:请要求模型分析一首古诗,输出格式为“诗歌主题 - 主要意象 - 表达情感”。

代码语言:javascript
代码运行次数:0
运行
复制
poem = "床前明月光,疑是地上霜。举头望明月,低头思故乡。"
prompt = f"""请按照“诗歌主题 - 主要意象 - 表达情感”的格式分析这首诗:{poem}"""
# 模型输出
思乡之情 - 明月 - 对故乡的深切思念

策略2:引导模型在得出结论前进行充分思考

明确要求模型在形成最终结论之前,先进行深入的推理和分析,这通常能得到更好的结果。这种方法能够促使模型更全面地理解问题的本质,综合考虑多个因素,从而减少因片面或急于下结论而产生的错误。

示例:询问模型“怎样提升公司员工的满意度”。

代码语言:javascript
代码运行次数:0
运行
复制
prompt = "在回答如何提高公司的员工满意度之前,请先思考至少三个方面的因素,然后综合这些因素给出全面的建议。"
# 模型输出
首先,从薪酬福利方面,可适当提高薪资水平、完善福利体系,如增加带薪休假天数等;其次,从职业发展角度,为员工提供更多培训机会和晋升通道;再者,从工作环境来看,营造舒适、和谐的办公氛围,加强团队建设活动。综合这些方面,提高公司员工满意度可以从优化薪酬福利、提供职业发展机会以及改善工作环境等措施入手。

三、模型的局限性与应对策略

尽管语言模型在经过大量数据训练后展示出强大的能力,但它们并非没有缺陷。其中,“幻觉”现象是模型面临的一大挑战。

模型“幻觉”

即使模型在训练过程中接触了丰富的知识,它也无法完美记住所有信息,且难以准确识别自身的知识边界。这导致在处理较为复杂或冷僻主题时,模型可能生成看似合理但实际上错误的内容,这种现象被称为“幻觉”。

解决幻觉的策略

为有效应对幻觉问题,我们可以要求模型在回答问题之前,先从提供的文本中提取相关引用,并基于这些引用来构建答案。这种方式使得模型的回复将基于可靠的信息来源,而非主观判断,从而显著提升回答的准确性和可信度。同时,这样的方法也增强了答案的可追溯性,便于对模型输出进行验证和审查。

示例:在给定一段关于历史事件的文本后,要求模型回答相关问题。

代码语言:javascript
代码运行次数:0
运行
复制
text = """1861年,美国爆发了南北战争,这场战争是美国历史上的重要转折点,它主要围绕奴隶制的存废问题展开,北方主张废除奴隶制,南方则坚持保留。最终北方取得了胜利,为美国的工业化发展铺平了道路。"""
prompt = f"""请从上述文本中找出相关信息,回答南北战争主要围绕什么问题展开?"""
# 模型输出
南北战争主要围绕奴隶制的存废问题展开,北方主张废除奴隶制,南方则坚持保留。

第三节:Prompt技术分析与应用

在深入研究prompt技术的过程中,我们将详细解析多种关键技术,帮助您准确理解其核心要点及应用场景,从而有效提升应用能力。

一、零样本提示(Zero-Shot Prompting)

零样本提示是一种技术,允许模型在没有具体示例的情况下直接执行任务。其基本原理是,模型通过大量数据的训练和指令的调整,已经具备了一定的通用知识和任务理解能力。例如:

代码语言:javascript
代码运行次数:0
运行
复制
prompt = "判断此文本的情感倾向为积极、消极或中性:这部电影情节紧凑,特效惊人。情感:"
# 模型会依据自身预训练知识对这个提示进行处理并输出结果

模型可以基于自身预训练的知识输出“积极”。然而,在缺乏具体示例的引导下,对于复杂任务,它的效果可能受到限制。

二、少样本提示

当零样本提示的效果不理想时,少样本提示派上用场。通过向模型提供少量任务示例,这种方法能够帮助模型学习任务的模式与规律。例如:

代码语言:javascript
代码运行次数:0
运行
复制
prompt = """“whatpu”是坦桑尼亚的一种小型毛茸茸的动物。一个使用 whatpu 这个词的句子的例子是:我们在非洲旅行时看到了这些非常可爱的whatpus。“farduddle”是指快速跳上跳下。一个使用 farduddle 这个词的句子的例子是:"""
# 模型会根据前面的示例学习并生成新的句子

通过提供类似于新词汇造句的示例,模型可以模仿这些示例的结构和逻辑来生成新的内容。然而,在复杂推理任务中,仍需进一步优化。

三、思维链提示(Chain-of-Thought Prompting)

思维链提示的目的是为模型提供明确的推理步骤,引导其在复杂推理任务中的表现。通过在提示中展示详细的推理过程,模型能够学习如何逐步分析和解决问题。比如:

代码语言:javascript
代码运行次数:0
运行
复制
prompt = """Roger 有 5 个网球,他又买了 2 罐网球,每罐有 3 个球,他现在共有多少球?
Roger 一开始有 5 个球。
2 罐网球,每罐 3 个,共 6 个球。
5 + 6 = 11。
答案是 11。"""
# 模型按照提示中的推理步骤进行计算和回答

这种技术可以与少样本提示相结合,以增强效果,特别适用于算术和常识推理等任务,帮助模型更有条理地处理问题。

四、自我一致性

自我一致性技术主要用于优化思维链提示中的推理路径选择。其核心理念是通过提供多个少样本推理示例,让模型从多样的推理结果中筛选出最一致的答案,从而提高在算术和常识推理任务中的可靠性。例如:

代码语言:javascript
代码运行次数:0
运行
复制
prompt = """Q:林中有 15 棵树。林业工人今天将在林中种树。完成后,将有 21 棵树。林业工人今天种了多少棵树?
A:我们从 15 棵树开始。后来我们有 21 棵树。差异必须是他们种树的数量。因此,他们必须种了 21 - 15 = 6 棵树。答案是 6。
Q:停车场有 3 辆汽车,又来了 2 辆汽车,停车场有多少辆汽车?
A:停车场已经有 3 辆汽车。又来了 2 辆。现在有 3 + 2 = 5 辆汽车。答案是 5。
Q:当我 6 岁时,我的妹妹是我的一半年龄。现在我 70 岁了,我的妹妹多大?
A:"""
# 模型会参考前面的推理示例对最后一个问题进行回答,并从多个可能的回答中选择最一致的答案

五、生成知识提示

生成知识提示旨在解决模型在处理需要额外知识的任务时所面临的局限。其操作方式是先让模型生成与任务相关的背景知识,再将这些知识整合起来以得出准确的答案。比如:

代码语言:javascript
代码运行次数:0
运行
复制
prompt = """输入:高尔夫球的一部分是试图获得比其他人更高的得分。
知识:高尔夫球的目标是以最少的杆数打完一组洞。一轮高尔夫球比赛通常包括 18 个洞。每个洞在标准高尔夫球场上一轮只打一次。每个杆计为一分,总杆数用于确定比赛的获胜者。
解释和答案:"""
# 模型根据生成的知识对问题进行回答

像这样先生成相关知识,然后整合这些知识以得出准确答案,“不是,高尔夫球的目标是以最少杆数完成比赛,而非追求更高得分”,有效提高了模型在常识推理任务中的准确性。

六、链式提示(Prompt Chaining)

链式提示是一种将复杂任务拆解为多个子任务的方法,通过逐一生成子任务提示并传递结果,从而实现有序处理复杂任务。例如,在文档问答中:

代码语言:javascript
代码运行次数:0
运行
复制
# 第一个提示用于提取相关引文
prompt1 = """你是一个很有帮助的助手。你的任务是根据文档回答问题。第一步是从文档中提取与问题相关的引文,由####分隔。请使用<quotes></quotes>输出引文列表。如果没有找到相关引文,请回应“未找到相关引文!”。#### {{文档}} ####"""
# 假设这里有一个文档变量 doc,将其代入提示中进行处理
# 处理后得到引文列表,假设为 quotes_list

# 第二个提示根据引文和文档生成回答
prompt2 = """根据从文档中提取的相关引文(由<quotes></quotes>分隔)和原始文档(由####分隔),请构建对问题的回答。请确保答案准确、语气友好且有帮助。#### {{文档}} #### <quotes>{quotes_list}</quotes>"""
# 模型根据第二个提示生成最终回答

这种方法提升了任务处理的准确性和可靠性,使模型能够逐步深入地应对复杂问题。

七、思维树(ToT)

思维树框架是专为帮助模型应对复杂的探索性任务而设计的。它通过构建一棵思维树,使模型在解决问题时能够生成和评估中间的思维步骤,并结合搜索算法进行系统性的探索。示例如下:

代码语言:javascript
代码运行次数:0
运行
复制
# 假设给定数字为 4、9、10、13
prompt = """输入: 4 9 10 13
4 + 9 = 13 (left 10 13 13)
10 - 4 = 6 (left 6 9 13)
13 - 6 = 7 13 - 9 = 4
4 + 6 = 10 (left 7 9 4 * 6 = 24 (left 4 6)
评估是否能得到 24: sure
"""
# 模型按照思维树的步骤进行推理和计算,并根据评估结果继续搜索或得出答案

八、检索增强生成(RAG)

检索增强生成(RAG)技术结合了信息检索与文本生成,特别适用于处理知识密集型的任务。通过检索相关文档来为模型提供额外的知识支持,这一方法有助于减轻模型的“幻觉”现象。例如:

代码语言:javascript
代码运行次数:0
运行
复制
# 假设这里有一个检索函数 retrieve_documents 和一个生成答案的函数 generate_answer
question = "谁是首次登上月球的人?"
documents = retrieve_documents(question)
prompt = "根据以下文档回答问题:" + str(documents) + " 问题是:" + question
answer = generate_answer(prompt)
# 最终得到的 answer 即为模型结合检索结果生成的答案

这确保了答案基于可靠的知识来源,使得模型在自然问题、事实验证等基准测试中表现出色。

九、自动推理与工具使用(ART)

自动推理与工具使用(ART)技术使模型能够自动生成包含推理步骤的程序,并在需要时调用外部工具。例如:

代码语言:javascript
代码运行次数:0
运行
复制
prompt = """计算 16 个苹果平均分给 4 个人,每人几个,再加上 3 是多少?
请生成解决这个问题的程序步骤。"""
# 模型会生成类似下面的程序步骤
# result = (16 / 4) + 3
# 然后可以在代码中执行这个程序步骤得到最终答案

在BigBench和MMLU基准测试中,ART在多项任务上表现优异,明显超越了少样本提示和自动思维链等方法,从而提升了模型解决问题的能力和效率。

十、自动提示工程师(APE)

自动提示工程师(APE)是一种能够自动生成和筛选任务指令的技术。该技术利用大型语言模型生成指令候选项,然后根据评估分数选择最佳的指令,从而提高提示生成的效率和效果。例如:

代码语言:javascript
代码运行次数:0
运行
复制
# 假设这里有一个生成指令候选项的函数 generate_candidates 和一个选择最佳指令的函数 select_best_instruction
article = "这里是一篇新闻文章的内容"
candidates = generate_candidates(article)
prompt = select_best_instruction(candidates) + " " + article
# 模型根据最终的 prompt 生成文章总结

例如,在总结新闻文章时,它首先依靠大型语言模型生成指令候选项,如“提取文章的关键人物、事件和时间”以及“概括文章的主要内容并突出重点”,然后根据评估分数选择最佳指令,以指导模型生成高质量的总结。

十一、Active-Prompt

Active-Prompt技术主要用于解决思维链示例有效性的问题。它首先查询模型生成多个答案,计算不确定性后,选出最不确定的问题让人类进行注释示例,随后利用新的示例推断其他问题,以优化模型对不同任务的适应能力。例如:

代码语言:javascript
代码运行次数:0
运行
复制
# 假设这里有一个查询模型生成答案的函数 query_model 和一个计算不确定度的函数 calculate_uncertainty
prompt = "对以下文本进行分类:这是一篇科技类文章。"
answers = query_model(prompt, num_answers=5)  # 生成 5 个答案
uncertainty = calculate_uncertainty(answers)
if uncertainty > threshold:  # 如果不确定度大于设定阈值
    # 选择最不确定的问题由人类注释示例,然后更新提示并重新查询模型
    new_prompt = update_prompt_with_annotated_example(prompt)
    final_answer = query_model(new_prompt)
else:
    final_answer = select_most_consistent_answer(answers)
# 最终得到的 final_answer 即为经过 Active-Prompt 处理后的答案

通过这种方法,可以提升模型在文本分类等任务中的准确性。

十二、方向性刺激提示(Directional Stimulus Prompting)

方向性刺激提示通过训练策略语言模型生成引导性提示,从而增强对模型生成结果的控制能力。例如,在文本摘要任务中:

代码语言:javascript
代码运行次数:0
运行
复制
article = "这里是一篇文章的内容"
prompt = "请根据文章内容生成一个引导提示,重点关注文章的主要事件和结果。"
# 策略 LM 会根据这个提示生成如“重点提取文章中事件的主体、发生的时间和最终结果”的引导提示
# 然后可以将这个引导提示用于后续的文本摘要任务中

在文本摘要任务中,策略语言模型根据文章的主题和关键信息生成引导提示,从而指导模型生成符合需求的摘要,提高摘要的质量。

十三、PAL(程序辅助语言模型)

PAL(程序辅助语言模型)技术使得模型能够生成程序以解决问题,通过编程运行时增强其处理复杂问题的能力。以日期计算问题为例:

代码语言:javascript
代码运行次数:0
运行
复制
question = "今天是 2023 年 2 月 27 日,我出生于 25 年前,我的出生日期是多少?"
prompt = """
import datetime
from dateutil.relativedelta import relativedelta

# Q: 2015 年在 36 小时后到来。从今天起一周后的日期是多少(格式为 MM/DD/YYYY)?
# 如果 2015 年在 36 小时后到来,那么今天是 36 小时前。
today = datetime(2015, 1, 1) - relativedelta(hours=36)
# 从今天起一周后,
one_week_from_today = today + relativedelta(weeks=1)
# 格式化后的答案
one_week_from_today.strftime('%m/%d/%Y')

# Q: 今天是 2023 年 2 月 27 日,我出生于 25 年前,我的出生日期是多少?
"""
# 模型会生成类似下面的代码
# today = datetime(2023, 2 27)
# born = today - relativedelta(years=25)
# born.strftime('%m/%d/%Y')
# 然后可以在代码中执行模型生成的代码得到最终答案

十四、ReAct 框架

ReAct 框架通过交替生成推理过程和执行操作,提高了答案的可靠性和可解释性。例如,在回答问题时:

代码语言:javascript
代码运行次数:0
运行
复制
question = "除苹果遥控器外,哪些设备可控制其设计交互的程序?"
prompt = """问题:除苹果遥控器外,哪些设备可控制其设计交互的程序?
思考 1:我需要搜索苹果遥控器相关程序及可替代控制设备。
操作 1:搜索 [苹果遥控器 可替代控制设备]
观察 1:搜索结果为……
思考 2:根据搜索结果,分析哪些设备符合要求。
操作 2:筛选 [符合要求的设备]
观察 2:筛选结果为……
思考 3:整理最终答案。
操作 3:整理 [最终答案]
"""
# 模型会按照提示中的推理轨迹和操作步骤进行处理,并最终得出答案

在知识密集型和决策任务中表现良好,通过与外部环境交互获取信息来辅助推理。

十五、自我反思(Reflexion)

自我反思框架包含参与者、评估者和自我反思三个模型,旨在帮助模型从错误中学习并提升性能。模拟编程任务的示例如下: 请重新整理下,不要用原话

代码语言:javascript
代码运行次数:0
运行
复制
# 假设这里有参与者模型 actor、评估者模型 evaluator 和自我反思模型 reflexion
code = "这里是一段初始代码"
# 参与者模型生成尝试解决问题的代码和动作
result = actor(code)
# 评估者模型评价输出
score = evaluator(result)
# 自我反思模型根据评价结果生成改进建议
reflection = reflexion(score, result)
# 将改进建议应用到下一次的代码生成中,实现自我学习和提升

例如,当代码存在语法错误时,自我反思模型会提供可能的错误原因和修正建议,帮助模型迅速学习并纠正问题。

附录

一、术语表

  • 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):将信息检索与文本生成结合,检索相关文档为模型提供知识支持,从而减轻“幻觉”现象。
  • 自动推理与工具使用(ART):使模型能够自动生成包含推理步骤的程序,并在必要时调用外部工具,以提升解决问题的能力和效率。
  • 自动提示工程师(APE):利用大型语言模型生成指令候选项,并根据评估分数选择最佳指令,从而提高提示生成的效率与效果。
  • Active-Prompt:首先查询模型生成多个答案,计算不确定性后选择最不确定的问题进行人类注释,从而优化模型对不同任务的适应能力。
  • 方向性刺激提示(Directional Stimulus Prompting):训练策略语言模型生成引导提示,以增强对生成结果的控制力,提升文本摘要等任务的质量。
  • PAL(程序辅助语言模型):使模型能够生成程序以解决问题,并通过编程运行时提升其处理复杂问题的能力。
  • ReAct框架:通过交替生成推理过程和执行操作,提升答案的可靠性和可解释性,尤其在知识密集型和决策任务中表现良好。
  • 自我反思(Reflexion):由参与者、评估者和自我反思三个模型组成,帮助模型从错误中学习并提升性能。

二、常见问题解答

  1. 1. 如何选择合适的Prompt框架? 选择合适的框架应依据任务类型和具体需求。例如,简单的对话可以使用RTF框架;复杂的分析任务可考虑思考链模式或RISEN框架;如果对输出格式有明确要求,可以在RTF或RISEN框架中重点考虑相关格式和约束条件;如进行总结类任务,则密度链模式可能更为合适。
  2. 2. 为什么模型会出现“幻觉”现象? 尽管模型经过大量数据的训练,但无法完美记住所有知识,且在面对复杂或不熟悉的主题问题时,可能会编造表面看似合理但实际上却是错误的内容。
  3. 3. 如何利用少样本提示提升模型性能? 提供与任务相关且格式规范的成功示例,确保这些示例包含任务的关键要素和模式,使模型能够学习示例中的规律和逻辑,从而在处理实际输入时生成更符合预期的结果。这尤其适用于复杂任务或对输出格式有特定要求的情况。
  4. 4. 链式提示在实际应用中有哪些优势? 链式提示可以将复杂任务拆分为多个子任务,使得模型在处理过程中更加清晰和有序,逐步深入解决问题,从而提高任务处理的准确性和可靠性,避免在处理复杂问题时由于任务复杂性导致的混乱或错误。

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一节:Prompt的定义及基本框架
    • 一、什么是Prompt
    • 二、撰写Prompt的基本框架
      • 1. Prompt的基本要素
      • 2. Prompt的五大框架
      • 2.3 RISEN框架
      • 2.4 RODES框架
      • 2.5 密度链模式
  • 第二节:打造高效Prompt的两大核心原则
    • 一、原则一:编写明确且具体的指令
    • 二、原则二:给予模型足够的思考时间
    • 三、模型的局限性与应对策略
      • 模型“幻觉”
      • 解决幻觉的策略
  • 第三节:Prompt技术分析与应用
    • 一、零样本提示(Zero-Shot Prompting)
    • 二、少样本提示
    • 三、思维链提示(Chain-of-Thought Prompting)
    • 四、自我一致性
    • 五、生成知识提示
    • 六、链式提示(Prompt Chaining)
    • 七、思维树(ToT)
    • 八、检索增强生成(RAG)
    • 九、自动推理与工具使用(ART)
    • 十、自动提示工程师(APE)
    • 十一、Active-Prompt
    • 十二、方向性刺激提示(Directional Stimulus Prompting)
    • 十三、PAL(程序辅助语言模型)
    • 十四、ReAct 框架
    • 十五、自我反思(Reflexion)
  • 附录
    • 一、术语表
    • 二、常见问题解答
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档