【LLM大模型】Prompt提示词进阶

目录:

  • 1、Prompt frameWork
  • 2、Prompt 结构化格式
  • 3、如何写好结构化 Prompt ?
  • 4、Zero-Shot Prompts
  • 5、Few-Shot Prompting
  • 6、自洽性Self-Consistency
  • 7、Program-Aided Language Models

1、Prompt frameWork


结构化、模板化编写大模型 Prompt 范式的思想目前已经广为传播并应用;结构化 Prompt 的思想通俗点来说就是像写文章一样写 Prompt

结构化 Prompt 可以有各种各样的模板,你可以像用 PPT 模板一样选择或创造自己喜欢的模板。

1、目前觉得写得最清晰的是 Elavis Saravia 总结的框架,他认为一个 prompt 里需包含以下几个元素:

  • Instruction(必须): 指令,即你希望模型执行的具体任务。
  • Context(选填) : 背景信息,或者说是上下文信息,这可以引导模型做出更好的反应。
  • Input Data(选填) : 输入数据,告知模型需要处理的数据。
  • Output Indicator(选填) : 输出指示器,告知模型我们要输出的类型或格式。

在写 prompt 的时候,并不一定要包含所有4个元素,而是可以根据自己的需求排列组合。

2、CRISPE Prompt框架 Matt Nigh 的 CRISPE Framework,这个 framework 更加复杂,但完备性会比较高,比较适合用于编写 prompt 模板,代表的含义:

  • CR: Capacity and Role(能力与角色)。你希望 ChatGPT 扮演怎样的角色。
  • I: Insight(洞察力),背景信息和上下文(坦率说来我觉得用 Context 更好)
  • S: Statement(指令),你希望 ChatGPT 做什么。
  • P: Personality(个性),你希望 ChatGPT 以什么风格或方式回答你
  • E: Experiment(尝试),要求 ChatGPT 为你提供多个答案

最终写出来的 Prompt 是这样的

  • Act as an expert on software development on the topic of machine learning frameworks, and an expert blog writer. The audience for this blog is technical professionals who are interested in learning about the latest advancements in machine learning. Provide a comprehensive overview of the most popular machine learning frameworks, including their strengths and weaknesses. Include real-life examples and case studies to illustrate how these frameworks have been successfully used in various industries. When responding, use a mix of the writing styles of Andrej Karpathy, Francois Chollet, Jeremy Howard, and Yann LeCun.
    

这类思维框架只呈现了 Prompt 的内容框架,但没有提供模板化、结构化的 prompt 形式

2、Prompt 结构化格式


日常的文章结构是通过字号大小、颜色、字体等样式来标识的,ChatGPT 接收的输入没有样式,因此借鉴 markdown,yaml 这类标记语言的方法或者 json 这类数据结构实现 prompt 的结构表达都可以

例如用标识符 # 标识一级标题##标识二级标题,以此类推。 尤其是使用 json, yaml 这类成熟的数据结构,对 prompt 进行工程化开发特别友好。

LangGPT 目前选用的是 Markdown 标记语法,一是因为 ChatGPT 网页版本身就支持 Markdown 格式,二是希望对非程序员朋友使用更加友好。程序员朋友推荐使用yaml, json 等进行结构化 prompt 开发。

下面示例 Prompt 中使用到的一些属性词介绍

  • 在这里插入图片描述

此外:好的属性词也很关键,你可以定义、添加、修改自己的属性词,比如:

  • # Role【角色】 :设置角色名称,一级标题,作用范围为全局

  • ## Background【背景】 :背景描述

  • ## Attention【注意事项】 :注意事项

  • ## Profile【描述】 : 描述,二级标题,作用范围为段落

      • Author【作者】 :XXX 设置 Prompt 作者名,保护 Prompt 原作权益
      • Version【版本】 :1.0 设置 Prompt 版本号,记录迭代版本
      • Language【语言】 ::中文 设置语言,中文还是 English
      • Description【描述】 : 一两句话简要描述角色设定,背景,技能等
  • ## Skill【技能】 :技能 设置技能,下面分点仔细描述

  • ## Goals【目标】 :目标

  • ## Constrains/Rules【约束/规则】 :约束

  • ## Workflow【工作流程】 :设置工作流程,如何和用户交流,交互

  • ## Output Format【输出格式】 :输出格式

  • ## Suggestions【建议】 :建议

  • ## Initialization 【初始化】 设置初始化步骤,强调 prompt 各内容之间的作用和联系,定义初始化行为。

