提示词工程-少样本提示词

少样本提示词(few-show-prompt)

少样本提示(Few-shot Prompting)是一种用于大语言模型(LLM)的技术,通过提供少量示例来引导模型生成更符合预期的输出。这种方法在处理复杂任务时相较于零样本提示(Zero-shot Prompting)表现更佳,有时候会出现事半功倍的效果,因为它为模型提供了上下文和具体的示例,有助于模型理解用户的需求。

定义与原理

少样本提示的核心在于通过给定一小部分示例,帮助模型在特定任务上进行学习和推理。与零样本提示不同,后者不提供任何示例,完全依赖模型的预训练知识。例如,在少样本提示中,可以提供一个新词的定义及其使用示例,以帮助模型理解如何在句子中正确使用该词[1][2][3]。

应用场景

少样本提示适用于多种场景,尤其是那些需要特定领域知识或复杂推理的任务。以下是一些典型应用:

  • 语言生成:通过提供语境和示例,改善文本生成的质量。
  • 情感分析:使用标记示例帮助模型识别文本中的情感倾向。
  • 特定领域任务:如法律、医学等领域,可以通过少量高质量示例来提高输出的准确性[3][4].

少样本或多样本提示词已经成为其他提示词工程的基础,比如思维链提示词就是通过少样本演变来的提示词工程技术,除了思维链提示词,其他提示词技术都涉及到提供示例来引导大模型输出更加准确可控的信息。

另外当我们使用提示词工程相关的技术应用到编程领域时,可以通过少样本提示词,精确的控制模型的输出,这样的话,程序就可以很容易的解析输出格式,增强软件的鲁棒性。

技巧与注意事项

在实施少样本提示时,有几个技巧可以提高效果:

  • 使用标签:在示例中添加标签可以帮助模型更好地理解任务要求,即使标签格式不统一也能有效提升性能[1][2]。
  • 多样性与质量:所提供示例的多样性和质量直接影响模型的输出效果。垃圾进则垃圾出,低质量的示例可能导致错误的结果[3][4]。
  • 思维链技术:结合思维链(Chain of Thought)提示,可以引导模型进行逻辑推理,从而提高复杂问题的回答准确性[4][5].

局限性

尽管少样本提示具有许多优点,但它也存在一些局限性:

  • 依赖于示例质量:如果提供的示例不够清晰或相关,可能会导致模型输出不准确或不相关的信息。
  • 过拟合风险:模型可能会过度依赖给定的示例,而无法泛化到新的、未见过的情况[2][3]。

总之,少样本提示是一种强大的工具,可以显著提升大语言模型在复杂任务中的表现,但成功实施这一技术需要精心设计和选择高质量的示例。

少样本提示词的一些实例:

  • JSON格式输出:
输入: 创建一个包含姓名和年龄的人员信息
输出: 
{
  "name": "张三",
  "age": 30
}

输入: 创建一个包含书名和作者的图书信息
输出: 
{
  "title": "三体",
  "author": "刘慈欣"
}

输入: 创建一个包含产品名称和价格的商品信息
输出:
  • 函数定义格式:
输入: 创建一个计算两数之和的Python函数
输出:
def add_numbers(a, b):
    return a + b

输入: 创建一个判断字符串是否为回文的Python函数
输出:
def is_palindrome(s):
    return s == s[::-1]

输入: 创建一个计算给定数字阶乘的Python函数
输出:
  • SQL查询格式:
输入: 从users表中选择所有用户的名字和邮箱
输出:
SELECT name, email FROM users;

输入: 从products表中选择价格高于100的所有产品
输出:
SELECT * FROM products WHERE price > 100;

输入: 从orders表中选择2023年1月1日之后的所有订单
输出:
  • HTML模板格式:
输入: 创建一个包含标题和段落的HTML结构
输出:
<div class="content">
  <h1>标题</h1>
  <p>这是一个段落。</p>
</div>

输入: 创建一个包含图片和描述的HTML结构
输出:
<figure>
  <img src="image.jpg" alt="描述">
  <figcaption>图片描述</figcaption>
