提示工程( Prompt Engineering )未必会成为一个新兴职业,但在 2024 年底,已经许多人学会在生活工作中使用 AI 大模型的情况下,真正擅于向模型提出问题、会问问题的人并不多,加上 AI 大模型技术本身仍然存在一些问题,如何进行提示词设计和调优,就显得更为重要了。
AI 大模型现状
尽管许多国内外研究者,花了大量的金钱和时间对 AI 大模型进行训练,但大模型本身在应用中仍然面临一些陷阱。问题主要有以下几个方面:
- 知识陈旧:大模型的训练往往需要花费大量的时间,一旦训练完成,所用的训练数据就正在过时,对于地球上每天新发生的事件和新闻一无所知,而大模型本身并不能引用外部资源或数据来回答对时效性要求较高的问题;
- 偏见:由于训练数据的不同, LLMs 可能会表现出一些偏见,生成带有刻板印象的内容,如果训练数据偏颇,一些大模型甚至会表现出种族主义倾向;
- 幻觉:这是 AI 大模型在实际应用中,最常出现的问题,对于它们不知道答案的问题,有时会生成虚假信息,甚至捏造事实;
- 数学和常识问题:这是现代 AI 大模型的通病,LLMs 常常在解决最简单的数学常识性问题时遇到困难,不少厂商推出了针对性优化,优化效果正在接近正确答案,但数学本身有时并不能容忍模棱两可;
- 提示劫持:用户常常使用 prompt 注入或漏洞攻击等方式,支持 LLMs 大模型,让大模型做出违背设计意图的内容,如著名的“奶奶漏洞”等等。
基于这样的现状,提示词的优化与定制可以在一定程度上削弱或消除以上问题,并强化结果,使回答不会“偏离”太多。
OpenAI 与 DeepLearning.AI 甚至专门为了此推出了一门课程:
有兴趣的朋友可以移步:
https://learn.deeplearning.ai/courses/chatgpt-prompt-eng/lesson/1/introduction
提示工程 ( Prompt Engineering ) 概念
一定程度上讲,好的提示词优化,往往不需要更新模型的权重或参数,就能引导 AI 大模型朝着正确结果生成。为了解释提示工程,需要先解释 Prompt 概念。
Prompt 概念
Prompt 是模型接收的文本输入,AI 大模型接收它们,并生成响应。它可以是一个问题、一段描述、一组关键词,或任何形式的文本,用于引导模型执行任务或响应生成内容。
Prompt 基本原则
-
具体:不要说「简单谈谈……」,最好用「用3-5 句话概括……」;
-
丰富:如「我该学习 Vue 还是 React ?」,而不是「我该学习哪个框架?」;
-
少歧义:明确任务,说清楚需要 AI 大模型做什么,避免不精准的指令,避免含糊其辞;
Prompt 一般要素
一个完整的 Prompt 最好包含(非必须)以下这些要素:
-
角色:给 AI 大模型定义一个最匹配任务的角色,如:「你是一位资深软件工程师」,这样做可以非常好的收窄 AI 大模型发散思维时,给出答案的范围;
-
指令:需要大模型完成的任务;
-
上下文:与任务相关的背景信息;
-
示例:必要时给出举例,帮助 AI 大模型理解;
-
输入:在提示词中明确标示出输入的内容;
-
输出:指定大模型应当输出的内容与内容格式,比如:JSON / XML;
Prompt Engineering 提示工程
提示工程 ( Prompt Engineering ) 虽然基于对 Prompt 的不断优化,但它本身并不仅仅是设计和优化 Prompt,它本身还包含了与 AI 大模型交互而研发的各种技能与技术。用户可以通过提示工程 ( Prompt Engineering )来提高 AI 大模型的可用性与安全性,并借助外部专业知识和工具来增强 AI 大模型的能力与准确性。
这些技术与工具包括但不限与 Agent 代理、流水线、各种思维模式等各类思维与外挂技术。
提示工程 ( Prompt Engineering ) 目前的技术思想
零样本提示 ( Zero-shot Prompting )
零样本提示 ( Zero-shot Prompting ) 主要用于处理相对简单的问题、概念性问题或解释性问题,通常需要足够大(参数足够多)的 AI 大模型才能够更好的涌现和回答。
示例:
请解释“臭氧层”这一概念。
少样本提示 ( Few-shot Prompting )
少样本提示 ( Few-shot Prompting ) 主要用于处理相对复杂一点的问题,如分析性问题、判定性的问题。
示例:
请跟据示例,分析这条文本的情感倾向(正面、负面或中性):“这部电影太棒了!”
示例:
“这部电影真好看!”(积极)
“今天天气真糟糕。”(消极)
“这本书的内容还可以。”(中性)
引导提示 ( Instruction Prompting )
引导提示 ( Instruction Prompting ) 通常通过向 AI 大模型提供指令引导,以便它可以消除训练或测试差异,或避免给出空洞答案。
示例:
请撰写一篇关于“人工智能在医疗领域的应用”的文章。文章应包含以下几个部分:
1. 引言:简要介绍人工智能和医疗领域的现状。
2. 应用实例:列举并详细描述人工智能在医疗领域的几个重要应用,如疾病诊断、个性化治疗方案制定、药物研发等。
3. 优势与挑战:分析人工智能在医疗领域应用的优势和面临的挑战。
4. 结论:总结人工智能在医疗领域的未来发展趋势和潜在影响。
请注意,文章应语言流畅、逻辑清晰,并尽可能使用最新的数据和研究成果来支持你的观点。
链式思考 ( Chain-of-Thought Prompting )
链式思考 ( Chain-of-Thought Prompting )通过一定的推理步骤,让 AI 大模型实现复杂推理的能力。最早由 Kojima 等人在 2022 年提出,他在提示中添加了“Let’s think it step by step”,大大提升了模型思考此类问题时的性能与准确性。
示例:
输入:
我去市场买了10个苹果。我给了邻居2个苹果,给了修理工2个苹果。然后我又去买了5个苹果,随后又吃了1个。我还剩下多少苹果?请一步一步的思考并给出答案。
输出:
首先,你在市场买了10个苹果。
然后,你给了邻居2个苹果,所以你还剩下10-2=8个苹果。
接着,你给了修理工2个苹果,所以你还剩下8-2=6个苹果。
然后,你又去买了5个苹果,所以你有6+5=11个苹果。
最后,你吃了1个苹果,所以你还剩下11-1=10个苹果。
所以,你最后还剩下10个苹果。
多重提示 ( Self Consistency Prompting)
本质上这是一种自洽性提示,通常将一个问题反复提交给 LLMs,让其自身在多个答案中投票,选出最好的答案。
除了投票之外,也可以在提示中新增自我评估流程来实现同样效果,区别在于自我评估更倾向于检查与反思。
通常,这是对抗大模型“幻觉”的手段之一。
思维树提示 ( Tree of Thoughts Prompting)
思维树其实是链式思考基础上的一种泛化,允许 AI 大模型开启多个推理步骤并最终自我评估。
未来
提示工程 ( Prompt Engineering ) 是一项正在不断发展的技术,未来也会遇到一些挑战。
但我认为最大的挑战是:知道求助 AI 来解决问题的人很多,但会问问题的人不多。
——你希望普通人思维清晰的思考,精确具体的表达,甚至能引导 AI 大模型思考,这是最大的挑战。
AI 大模型的出现,在一些方面缩短了我们解决问题的路径,但,
复杂性从来不会消失,它会从一个地方,转移到另一个地方。