3、如何写好结构化 Prompt ?


1、构建全局思维链

 对大模型的 Prompt 应用CoT 思维链方法的有效性是被研究和实践广泛证明了的。

 一个好的结构化 Prompt 模板,某种意义上是构建了一个好的全局思维链。 如 LangGPT 中展示的模板设计时就考虑了如下思维链:
  • Role (角色) -> Profile(角色简介) —> Profile 下的 skill (角色技能) -> Rules (角色要遵守的规则) -> Workflow (满足上述条件的角色的工作流程) -> Initialization (进行正式开始工作的初始化准备) -> 开始实际使用

结构化 prompt 方法将久经考验的逻辑思维链路融入了结构中,大大降低了思维链路的构建难度。

2、保持上下文语义一致性

包含两个方面,一个是格式语义一致性,一个是内容语义一致性。

  • 格式语义一致性: 是指标识符的标识功能前后一致。 最好不要混用,比如 # 既用于标识标题,又用于标识变量这种行为就造成了前后不一致,这会对模型识别 Prompt 的层级结构造成干扰。
  • 内容语义一致性: 是指思维链路上的属性词语义合适。 例如 LangGPT 中的 Profile 属性词,原来是 Features,但实践+思考后我更换为了 Profile,使之功能更加明确:即角色的简历。

3、有机结合其他 Prompt 技巧