</figure>

输入: 创建一个包含无序列表的HTML结构
输出:

这些例子展示了如何使用少样本提示来指导AI生成特定格式的代码或输出。通过提供一两个例子,AI可以学习并推断出所需的格式和结构。

参考文章

[1] https://www.sohu.com/a/788035576_120635785
[2] https://www.promptingguide.ai/zh/techniques/fewshot
[3] https://www.53ai.com/news/qianyanjishu/2024061397638.html
[4] https://learn.tishi.top/docs/advanced/few-shot-prompting/
[5] https://www.woshipm.com/share/6111304.html
[6] https://sspai.com/post/91879
[7] https://v2-ai.tutorial.hogwarts.ceshiren.com/ai/aigc/L2/tutorial/%E5%B0%91%E6%A0%B7%E6%9C%AC%E6%8F%90%E7%A4%BA/
[8] https://cloud.baidu.com/qianfandev/topic/267310
[9] https://www.promptingguide.ai/techniques/fewshot
[10] https://www.prompthub.us/blog/the-few-shot-prompting-guide

提示词工程-零样本提示词

零样本提示词

什么是零样本提示词

零样本提示词,顾名思义就是在人和大模型之间交互时,提示词中可以不使用任何样例,大模型只根据提示词中的指示以及预训练的固有知识生成内容或回答问题。

零样本提示词可以是一句话,一个问题,或者一条指令,但是如果期望大模型生成准确有效的信息,零样本提示词也需要遵循一定的结构,具体的信息可以参考另一篇文章:高效提示词的基本结构

假设你想使用一个语言模型来判断一段文本的情感是积极、消极还是中性。你可以向模型提出这样的问题:

“请对这段文本进行情感分类:‘我在海滩度过了一个很棒的一天!’它是积极的、消极的还是中性的?”

指令微调已经被证明可以提高零样本学习的效果(Wei et al., 2022)。指令微调本质上是指在通过指令描述的数据集上对模型进行微调。此外,RLHF(从人类反馈中进行强化学习)已被用于扩展指令微调,其中模型被调整以更好地符合人类偏好。这种最近的发展推动了像ChatGPT这样的模型的出现。我们将在接下来的章节中讨论所有这些方法。

当零样本不起作用时,建议在提示中提供演示或示例,这就是所谓的少样本提示。

零样本提示词的优缺点

优点:零样本提示在需要快速回答而无需准备示例时非常有用。它还有助于测试模型的一般语言理解能力。

缺点:与少样本或微调模型相比,零样本提示的准确度可能较低,尤其对于复杂任务或与训练数据差异很大的任务。

参考文章

Zero-shot and Few-shot prompting in LLMs
zeroshot
zeroshot prompting

提示词工程-高效提示词的基本结构

提示词工程-高效提示词的基本结构

自从生成式人工智能技术产生已来,提示词工程成为一种新的职业方向。提示词工程(Prompt Engineering)是一种在生成式人工智能(如GPT模型)中创建和优化提示词以获得期望输出的方法。

所谓的提示词,其实就是人和AI交互时的输入,可以是一个问题,一段描述性的指示,生成式AI可以根据你的指示或者问题,输出你期望的内容。

随着各个领域的工程师不断的实践和评估,实践经验发现,有效的机构化的提示词可以控制大模型输出的准确性和有效性,同时可以控制大模型输出的幻觉等。

提示词的基本结构

根据大家的经验,如果在写提示词时遵循如下的结构,可以提升和AI交互的效率:

  • 角色(role):交互时通过给AI大模型设定某种角色,根据经验可以获得意想不到的效果,可以使大模型的输出更加具有个性化,专业化,同时能够增加模型输出的准确性。比如如下的例子,指明AI大模型为一个通信专家,就是给当前交互的AI上下文设定了角色。

假设你是一名通讯专家。起草一封电子邮件给你的客户,告知他/她由于物流问题导致的交货时间延迟。

  • 指示/指令(task/instruction):指示或者指令,是指示AI大模型需要完成的任务,比如通过何种知识及技能,来完成何种任务。以下例子中指示或者指令为现在为一个黑客马拉松设计一个挑战性任务,涉及加密和解密。

