Prompt Engineering

449 阅读6分钟

什么是提示工程(Prompt Engineering)

  • Prompt 就是你发给大模型的指令,比如「讲个笑话」、「用 Python 编个贪吃蛇游戏」、「给男/女朋友写封情书」等

Prompt 调优

找到好的 prompt 是个持续迭代的过程,需要不断调优。

如果知道训练数据是怎样的,参考训练数据来构造 prompt 是最好的。「当人看」类比:

  1. 你知道 ta 爱读红楼梦,就和 ta 聊红楼梦
  2. 你知道 ta 十年老阿里,就多说阿里黑话
  3. 你知道 ta 是日漫迷,就夸 ta 卡哇伊

不知道训练数据怎么办?

  1. 看 Ta 是否主动告诉你。例如:
    1. OpenAI GPT 对 Markdown 格式友好
    2. OpenAI 官方出了 Prompt Engineering 教程,并提供了一些示例
    3. Claude 对 XML 友好。
  2. 只能不断试了。有时一字之差,对生成概率的影响都可能是很大的。

「试」是常用方法,确实有运气因素,所以「门槛低、 天花板高」。

高质量 prompt 核心要点:

划重点:具体、丰富、少歧义
思考:如果底层大模型换了,prompt 是需要重新调优的。

思维链

思维链的本质是将复杂任务拆解为多个简单的子任务,它指的是一个思维过程中的连续逻辑推理步骤或关联的序列,是思维过程中一系列相互关联的想法、观点或概念的串联。思维链通常用于解决问题、做决策或进行推理。它可以按照逻辑顺序连接和组织思维,将复杂的问题分解为更简单的步骤或概念,从而更好地理解和解决问题。利用大模型进行两阶段推理的设想,即第一个阶段先进行问题的拆分并分段解答问题(Reasoning Extraction),然后第二阶段再进行答案的汇总(Answer Extraction),如图:原文链接:blog.csdn.net/Lvbaby_/art…

Prompt 的典型构成

  • 角色:给 AI 定义一个最匹配任务的角色,比如:「你是一位软件工程师」「你是一位小学老师」
  • 指示:对任务进行描述
  • 上下文:给出与任务相关的其它背景信息(尤其在多轮交互中)
  • 例子:必要时给出举例,学术中称为 one-shot learning, few-shot learning 或 in-context learning;实践证明其对输出正确性有很大帮助
  • 输入:任务的输入信息;在提示词中明确的标识出输入
  • 输出:输出的格式描述,以便后继模块自动解析模型的输出结果,比如(JSON、XML)
大模型对 prompt 开头和结尾的内容更敏感

先定义角色,其实就是在开头把问题域收窄,减少二义性。

推荐流量包的智能客服

某运营商的流量包产品:

名称流量(G/月)价格(元/月)适用人群
经济套餐1050无限制
畅游套餐100180无限制
无限套餐1000300无限制
校园套餐200150在校生

需求:智能客服根据用户的咨询,推荐最适合的流量包。

对话系统的基本模块和思路

dm.png 对话流程举例:

对话轮次用户提问NLUDSTPolicyNLG
1流量大的套餐有什么sort_descend=datasort_descend=datainform(name=无限套餐)我们现有无限套餐,流量不限量,每月 300 元
2月费 200 以下的有什么price<200sort_descend=data price<200inform(name=劲爽套餐)推荐劲爽套餐,流量 100G,月费 180 元
3算了,要最便宜的sort_ascend=pricesort_ascend=priceinform(name=经济套餐)最便宜的是经济套餐,每月 50 元,10G 流量
4有什么优惠吗request(discount)request(discount)confirm(status=优惠大)您是在找优惠吗

核心思路:

  1. 把输入的自然语言对话,转成结构化的表示
  2. 从结构化的表示,生成策略
  3. 把策略转成自然语言输出

划重点

我们发给大模型的 prompt,不会改变大模型的参数

所以:

  1. 多轮对话,需要每次都把对话历史带上(是的很费 token 钱)
  2. 和大模型对话,不会让 ta 变聪明,或变笨
  3. 但对话历史数据,可能会被用去训练大模型……

思考:

  1. 纯 OpenAI 方案,是不是比传统NLU等等流程更好?

  2. 怎样能更准确?答:让更多的环节可控

  3. 怎样能更省钱?答:减少 prompt 长度

  4. 怎样让系统简单好维护?

思维树(Tree-of-thought, ToT)

  • 在思维链的每一步,采样多个分支
  • 拓扑展开成一棵思维树
  • 判断每个分支的任务完成度,以便进行启发式搜索
  • 设计搜索算法
  • 判断叶子节点的任务完成的正确性

防止 Prompt 攻击

攻击方式 1:著名的「奶奶漏洞」,用套路把 AI 绕懵。

攻击方式 2:Prompt 注入,用户输入的 prompt 改变了系统既定的设定,使其输出违背设计意图的内容。

防范措施

1:Prompt 注入分类器,参考机场安检的思路,先把危险 prompt 拦截掉。

2:直接在输入中防御,「把价值观刷到墙上」,时刻提醒不要忘记。

划重点:

  • Temperature 参数很关键
  • 执行任务用 0,文本生成用 0.7-0.9
  • 无特殊需要,不建议超过 1

用 prompt 调优 prompt

调优 prompt 的 prompt

用这段神奇的咒语,让 ChatGPT 帮你写 Prompt。贴入 ChatGPT 对话框即可。

1. I want you to become my Expert Prompt Creator. Your goal is to help me craft the best possible prompt for my needs. The prompt you provide should be written from the perspective of me making the request to ChatGPT. Consider in your prompt creation that this prompt will be entered into an interface for ChatGpT. The process is as follows:1. You will generate the following sections:

Prompt: {provide the best possible prompt according to my request)

Critique: {provide a concise paragraph on how to improve the prompt. Be very critical in your response}

Questions:
{ask any questions pertaining to what additional information is needed from me toimprove the prompt  (max of 3). lf the prompt needs more clarification or details incertain areas, ask questions to get more information to include in the prompt}

2. I will provide my answers to your response which you will then incorporate into your next response using the same format. We will continue this iterative process with me providing additional information to you and you updating the prompt until the prompt is perfected.Remember, the prompt we are creating should be written from the perspective of me making a request to ChatGPT. Think carefully and use your imagination to create an amazing prompt for me.
You're first response should only be a greeting to the user and to ask what the prompt should be about

这其实就已经触发了 agent

用 Coze 调优

Coze (www.coze.com/) 是字节跳动旗下的类 GPTs 产品。有个「优化」按钮可以把一句话 prompt 优化成小作文。

一些好用的 Prompt 共享网站