菜单

Prompt 工程基础

相关源文件

Prompt Engineering 是设计和优化文本输入(提示)以有效与大型语言模型(LLM)进行通信的过程。本文档将解释 Prompt Engineering 的核心概念、技术和最佳实践,以帮助您创建更有效的提示,从而从 LLM 中获得一致且高质量的响应。有关高级提示技术,请参阅 高级提示技术

目的与范围

本文档涵盖:

  • 什么是 Prompt Engineering 以及为什么它很重要
  • 核心概念,包括分词和模型类型
  • 如何构建有效的提示
  • Prompt Engineering 的最佳实践和基本技术
  • 这些概念如何在实际应用中得到应用

什么是 Prompt Engineering?

Prompt Engineering 是设计和优化文本输入(提示)的过程,以针对给定的应用程序目标和模型提供一致且高质量的响应。这包括提示的初始设计及其迭代优化以提高响应质量。

来源: 04-prompt-engineering-fundamentals/README.md68-76

核心概念

要理解 Prompt Engineering 为何重要,我们需要先理解以下基本概念

  1. 分词 (Tokenization):模型如何处理和解释文本输入
  2. 基础模型 (Foundation Models):基础模型如何处理文本
  3. 指令调优 LLM (Instruction-Tuned LLMs):模型如何进行微调以理解任务

分词

LLM 不直接处理原始文本——它们将文本转换为一系列 token。不同的模型以不同的方式对文本进行分词,这会影响它们如何解释和响应提示。

来源: 04-prompt-engineering-fundamentals/README.md82-92

基础模型 vs 指令调优 LLM

基础模型(基础 LLM):

  • 训练用于预测序列中的下一个 token
  • 理解 token 之间的统计关系
  • 不理解提示的含义或上下文
  • 完成在训练数据中见过的模式

指令调优 LLM:

  • 基于基础模型,但使用示例进行微调
  • 使用 RLHF(人类反馈强化学习)进行训练,以遵循指令
  • 更擅长理解和执行特定任务
  • 可以解释更复杂的提示

来源: 04-prompt-engineering-fundamentals/README.md91-112

Prompt Engineering 为何重要

Prompt Engineering 解决了当前 LLM 中固有的几个挑战

  1. 模型随机性 (Model Stochasticity):即使是相同的模型,相同的提示也可能产生不同的响应
  2. 捏造 (Fabrications):模型在缺乏知识时可能会生成不准确或虚构的信息
  3. 模型能力差异 (Varying Model Capabilities):不同的模型具有不同的优势和局限性

Prompt Engineering 技术有助于最大限度地减少这些问题,并产生更可靠、更一致的结果。

来源: 04-prompt-engineering-fundamentals/README.md114-128

Prompt Construction

有效的提示可以从简单的文本输入到复杂的结构化指令。理解提示的组成部分和结构对于创建与 LLM 的有效交互至关重要。

来源: 04-prompt-engineering-fundamentals/README.md186-248

基本提示 (Basic Prompt)

基本提示只是发送给模型的文本,没有额外的上下文。模型会根据其训练情况尝试完成或响应此文本。

示例

Oh say can you see

来源: 04-prompt-engineering-fundamentals/README.md192-197

复杂提示 (Complex Prompt)

复杂提示包含额外的上下文和结构,通常以角色定义的对话形式出现

