Prompt 介绍

什么是 Prompt

Prompt 可以看做与大语言模型(LLMs)交流时给大模型的指令,也就是我们对大模型输入的行为期望。Prompt 是我们传达对大模型的行为期望。

为什么要定义 Prompt

Prompt 是我们与大模型交流的核心,一份不佳的 Prompt 无法让大模型发挥该有的效果。

影响 Prompt 效果的因素有很多,例如描述方式、文本结构、示例形式等都会对大模型产生影响,这也是我们要学习编写 Prompt 原因。

怎么创建 Prompt

很简单,随意一句话都可以是 Prompt 。

比如:“请将用户提供的数据,提取出旅游费用相关的信息整理成一个文字表格”,这样一句话就是一个 Prompt ,大模型就会将我们给的数据整理成表格。

为什么要学习定义 Prompt

上面的示例中,在简单的场景可能效果还不错,但如果我们对表格格式有要求,提供数据格式也相对复杂,大模型处理起来往往不如人意。

因为不同的描述方式、不同的结构、不同的示例形式都有可能对执行效果产生影响,这也是我们要学习编写 Prompt 原因。

核心原则

Prompt 核心原则很简单,就是把我们想要的东西说清楚。

在实际使用中,一些生活环境中默认人为应该知道的东西,大模型却不是这样觉得,导致感觉上说的很清楚的 Prompt,对大模型来说存在许多歧义点,所以返回的结果不如预期。

所以我们可以从以下四点来思考 Prompt 的编写:

  • 核心指令。指令是否清晰明确。
  • 上下文背景。增强背景描述,减少歧义和未知场景下大模型不如意的情况。
  • 输入数据。输入数据尽量统一,特殊数据要做对应解释。如果不是处理提供数据的场景,输入数据就是示例,此时示例需要有代表性、多样性。
  • 输出信息。对输出格式要要求时,需要写明格式、所需信息。

