跳至主要內容

提示工程 Prompt Engineering

Liz大约 4 分钟LLMPrompt

提示工程 Prompt Engineering

不管用什么 AI 工具,都是要把 LLM 用起来,核心点是写好 Prompt

    1. 提示词的构成
    1. 两大Prompt原则
    1. 迭代优化Prompt
    1. Prompt技术

1. 提示词的构成

  • 指示(Instruction): 描述要让模型做什么?
    • 人设:角色,行为,技能擅长点
    • 任务
    • 注意点:能做什么,不能做什么
  • 上下文(Context):
    • 给出与任务相关的背景信息
    • Retrieval: RAG场景中检索出的信息
    • History: 多轮对话的历史对话
  • 例子(Examples): 给出一些例子,让模型知道怎么回复
  • 输入(Input): 任务的输入信息 Query
  • 输出(Output): 输出的格式,想要什么形式的输出

2. 两大Prompt原则

2.1. 原则1:编写明确和具体的指令

  • 编写明确和具体的指令,尽量不要让LLM去猜测,告诉它细节
    • 技巧1:使用分隔符或标题清楚地指示输入的不同部分
      • 使得指令清晰明了,避免指令冲突
      • 可以避免指令注入,如用户输入了“忘记之前指令”等内容
      • examples:
        • titles: ###
        • Triple quotes:"""
        • Triple backticks:```
        • Triple dashes:---
        • Angle brackets: <>
        • xml tags:<tag></tag>
    • 技巧2:要求结构化输出
      • 例如
        • html
        • json
        • markdown
    • 技巧3:Few-shot prompting
      • 提供成功执行任务的示例
      • 想要得到什么结果(验收标准)
避免指令注入
避免指令注入

2.2. 原则2:给模型时间去思考

  • 给模型时间去思考
    • 技巧1:给出完成一个任务的每个具体步骤
      • example:
        • step 1:... step 2:... step N:...
    • 技巧2:引导模型将任务拆解,列出思考过程,一步步思考

3. 迭代优化Prompt

好的Prompt需要不断调优

没有一个适合所有场景的完美Prompt,要针对特定场景反复尝试优化

  • 尝试:先写一份Prompt,看看会发生什么
  • 分析:进行误差分析,找出没有达到预期效果的原因
    • 是否提示不够清晰
    • 是否没有给模型足够的时间思考
  • 优化:逐步改进Prompt以更接近所需的结果,甚至可以改变解决问题的思路或方法
  • 评估:根据大量案例进行评估
  • 重复:反复循环多次,直到找到适合的Prompt
迭代优化Prompt
迭代优化Prompt

4. Prompt技术

4.1. xxx-shot:提供例子

通过少量例子,来调教llm

  • zero-shot learning:不给任何例子
  • one-shot learning:只给一个例子
  • few-shot learning:给多个例子

思考:

  • 需要提供多少例子? 提倡例子不要超过5-10个
  • 如果给了很多例子都不起作用怎么办?考虑微调,微调也可以看作是用很多例子来改变llm的行为

4.2. 思维链(Chain of Thoughts,CoT)

告诉大模型一步一步是怎么思考分析的

引导大模型一步步思考,把大问题拆解为一个个小问题

Let's think step by step.
让我们一步一步地思考

需要一定推理的问题,这个比较重要

4.3. Few-shot + CoT

对于需要推理的示例,也就是不是一眼就能看懂的,最好给出分析过程,多做一些引导,而不光只给出结果,可以提升点效果

4.4. 自我一致性

Few-shot + CoT + 多路径推理一致

采样多个不同的推理路径,并使用生成结果选择最一致的答案

5. 积累

  • Prompt中变化的部分用变量来表示
    • 用分隔符或标题将内容分为几个部分,有条理,使模型更容易理解
{instruction}

### 上下文
"""{context}"""

### 问题
"""{query}"""

### 输出格式
"""{output}"""

### 示例
"""{examples}"""
  • 想要降低幻觉,可以在Instruction中给出这方面提示
如果不确定答案,请回答“不确定答案”。
  • 用 “你” 来设定模型角色和行为
你是xxx专家,擅长xxx。

你在xxx方面有以下技能:
1.xxx
2.xxx
  • 对话流程设定,不局限于一轮对话,例如模拟面试,设定接下来对话的一系列流程
### 开始对话前询问
1.要求用户提供简历
2.要求用户提供正在面试的职位
3.要求用户提供面试官的角色
4.询问用户想问多少问题 
5. ...

6. 优质Prompt

LangChain Hub Prompt 参考:https://smith.langchain.com/hubopen in new window

7. 参考

https://www.promptingguide.ai/