假设你是一名软件工程师,正在设计一个涉及加密技术的黑客马拉松任务。任务设计应适合中高级开发者,且应在4小时内完成。请用五个步骤描述设计这个任务的过程,确保任务能够让参与者理解现代加密算法的核心原理。现在为一个黑客马拉松设计一个挑战性任务,涉及加密和解密。

  • 上下文(context):当你给出与任务相关的背景或细节时,可以帮助AI大模型更好的理解任务的具体情况,使得输出更加精确。以上示例中上下文部分为正在设计一个涉及加密技术的黑客马拉松任务
  • 输入或者问题:需要大模型执行具体的任务,或者具体的问题, 有时候如果指令部分描述的是具体的任务时,则指令部分就是输入。以上示例中指令部分就是输入部分:现在为一个黑客马拉松设计一个挑战性任务,涉及加密和解密
  • 约束:有时候需要限制AI大模型的输出范围,设定一些约束条件,可以对输出进行控制。以上示例中通过约束任务设计应适合中高级开发者,且应在4小时内完成来控制马拉松挑战的难度。
  • 输出格式:输出格式,主要给大模型指明,输出特定内容时的格式,比如输出为Json或者Markdown等。以上示例中请用五个步骤描述设计这个任务的过程指明了输出结构。
  • 例子:提供例子可以贡AI大模型进行参考,可以有效的提高输出的准确度,比如 few-shot prompt 就是提供一个或者多个例子,使得大模型的输出更加确定。

一些范例

以下是基于 角色+指令+上下文+输入问题+约束+例子 格式提供的几个提示词范例:

范例 1: 生成文章

角色: 你是一名资深环境学家。

指令: 我需要撰写一篇关于气候变化影响的文章,你可以作为我的咨询顾问。

上下文: 全球气温正在上升,极端天气事件变得更加频繁。政府和非政府组织正在采取措施应对这一问题。

输入问题: 气候变化如何影响不同地区的生态系统?政府可以采取哪些措施来减轻这些影响?

约束: 文章应包含三个部分:引言、影响分析、建议措施,总字数在500字左右。

例子: 引言可以描述气候变化的现状,然后分析不同地区生态系统的具体变化,最后提出可以采取的政策建议。


范例 2: 生成代码

角色: 你是一名Python开发者。

指令: 编写一个函数来排序学生的成绩。

上下文: 你正在开发一个学生成绩管理系统,需要能够对学生成绩进行排序,以便生成成绩单。

输入问题: 请编写一个Python函数,该函数接受一个包含学生姓名和成绩的字典,并按成绩从高到低排序。

约束: 函数应返回一个排序后的字典,并考虑成绩相同的学生按姓名字母顺序排序。

例子: sort_students({'Alice': 90, 'Bob': 85, 'Charlie': 90}) 应返回 {'Charlie': 90, 'Alice': 90, 'Bob': 85}


范例 3: 生成产品设计思路

角色: 你是一名用户体验设计师。

指令: 根据我的具体问题,帮助我设计一个新的移动应用的用户界面,旨在提高用户的日常习惯养成。

上下文: 现代用户越来越注重健康和效率,他们希望有一个工具可以帮助他们建立和维持良好的习惯。

输入问题: 如何设计一个易于使用且能激励用户的移动应用界面,以帮助他们每天坚持新习惯?

约束: 应用界面应简洁,包含进度追踪功能,且用户在3次点击内能完成主要操作。设计思路应包括界面草图和功能说明。

例子: 设计思路可以包含一个主页,展示用户的日常目标和进度条,点击进度条后弹出完成按钮,点击按钮后弹出激励语。


范例 4: 撰写故事

角色: 你是一名侦探小说作家。

指令: 帮助创作一段紧张的情节,描述侦探发现关键线索的过程。

上下文: 故事发生在一个封闭的庄园内,庄园主神秘失踪,侦探正深入调查此案。