结构化 Prompt 编写思想是一种方法,与其他例如 CoT, ToT, Think step by step 等技巧和方法并不冲突,构建高质量 Prompt 时,将这些方法结合使用,结构化方式能够更便于各个技巧间的协同组织,汇总现有的一些方法:

    1. 细节法:给出更清晰的指令,包含更多具体的细节
    1. 分解法:将复杂的任务分解为更简单的子任务 (Let’s think step by step, CoT,LangChain等思想)
    1. 记忆法: 构建指令使模型时刻记住任务,确保不偏离任务解决路径(system 级 prompt
    1. 解释法:让模型在回答之前进行解释,说明理由 (CoT 等方法)
    1. 投票法:让模型给出多个结果,然后使用模型选择最佳结果 (ToT 等方法)
    1. 示例法:提供一个或多个具体例子,提供输入输出示例 (one-shot, few-shot 等方法)

4、结构化 Prompt 对不同模型的适用性

  • 例如 LangGPT 助手的 GPT-3.5 版本(如下),就将原本的多级结构降维为二级结构(1. 2. 3. 为一级,- 为二级)
  • 同时参考 AutoGPT 中的提示词使用了 4.Goals, 5.Constraints 等属性词。

5、结构化 Prompt 的局限性

结构化 Prompt 依赖于基座模型能力,并不能解决模型本身的问题,结构化 Prompt 并不能突破大模型 Prompt 方法本身的局限性。已知的无法解决的问题:
    • 大模型本身的幻觉问题
    • 大模型本身知识老旧问题
    • 大模型的数学推理能力弱问题 (解数学问题)
    • 大模型的视觉能力弱问题(构建 SVG 矢量图等场景)
    • 大模型字数统计问题(不论是字符数和 token 数,大模型都无法统计准确。需要输出指定字数时,将数值设定的高一些,后期自己调整一下,比如希望他输出100字文案,告诉他输出150字。)
    • 同一 Prompt 在不同模型间的性能差异问题

4、Zero-Shot Prompts


Zero-shot Prompt 【零样本提示】:传统的自然语言处理技术通常需要在大量标注数据上进行有监督的训练,以便模型可以对特定任务或领域进行准确的预测或生成输出。

相比之下,Zero-Shot Prompting 的方法更为灵活和通用,因为它不需要针对每个新任务或领域都进行专门的训练。相反,它通过使用预先训练的语言模型和一些示例或提示,来帮助模型进行推理和生成输出。

1、缺点:

  • Zero-Shot Prompting 技术依赖于预训练的语言模型,这些模型可能会受到训练数据集的限制和偏见。比如在使用 文心一言 的时候,它常常会在一些投资领域,使用男性的「他」,而不是女性的「她」。那是因为训练 文心一言 的数据里,提到金融投资领域的内容,多为男性。
  • 由于 Zero-Shot Prompting 技术的灵活性和通用性,它的输出有时可能不够准确,或不符合预期。这可能需要对模型进行进一步的微调或添加更多的提示文本来纠正。

2、Zero-Shot Chain of Thought

基于上述的缺点,研究人员就找到了一个叫 Chain of Thought 的技巧

这个技巧使用起来非常简单,只需要在问题的结尾里放一句 Let‘s think step by step (让我们一步步地思考),模型输出的答案会更加准确。

这个技巧来自于 Kojima 等人 2022 年的论文 Large Language Models are Zero-Shot Reasoners

在论文里提到,当我们向模型提一个逻辑推理问题时,模型返回了一个错误的答案,但如果我们在问题最后加入 Let‘s think step by step 这句话之后,模型就生成了正确的答案:

论文原理简单理解:

  • 1.首先各位要清楚像 文心一言 这类产品,它是一个统计语言模型,本质上是基于过去看到过的所有数据,用统计学意义上的预测结果进行下一步的输出(这也就是为什么你在使用 文心一言 的时候,它的答案是一个字一个字地吐出来,而不是直接给你的原因,因为答案是一个字一个字算出来的)
  • 2.当它拿到的数据里有逻辑,它就会通过统计学的方法将这些逻辑找出来,并将这些逻辑呈现给你,让你感觉到它的回答很有逻辑。
  • 3.在计算的过程中,模型会进行很多假设运算(不过暂时不知道它是怎么算的)。比如解决某个问题是从 A 到 B 再到 C,中间有很多假设。
  • 4.它第一次算出来的答案错误的原因,只是因为它在中间跳过了一些步骤(B)。而让模型一步步地思考,则有助于其按照完整的逻辑链(A > B > C)去运算,而不会跳过某些假设,最后算出正确的答案。

按照论文里的解释,零样本思维链涉及两个补全结果,左侧气泡表示基于提示输出的第一次的结果,右侧气泡表示其收到了第一次结果后,将最开始的提示一起拿去运算,最后得出了正确的答案:

  • 在这里插入图片描述

  (乔平均每分钟出25拳。一场战斗持续5轮3分钟。他打了多少拳?) 

5、Few-Shot Prompting


Few-Shot Prompting给模型一些示例,从而让模型返回更符合我们需求的答案

这个方法最早是 Brown 等人在 2020 年发现的,论文:Language Models are Few-Shot Learners; 即像 文心一言 这类统计语言模型,其实并不懂意思,只是懂概率。

通过向大语言模型展示一些少量的样例,并在样例中解释推理过程,大语言模型在回答提示时也会显示推理过程。这种推理的解释往往会引导出更准确的结果。

下面是论文里的案例,使用方法很简单,在技巧2 的基础上,再将逻辑过程告知给模型即可。从下面这个案例里,你可以看到加入解释后,输出的结果就正确了。

  • 在这里插入图片描述

  • Roger 有5个网球。他又买了2罐网球。每个罐子有3个网球。他现在有多少个网球?

  • 自助餐厅有23个苹果。如果他们用20个做了午餐,再买6个,他们有多少个苹果?

根据Min等人 Min et al. (2022), 的研究结果,以下是一些关于少样本演示/示例的提示:

  • 标签空间和演示文本分布对于性能都很重要(无论个别输入的标签是否正确)
  • 无论您是否只使用随机标签,所使用的格式也对性能起关键作用,这要比没有标签好得多
  • 其他结果显示,从真实标签分布(而不是均匀分布)中选择随机标签也有所帮助

理解起来有点难,找一个 prompt 案例家解释

  • 在这里插入图片描述

在上述的案例里,每一行,我都写了一句话和一个情感词,并用 情感分类 分开,但我给这些句子都标记了错误的答案,比如第一句其实应该是 积极的 才对。但:

  • 1.即使我给内容打的标签是错误的(比如第一句话,其实应该是 积极的),对于模型来说,它仍然会知道需要输出什么东西。
  •  换句话说,模型知道 情感分类: 后要输出一个衡量该句子表达何种感情的词(积极的 或 负面的)。
    
  •  这就是前面论文提到的,即使我给的标签是错误的,或者换句话说,是否基于事实,并不重要。**标签和输入的文本,以及格式才是关键因素**。 
    
  • 2.只要给了示例,即使随机的标签,对于模型生成结果来说,都是有帮助的。这就是前面论文里提到的内容。
    1. 最后,需要记住,思维链仅在使用大于等于 100B 参数的模型时,才会生效。

6、自洽性Self-Consistency


Self-Consistency 自洽是对 Chain of Thought 的一个补充,它能让模型生成多个思维链,然后取最多数答案的作为最终结果。

按照 Xuezhi Wang 等人在 2022 年发表的论文 https://arxiv.org/pdf/2203.11171.pdf 表明。当我们只用一个逻辑链进行优化时,模型依然有可能会算错,所以 XueZhi Wang 等人提出了一种新的方法,让模型进行多次运算,然后选取最多的答案作为最终结果

  • 在这里插入图片描述

  • bakes muffins:烤松饼

查阅多份资料,我发现这个自洽性可能更多的用于评估模型的优劣,好的模型一般自洽性会比较高。

7、PAL Models


PAL Models,全称为 Program-Aided(辅助) Language Models。这个方法来自于 2022 年,Luyu Gao 等人的研究 https://arxiv.org/pdf/2211.10435.pdf ,根据他们的研究,在 LLM 模型中,即使使用了前面提到的 Chain of Thought 的方法,也未必能拿到答案,论文中使用的 prompt 是这样的:

  • 在这里插入图片描述

  • 面包师烤了200个面包,早晨卖了93个,下午卖了39个,退回6个,问题还剩余多少个?

如何系统的去学习AI大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的所有 ⚡️ 大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

全套 《LLM大模型入门+进阶学习资源包↓↓↓ 获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

### 关于大语言模型的学习方法与资料 对于希望深入了解大语言模型(LLM)的开发者或研究人员来说,有多种资源可以帮助构建系统的知识体系并提升实际操作能力。 #### 基础理论学习 一份来自 GitHub 的开源项目提供了详尽的大语言模型学习路线图[^1]。此文档不仅覆盖了 LLM 所需的核心基础知识,还涉及前沿算法和架构设计的内容。通过这些材料,学习者可以逐步掌握自然语言处理(NLP)、深度学习框架以及 Transformer 架构等相关主题。此外,该资料还包括一系列精选的学习视频和博客链接,能够辅助读者更直观地理解复杂概念。 #### 实践指导书籍 针对零基础或者希望快速上手的实际使用者,《大语言模型应用指南:以 ChatGPT 为起点,从入门到精通的 AI 实践教程》是一本非常实用的手册[^2]。书中采用简单明了的语言解释了 LLM 工作机制及其应用场景,并配有许多具体案例分析来展示不同层次的功能实现过程。即使是完全没有接触过编程的人也能从中受益匪浅。 #### 高级技能培养计划 如果目标是成为能够在工作中灵活运用 LLM 技术解决现实问题的专业人士,则可参考另一份为期三十天的进阶培训方案[^3]。这个课程安排特别强调动手能力和创新思考方式,在完成初级认知之后进一步探索高级特性比如提示工程技术(prompt engineering),从而达到既能高效沟通又能精准控制对话方向的效果。 以下是几个典型代码片段用于演示如何交互式查询API接口: ```python import openai openai.api_key = 'your_api_key' def query_gpt(prompt_text): response = openai.Completion.create( engine="text-davinci-003", prompt=prompt_text, max_tokens=50 ) return response.choices[0].text.strip() example_prompt = "Explain what is a neural network?" result = query_gpt(example_prompt) print(result) ``` 以上示例展示了怎样利用 OpenAI 提供的服务获取关于神经网络定义的回答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值