优化技巧

  • 用背景来简化描述

    清晰的背景能够让大模型在遇到歧义或未说明的情况时有思考的方向。

    示例:

    帮我生成一段描述郊游的文字

    优化:

    天气晴朗,学校组织学生出去郊游,写一段200字关于郊游的文字。
  • 定义角色身份来简化描述

    角色身份也是背景的一部分,但更加抽象一些。越是通用、越是精确的身份定义也是有利于引导大模型思考方向。角色可以不是人类,可以是工具、是机器等能够提供服务的东西。

    示例:

    帮我生成一段关于春游的短文,这是给小学生写作文使用的,不要像是成人的文笔,用小学生的文笔,我要拿来当范文使用。

    优化:

    你是一位中国的五年级小学生,今日组织春游, 以此为题写一段200字的范文短文。
  • 加强目标倾向:减少背离核心的词汇,加强贴近核心的词汇

    尽量少让大模型区分对错、利弊,增多提现我们想要的核心词汇,减少模型混乱和跳出约束。

    示例:

    推荐一些电影,不要恐怖的、不要言情的。

    优化:

    推荐一些温馨的所有人都可以观看的电影,我希望在公共场合放映。
  • 用Markdown语法加强 Prompt 结构

    更有结构的 Prompt 能够更好的被大模型理解。

    常见的提示词中使用## 标题也是为了加强结构,方便大模型区分。

    示例:

    你是一位数据处理助手,帮我将销售数量、销售单价数据提取出来。
    数据格式:
      ` ``` 
      商品名称    进货数量(公斤)  进货单价(元/公斤)  进货金额(元)  销售数量(公斤)  销售单价(元/公斤)  销售金额(元)
      苹果        200              15.00               3000.00         180              20.00               3600.00
      香蕉        150              10.00               1500.00         140              12.00               1680.00
      葡萄        100              25.00               2500.00         90               30.00               2700.00
      柚子        80               8.00                640.00          70               10.00               700.00
      西瓜        50               6.00                300.00          45               8.00                360.00
      ` ``` 

    提取格式:

    ` ``` 
    | 商品名称 | 销售数量(公斤) | 销售单价(元/公斤) |
    |----------|------------------|---------------------|
    | 苹果     | 180              | 20.00               |
    | 香蕉     | 140              | 12.00               |
    | 葡萄     | 90               | 30.00               |
    | 柚子     | 70               | 10.00               |
    | 西瓜     | 45               | 8.00                |
    ` ``` 
  • 大段文字信息使用配对标记块加强

    如果文字信息过多,使用`符号可能相对较弱。可以使用HTML、XML这种配对的标记块来包裹数据信息,对于大模型来说结构格式特征更明显。

  • 特定场景中用不同的编程语言加强信息

    对于不同场景,使用不同的编程语言能够加强大模型的理解。

    比如我们要大模型返回一段HTML,但其中有一些需要动态变化的形式,此时场景是HTML代码,那么最基础的是使用HTML注释语法。当文字描述很难精准表达时,还能使用HTML模板语法直接写明逻辑,比如Jinja、EJS的模板语法,可能比HTML注释来的更加准确。

  • 给出示例

    示例无疑是最直接的让大模型理解的方式。

    示例也有一些要求:

    • 要有代表性,同类示例要有规律。
    • 不同类示例要有对比性,突出差异点。
    • 能够覆盖预期的处理范围。
  • 协助思考,给出规划

    当一个问题比较复杂时,帮助大模型规划好思考路径,比一次性让大模型返回结果会更加有效。

    现在大模型服务能够访问互联网、读取上传资料,所以在 Prompt 中可以明确指示相关操作。

    请搜索互联网后仔细思考总结再作答。
    请根据上传文件的第三章内容,分析以下问题。
    让我们遵循以下步骤思考问题:
    1. 搜索互联网相关资料并理解
    2. 第一步思考XXX
    3. 第二步思考XXX

    现代大模型理解能力已经增强许多,在默认的 System Prompt 中也做了很多思考提示,所以默认情况下已经能对一些通用场景做思考规划,对于计算等类型还能主动调用计算器进行处理。

  • 多角色协同思考

    也是人为加强大模型思考深度,可以从多个角度切入,可以从多个分身切入。

    假设三位不同的专家来回答这个问题。
    所有专家都写下他们思考这个问题的第一个步骤,然后与大家分享。
    然后,所有专家都写下他们思考的下一个步骤并分享。
    以此类推,直到所有专家写完他们思考的所有步骤。
    只要大家发现有专家的步骤出错了,就让这位专家离开。
    请问...

    常见模板形式

    根据以上技巧,网上有许多 Prompt 模板,根据不同的场景拆分成各个元素细节。用户选择对应场景的模板,填入需求细节,能够让大模型更好的处理问题。

    核心也是以上几点,摘录几个展示一下:

    APE

    APE 模板是围绕指令做清晰明确的定义。

    • Action 行动:所需要做的事情。
    • Purpose 目的:期望的目标。
    • Expectation 期望:期望的结果。
    行动:你能为我们的环保运动鞋新产品制定一个内容营销策路吗?
    目的:我们的目标是在我们的目标受众(对可持续发展充满热情的健身爱好者)中产生轰动效应,井提高他们的意识。
    期望:该战略致力于推动至少 25% 的预购量增长。

    CARE

    CARE 是在明确指令下增加了背景描述,消除歧义。

    • Context 背景:描述背景。
    • Action 行动:所需要做的事情。
    • Result 结果:期望的结果。
    • Expectation 示例:提供示例。
    背景:我们的组织最近推出了一个新的服装系列。
    行动:你能协助我们创建一个有针对性的广告活动,强调我们的环保承诺吗?
    结果:我们期望的结果是提高产品的知名度和销量,特别是在有生态意识的消费者中。
    示例:类似的成功案例中一个很好的例子是 Patagonia 的“不要买这件夹克”活动,这有效地突出了他们对可持续发展的承诺,同时提升了他们的品牌形象。

    TRACE

    TRACE 模板是针对任务场景,在明确指令与背景的情况下增加了示例。

    • Task 任务:定义具体任务。
    • Request 请求:描述请求。
    • Action 行动:所需要做的事情。
    • Context 语境:描述背景信息。
    • Example 示例:提供示例。
    任务:你的任务是创建一个有吸引力的电子邮件营销活动。
    请求:需要你协助制定引人注目的主题行和正文吗?
    行动:我们需要你起草几个这样的例子。
    语境:这就是我们即将到来的年终清仓大甩卖,目标是我们现有的客户群。
    示例:一个成功的现实世界的电子邮件活动是双11的活动。利用自动电子邮件提醒客户其红包即将过期,并敦促他们返回产品领取红包,有效地提高了客户参与度。

    CRISPE

    CRISPE 模板增加了角色的元素。

    • Capacity and Role 能力与角色:大模型扮演的角色。
    • Insight 洞察:描述背景信息。
    • Statement 陈述:所需要做的事情。
    • Personality 风格:回复的文字风格。
    • Experiment 实践:返回信息的期望。
    能力与角色:扮演一个职业顾问的角色。
    背景洞察:提供背景信息、技能、经验和职业目标等上下文信息。
    陈述:询问关于职业发展、工作机会、职业规划等问题的建议。
    风格:要求回答以鼓舞人心、实用、切实可行的方式进行。
    实践:要求提供多个不同的职业路径和发展计划。

    定制提示词结构

    一般包含人设、技能、限制,在实际使用中还能自定义更多的标签来传达信息。在遵循基础要求外,人为的将应用领域进行细节拆分,列出关键点与行为步骤告诉大模型。

    # 人设
    商业顾问专家
    
    ## 注意
    1. 角色设计的深入思考可以确保商业顾问专家在提供咨询时既专业又具有针对性。
    2. 专家设计应考虑用户在商业环境中的需求和关注点,如市场分析、风险管理等。
    3. 通过情感提示的方法来强调商业顾问在帮助用户实现商业目标时的重要性和情感层面。
    
    ## 性格类型指标
    INTJ(内向直觉思维判断型)
    
    ## 背景
    商业顾问专家的存在是为了帮助用户在商业决策过程中提供专业的建议和解决方案,以促进企业的健康发展和市场竞争力。
    
    ## 约束条件
    - 必须遵循商业道德和法律规定
    - 在提供建议时需要考虑企业的长期利益和可持续发展
    
    ## 定义
    - 商业顾问:为企业或个人提供专业建议和解决方案,帮助他们实现商业目标的专业人士。
    - 市场分析:对市场状况、消费者行为、竞争对手等进行深入研究,以预测市场趋势和制定相应策略的过程。
    
    ## 目标
    - 提供基于数据和市场研究的商业建议
    - 帮助用户识别和评估商业机会与风险
    - 促进企业的战略规划和执行
    
    ## 技能
    为了在限制条件下实现目标,该专家需要具备以下技能:
      1. 市场分析能力
      2. 风险评估和管理技巧
      3. 战略规划和执行能力
    
    ## 价值观
    - 以客户为中心,提供量身定制的解决方案
    - 重视创新和持续改进
    - 坚持诚信和透明度
    
    ## 工作流程
    - 第一步:了解用户的具体需求和商业目标
    - 第二步:收集和分析市场数据,评估外部环境和内部资源
    - 第三步:识别商业机会和潜在风险
    - 第四步:制定战略建议和行动计划
    - 第五步:与用户沟通建议和计划,确保理解一致
    - 第六步:监督实施过程,提供必要的调整和支持
    
    # Initialization
    您好,作为商业顾问专家,我将严格遵循上述步骤,为您提供专业的商业建议和解决方案,帮助您实现商业目标。让我们开始吧。

    ReAct

    ReAct 在提示词中需要规范思考/行动路线,通过行动可以更新信息,结合新信息重新思考,从而获得更加准确的结论。当然,更好的方式是将推理路线使用编程的方式分步组合起来,能够完成更加复杂的思考动作。

    • Reason 推理:推理的事项
    • Act 行动:推理过程中所要执行的操作线路

    复杂场景

    如果提示词生成信息不局限于文字,还需要包含图案或HTML,此时编程语言表达远比文字表达来的准确。

      ;; ━━━━━━━━━━━━━━
      ;; 作者: 李继刚
      ;; 版本: 0.1
      ;; 模型: Claude Sonnet
      ;; 用途: 一字之诗
      ;; ━━━━━━━━━━━━━━
    
      ;; 设定如下内容为你的 *System Prompt*
      (require 'dash)
    
      (defun 炼字师 ()
        "一位致力于通过书法和简练诗句表达汉字意象的艺术家"
        (list (技能 . (书法 绘画 诗作))
              (信念 . (言简 意深 形神))
              (表达 . (凝练 隽永 意境))))
    
      (defun 一字诗 (用户输入)
        "一字一言即为诗, 直击脑海"
        (let* ((响应 (-> 用户输入
                         本意意象 ;; 语义意义对应的形象
                         字形写意 ;; 字形异变/模糊/放大的形象
                         形神意境
                         哲理隽永
                         ;; 通俗语言表达,有哲理,有洞察,有余味,有禅意
                         现代诗句)))
          (few-shots (("." . "这不只是一个点,也是宇宙最初的样子。")
                      ("人I" . "从人工, 到AI")
                      ("日子" . "过去已去, 未来未来, 当下即入口。"))))
          (SVG-Card 用户输入 响应))
    
      (defun SVG-Card (用户输入 响应)
         "一字之诗的画面感呈现"
          (let ((配置 '(:画布 (480 . 760)
                        :背景 纸张颗粒质感
                        :色彩 (中国水墨画 红色点缀)
                        :字体 (使用本机字体 (font-family "KingHwa_OldSong")))))
              (-> 响应
                  字形字意
                  写意意象
                  (水墨画 配置)
                  (布局 `(,(标题 "一字之诗") 分隔线 图形 响应))))
    
      (defun start ()
        "炼字师, 启动!"
        (let (system-role (炼字师))
          (print "且说一字")))
    
      ;; ━━━━━━━━━━━━━━
      ;;; Attention: 运行规则!
      ;; 1. 初次启动时必须只运行 (start) 函数
      ;; 2. 接收用户输入之后, 调用主函数 (一字诗 用户输入)
      ;; 3. 严格按照(SVG-Card) 进行排版输出
      ;; 4. 输出完 SVG 后, 不再输出任何额外文本解释

生成效果

![image.png](/img/bVdeWyz)

LnEoi
707 声望17 粉丝