Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Prompt Engineering

提示工程通过设计提供给 AI 模型的指令、上下文和示例来引导模型输出,无需重新训练,适用范围从 LLM 到视觉模型。

提示工程是设计生成式模型输入的实践,内容包括指令、上下文、示例和所需的输出格式,以引导模型的生成结果,而不改变模型的权重。它随着 GPT-3的出现而兴起:Language Models are Few-Shot Learners(2020)一文中,OpenAI 展示了一个拥有 1750 亿参数的模型如何在无需任何梯度更新的情况下执行新任务,只要提示描述了任务并提供少量示例;论文将这种能力称为上下文学习。如今,提示是控制大型语言模型(LLM)、视觉语言模型(VLM)、文本生成图像模型和可提示视觉模型的主要方式。

核心技术#

  • 指令和角色:系统提示会设定模型的角色、规则和目标受众;标题或 XML 风格标签等分隔符则将指令与待处理数据分开。
  • 少样本示例:成对展示输入和输出的示例,比文字描述更清楚地说明任务和答案格式。不含示例的提示称为零样本提示。
  • 输出格式:提示会指定输出格式,例如列表或包含指定键的 JSON。当代码必须解析结果时,结构化输出会在解码期间强制遵循模式,而不是仅仅依赖请求。
  • 思维链提示:要求模型在给出答案前提供中间推理步骤,这能提高模型解决多步问题的准确性。
  • 提示链:将复杂任务拆分成多个提示,每个提示只负责一项范围明确的任务,并由代码将它们连接起来。
  • 检索上下文:插入通过搜索找到的文档或数据,让模型根据提供的事实而非记忆作答。

提供事实可以减少幻觉,而事实的位置也很重要:Lost in the Middle研究发现,对于较长的上下文窗口,模型在信息位于开头或结尾时利用效果最好,信息埋在中间时效果最差。

在从未经过指令微调的基础模型上,示例的效果最容易观察。下面的代码片段使用 Hugging Face Transformers 加载 GPT-2,并分别在有三个示例和没有示例的情况下向它提供相同指令:

from transformers import AutoModelForCausalLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")

# The same instruction, without and with three worked examples that show the answer format
instruction = "Convert each country to its capital city.\n"
prompts = {
    "zero-shot": instruction + "Italy:",
    "few-shot": instruction + "France: Paris\nJapan: Tokyo\nCanada: Ottawa\nItaly:",
}

for name, prompt in prompts.items():
    inputs = tokenizer(prompt, return_tensors="pt")
    output = model.generate(**inputs, max_new_tokens=4, do_sample=False, pad_token_id=tokenizer.eos_token_id)
    completion = tokenizer.decode(output[0, inputs.input_ids.shape[1] :])
    print(f"{name}: {completion!r}")

它会打印zero-shot: '\n\nItaly is'和few-shot: ' Rome\nSpain:'。单独提供指令时,GPT-2 会写一段关于意大利的文字;加入三个示例后,它就会按预期格式回答“Rome”,并按模式继续回答下一个国家。

提示设计需要实证验证#

措辞或布局的细微变化就可能显著影响结果。Melanie Sclar 及其同事测得,仅格式变化(例如分隔符、大小写和间距)就能让 LLaMA-2-13B 的准确率相差多达 76 个百分点;即使使用更大的模型、更多示例并进行指令微调,这种敏感性依然存在。因此,提示的开发方式应像代码一样:针对一组固定且已有正确输出的输入进行测试,根据失败案例修订并进行版本管理;这也是 LLMOps中的常规工作。

这个迭代过程可以自动化。Yongchao Zhou 及其同事提出的自动提示工程师(APE)会让 LLM 提出候选指令,并保留在示例上得分最高的指令;在 Large Language Models Are Human-Level Prompt Engineers中,他们发现 APE 在 24 项任务中的 19 项上,其指令效果与人工编写的指令持平或更好。

视觉模型的提示#

在计算机视觉中,提示有多种形式。像 Stable Diffusion这样的文生图生成器会根据主体、风格、光线和构图的描述,以及列出需避免内容的负向提示进行响应。可提示分割模型接受点和框等视觉提示;Meta 的 SAM 3还接受简短名词短语,并分割所有被提及概念的实例,Ultralytics Platform 会用它进行文本提示自动标注。

开放词汇检测器会将类别名称转换为提示。Ultralytics YOLOE可以检测和分割set_classes()所命名的任意类别,例如“forklift”或“double-decker bus”;它通过将区域特征与这些名称的文本嵌入进行比较来完成这一操作,因此措辞会直接影响模型找到的内容。由于匹配依据是外观,依赖状态、位置或比较的提示(例如“damaged”“left-most”或“the one being carried”)没有可靠的视觉特征可供匹配;与日常类别接近的名称效果最好。

  • 提示调优:通过在带标签的数据上进行梯度下降来学习连续提示向量。提示工程则是用自然语言手动编写提示。
  • 微调:通过在带标签的数据集上训练来改变模型权重。提示工程不会改变模型,而是在推理时发挥作用。
  • 上下文工程:涵盖应用中进入模型上下文的所有内容,包括检索到的文档、工具结果和记忆。提示工程则专注于编写指令和示例。
  • 提示注入:一种在模型读取的文本或图像中隐藏指令的攻击,使这些指令覆盖开发者的提示。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来