理解提示工程与 AI 对话

如果我们想知道什么是提示工程,想象一下我们有一个超级聪明的助手,但这个助手需要非常明确的指示才能做我们想做的事情。这有点像使用大型语言模型(LLM),这是许多 AI 工具背后的技术。

提示工程基本上是给这些LLM正确的指示或提示的艺术和科学,这样他们就能理解我们需要什么,并给我们准确和有用的结果。

可以把提示想象成我们给 LLM 的输入,比如一个问题或一个请求。任何人都可以写提示,就像我们可以向朋友提问一样。然而,精心制作最好的提示,一个真正让LLM理解并传达我们想要的东西的提示,可能会更复杂一些。如果我们的提示不清楚,LLM可能会给我们模糊、错误或没有意义的答案。这就是为什么提示工程是一个迭代的过程,我们可能需要尝试不同的方式来表达我们的请求,以获得最好的结果。

不同的提问方式:提示技巧

让我们探索各种提示技巧,以帮助我们从LLM中获得更好的结果。这里有一些关键的提示技巧:

  • General/Zero-Shot Prompting(一般/零样本提示):这是最简单的形式,我们只需要给 LLM 一个任务描述,而不需要任何示例。例如,我们可以直接问,“把这篇电影评论分为正面或负面:‘这部电影太棒了!’”。
One-Shot & Few-Shot Prompting(一个/少样本提示):当zero-shot不够时,我们可以在提示中提供示例。one-shot提示有一个例子,而few-shot有几个例子。这些示例向 LLM 展示了我们正在寻找的输出类型,并帮助它遵循特定的模式。我们需要的示例数量取决于任务的复杂程度。
few_shot_prompt ="""对电影评论进行分类,返回有效的JSON格式:
实例:
这部电影真好看。
JSON 响应: ```
{
"sentiment": "positive"
}
```
实例:
剧情真烂。
JSON 响应: 
```
{
"sentiment": "negative"
}
```
REVIEW:
"""
REVIEW =”这部电影太棒了!”
  • 系统、上下文和角色提示:这些技术以不同的方式帮助指导LLM:
    - 系统提示设置总体基调和目的。例如,我们可以这样开始:“你是一个有用的助手。
    - 上下文提示提供了与当前任务相关的特定背景信息。例如,“你正在写一篇关于旅行经历的博客。”
    - 角色提示告诉LLM扮演一个特定的角色或专家。我们可能会说,“扮演代码审稿人”。
  • 后退式提示:为了解决复杂的问题,这种技巧包括在提出具体任务之前,先问LLM一个一般性的、相关的问题,以激活其更广泛的知识。
    - 后退式提示:
写一篇技术博客,那么对读者来说容易理解和吸引人的五个关键原则是什么?

  • 前进式提示:
上下文:撰写吸引读者的技术博客的5 个关键原则:
- 使用类比和隐喻
- 避免行话或简单地解释
- 逐步分解概念
- 添加视觉效果或具体示例
- 保持语气友好和好奇
基于上述原则,写一篇博客文章,向读者介绍深度学习的概念。
  • 思维链(CoT)提示:通过提示LLM一步一步地解释自己的想法,帮助LLM进行推理。这可以显著提高需要逻辑的任务的准确性。
小明4 岁的时候,小华的年龄是小明年龄的 3 倍。现在
,小明20 岁了。小华多大了?让我们一步一步来想。
  • 自洽性(self-consistency):为了获得推理任务更可靠的答案,这种方法涉及使用 CoT 方法多次询问 LLM,通常使用不同的温度,然后选择最常见的答案。
  • ReAct (Reason & Act):这项强大的技术使LLM不仅可以推理,还可以与外部工具(如搜索引擎或代码解释器)进行交互,以收集更多信息并解决任务。