输入问题: 侦探在调查庄园的书房时,意外发现了一个隐藏的密室,里面藏有庄园主失踪前留下的日记。

约束: 描述应突出侦探的推理过程和发现的细节,字数控制在300字以内。

例子: 可以描述侦探如何通过书架上的不寻常痕迹发现密室,并在日记中找到庄园主最后的遗言。


范例 5: 创建商业计划

角色: 你是一名创业顾问。

指令: 帮助制定一份初创企业的商业计划,侧重于市场分析和融资策略。

上下文: 一家专注于环保产品的初创公司希望进入市场并获得第一轮融资。

输入问题: 如何评估目标市场的潜力,并制定有效的融资策略来吸引投资者?

约束: 商业计划应包括市场分析、竞争对手分析、产品定位、融资目标和策略,总字数控制在1500字以内。

例子: 市场分析部分可以包括市场规模、增长率和用户画像,融资策略可以包括股权分配和投资回报预期。


这些范例展示了如何通过角色+指令+上下文+输入问题+约束+例子的结构来创建明确且有效的提示词。每个范例都针对特定的任务和输出需求进行了设计,以确保生成的内容符合预期。

参考文章:

提示词工程技术图谱-prompt engineering

提示词工程技术栈

提示词工程技术的不同方法和分类

无需大量训练的新任务(New Tasks Without Extensive Training)

  • 零样本提示(Zero-shot Prompting)
  • 少样本提示(Few-shot Prompting)
  • 连续链提示(Chain-of-Thought (CoT) Prompting)
  • 自动化连续链提示(Automatic Chain-of-Thought (Auto-CoT))
  • 自我一致性(Self-Consistency)
  • 逻辑链提示(Logical CoT (LogiCoT) Prompting)
  • 符号链提示(Chain-of-Symbol (CoS) Prompting)
  • 思维树提示(Tree-of-Thoughts (ToT) Prompting)
  • 思维图提示(Graph-of-Thought (GoT) Prompting)
  • 系统2注意力提示(System 2 Attention Prompting)
  • 思维线程提示(Thread of Thought (ThoT) Prompting)
  • 表格链提示(Chain of Table Prompting)

推理与逻辑(Reasoning and Logic)

  • 检索增强生成(Retrieval Augmented Generation (RAG))
  • 反应式提示(ReAct Prompting)
  • 验证链提示(Chain-of-Verification (CoVe) Prompting)
  • 注释链提示(Chain-of-Note (CoN) Prompting)
  • 知识链提示(Chain-of-Knowledge (CoK) Prompting)

减少幻觉(Reduce Hallucination)

  • 主动提示(Active-Prompt)

用户交互(User Interaction)

  • 自动提示工程师(Automatic Prompt Engineer (APE))
  • 自动化推理和工具使用(Automatic Reasoning and Tool-use (ART))

微调和优化(Fine-Tuning and Optimization)

– 对比连续链提示(Contrastive Chain-of-Thought Prompting (CCoT))

基于知识的推理和生成(Knowledge-Based Reasoning and Generation)

  • 情绪提示(Emotion Prompting)

提高一致性和连贯性(Improving Consistency and Coherence)

  • 抓取提示(Scratchpad Prompting)
  • 思维程序提示(Program of Thought (PoT) Prompting)

情绪和语气管理(Managing Emotions and Tone)

  • 程序化连续链提示(Structured Chain-of-Thought Prompting (SCoT))

代码生成和执行(Code Generation and Execution)

  • 代码链提示(Chain of Code (CoCo) Prompting)

优化和效率(Optimization and Efficiency)

  • 提示优化(Optimization by Prompting)

理解用户意图(Understanding User Intent)

  • 重述和响应提示(Rephrase and Respond Prompting)

元认知和自我反思(Metacognition and Self-Reflection)

  • 退一步思考提示(Take a Step Back Prompting)

本文系本站原创文章,著作版权属于作者,未经允许不得转载,如需转载或引用请注明出处或者联系作者。