{
  "model": "gpt-3.5-turbo",
  "messages": [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Who won the world series in 2020?"},
    {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
    {"role": "user", "content": "Where was it played?"}
  ]
}

来源: 04-prompt-engineering-fundamentals/README.md198-217

指令提示 (Instruction Prompt)

指令提示明确告诉模型该做什么。它们可以从简单到复杂

复杂性示例提示
简单"写一篇关于内战的描述"
复杂"写一篇关于内战的描述。提供关键日期和事件,并描述其重要性"
格式化"用一段话描述内战。提供 3 个项目符号点,包含关键日期及其重要性。再提供 3 个项目符号点,包含关键历史人物及其贡献。将输出返回为 JSON 文件"

来源: 04-prompt-engineering-fundamentals/README.md219-228

主要内容技巧

主要内容是您提示的主要内容。有几种有效的技巧可以用来构建此内容

使用示例(少样本提示)(Using Examples (Few-shot Prompting))

这种方法提供了所需输出的示例,以帮助模型理解模式

"The Sun is Shining" => "El Sol está brillando".
"It's a Cold and Windy Day" =>

模型从示例中学习并继续该模式,提供翻译。

来源: 04-prompt-engineering-fundamentals/README.md251-266

提示词(Prompt Cues)

提示词为模型提供了一个起点,以按特定方向继续

Jupiter is the fifth planet from the Sun and the largest in the Solar System.
**Summarize This**
Top 3 Facts We Learned:

模型将遵循“前 3 个事实”的提示词格式。

来源: 04-prompt-engineering-fundamentals/README.md268-279

提示模板

模板是可重用的提示模式,其中包含可根据具体用例进行自定义的占位符

{
  "role": "system",
  "content": "You are an {{expert_type}} expert specialized in {{domain}}."
},
{
  "role": "user",
  "content": "Help me with {{specific_request}} related to {{topic}}."
}

来源: 04-prompt-engineering-fundamentals/README.md281-287

辅助内容 (Supporting Content)

辅助内容提供了影响模型处理主要内容的其他上下文。这可以包括元数据、格式化说明或特定领域的专有信息,有助于定制响应。

来源: 04-prompt-engineering-fundamentals/README.md289-301

Prompt Engineering 最佳实践

有效的 Prompt Engineering 需要正确的思维方式和成熟技术的应用。

来源: 04-prompt-engineering-fundamentals/README.md313-326

Prompt Engineering 思维方式

  1. 领域理解很重要:定制技术以反映您的特定行业或用例
  2. 模型理解很重要:不同的模型具有不同的能力和局限性
  3. 迭代和验证很重要:创建提示模板知识库并持续改进它们

来源: 04-prompt-engineering-fundamentals/README.md318-326

技术最佳实践

实践为什么很重要
评估最新模型较新的模型通常具有改进的功能,但成本可能更高
分离指令和上下文使用分隔符帮助模型区分提示的不同部分
具体和清晰详细说明所需的上下文、结果、格式和风格
使用示例展示,而不仅仅是告知——示例可以阐明您的期望
提供提示词给模型一个起点,以引导它走向期望的输出格式
考虑信息顺序提示中信息的顺序会影响结果
提供备用方案当模型无法回答时,给模型一个备用的响应选项

来源: 04-prompt-engineering-fundamentals/README.md328-342

温度控制和输出变化

“温度”(temperature)参数控制模型响应的确定性或创造性程度

  • 较低温度 (0-0.3):更聚焦、更确定的响应
  • 中等温度 (0.3-0.7):平衡的创造性和专注度
  • 较高温度 (0.7-1.0):更具创造性、更多样化的响应

何时使用不同温度

  • 对于事实性响应、代码生成或需要关键一致性的情况,请使用低温度
  • 对于具有一定创造性的通用内容创建,请使用中等温度
  • 对于头脑风暴、创意写作或生成各种选项,请使用高温度

来源: 05-advanced-prompts/translations/ja-jp/README.md430-552

使用 OpenAI API 实现

OpenAI API 提供了一种在应用程序中实现 Prompt Engineering 技术的直接方法

来源: 04-prompt-engineering-fundamentals/README.md207-217

案例研究:GitHub Copilot

GitHub Copilot 展示了 Prompt Engineering 技术如何在实际应用中得到应用。这位人工智能结对程序员能在开发环境中将自然语言提示转换为代码补全。

GitHub Copilot 演进的关键学习点

  • 为特定领域(代码生成)微调模型的重要性
  • 持续改进提示技术的需求
  • Prompt Engineering 在提高代码质量方面的价值
  • 模型能力与实际应用之间的平衡

来源: 04-prompt-engineering-fundamentals/README.md157-173

提示工程的挑战与缓解措施

提示工程常见的挑战包括

  1. 虚构(幻觉):模型生成事实不正确的信息

    • 缓解措施:使用事实核查、引用和知识检索技术
  2. 结果不一致:大型语言模型的随机性可能导致输出不一

    • 缓解措施:降低温度设置、标准化模板和更具体的指令
  3. 上下文窗口限制:提示上下文的空间有限

    • 缓解措施:分块处理大型上下文、摘要和聚焦于相关信息

来源: 04-prompt-engineering-fundamentals/README.md138-153 11-integrating-with-function-calling/translations/ja-jp/README.md177-180

总结

提示工程是有效使用大型语言模型的关键技能。通过理解核心概念并应用最佳实践,您可以显著提高大型语言模型响应的质量、一致性和相关性,从而更好地服务于您的应用程序。随着模型不断改进和新技术的涌现,这一领域也在持续发展。

要点

  • 了解分词和不同模型类型如何影响提示处理
  • 使用清晰的指令和相关上下文来构建提示
  • 使用示例、线索和模板来指导模型输出
  • 应用最佳实践并持续优化您的方法
  • 考虑模型局限性并实施适当的缓解措施