model_instructions ="""
用思考、行动、观察的交错步骤解决一个问答任务
。思考可以对当前情况进行推理
,观察是从行动的输出中理解相关信息,行动可以是三种类型之一:(
(1)<search>entity</search>,它在 Wikipedia 上搜索确切的实体
,如果存在则返回第一段。如果不存在,它会返回一些类似的实体供搜索,我们可以尝试从这些主题中搜索信息。
(2)<lookup>keyword</lookup>,返回当前上下文中下一个包含关键字的句子。这只做精确匹配,所以我们的搜索要简短。
<finish>answer</finish>,返回答案并完成任务。 
"""
example ="""问题
澳大利亚的首都是什么?
思考 1
这是一个简单的事实性问题。我只需要搜索一下澳大利亚的首都。
行动 1
<search>澳大利亚首都</search>
观察 1
堪培拉是澳大利亚的首都。它位于澳大利亚首都直辖区,被选为悉尼和墨尔本之间的折衷。 
思考2
这个观察清楚地表明堪培拉是首都。
动作 2
<完成>堪培拉</完成>
"""
    • 自动提示工程(APE):探索使用 AI 自动生成和评估不同的提示,以找到最有效的提示。
      我们正在训练一个语音助手来处理调度请求。生成用户可能会说的 10 种不同方式:
“安排周五上午 10 点的公司董事会。”
意思应该保持不变,但词和措辞可以有所不同。
    • 代码提示:LLM也可以用来处理代码,帮助编写、解释、翻译、调试和审查各种编程语言的代码。多模态提示是一个相关但独立的领域,我们可以使用不同类型的输入(如文本和图像)来指导 LLM。
编写一个Python 脚本,向用户询问 CSV 文件的名称和列名
。脚本应该读取 CSV 文件,计算指定列中值的最大值,并打印结果。
假设该列只包含数值。

    • 写好提示的最佳实践
      让我们来看一组最佳实践,帮助我们成为一个更好的提示工程师:
    • 尽可能在我们的提示中提供例子(一个或多个)。
    • 让我们的提示简单、清晰、容易理解。避免使用复杂的语言和不必要的信息。
    • 明确我们想要的输出。我们提供的细节越多,LLM 就越能集中注意力。
    • 多使用指令而不是约束。告诉模型该做什么,而不是不该做什么,因为积极的指示往往更有效。
    • 使用token限制控制输出的最大长度,或者在提示符中明确要求一定的长度。
    • 在提示符中使用变量,使其可重用且更具动态性。
    • 尝试不同的输入格式和写作风格,看看哪种效果最好。
    • 对于带有分类任务的少量提示,混合示例中的类,以避免使模型产生偏差。
    • 当模型更新时,调整提示以利用新特性。
    • 在数据提取等任务中尝试使用 JSONXML 等结构化输出格式,以获得更一致和更容易解析的结果。
    • 详细记录我们所有的提示尝试,包括提示本身、使用的模型、配置和输出,以学习和跟踪我们的进度。
      额外提示:配置 LLM 的输出(在代码中)
      如果我们正在使用 LLM API,我们也可以配置它如何生成输出。这其中有两个重要的方面:
    • 输出长度:意思是,LLM 的响应应该有多长,通过对它可以生成的token(类似于单词片段)的数量设置限制。这可能很重要,因为生成更多的输出会使用更多的算力,并且可能需要更长的时间,所以需要注意这一点。然而,使用这种做法仅仅意味着当它达到极限时它就会停止。
    • 采抽控制:llm 不只是选择一个单词,他们预测许多可能的单词的概率。像温度、top-K 和top-P 这样的采样控制可以让我们影响 LLM 如何选择接下来使用哪个单词,从而影响输出的随机或集中程度。

- 温度控制随机性。低温使 LLM 更有可能选择最可预测的单词,从而产生更集中和确定性的反应(比如当我们需要一个事实答案时)。较高的温度使其更具冒险性,给出更多样化和创造性(但有时不太相关)的结果。

- Top-K 和 top-P 是将下一个单词的选择限制在最可能的单词上的方法。较低的 top-K 或top-P 使输出更集中,而较高的值允许更多的变化。

选择这些设置的正确组合取决于我们想要达到的目标。有时,一个控制的极端设置甚至可以覆盖掉其他控制。

结论

总之,提示工程是有效使用大型语言模型必须学习的技能。理解不同的提示技术,配置 LLM 的输出,并遵循最佳实践,可以帮助我们显著提高 AI 响应的准确性和有用性。请记住,这通常是一个反复试验和改进的过程,所以不要害怕尝试不同的方法来获得我们需要的结果。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