虽然基础提示可以从大型语言模型(LLM)那里获得一般性回复,但构建可靠的应用常常需要更精确的控制。简单地让LLM“撰写关于主题X的内容”可能会在长度、侧重和格式上产生不同的结果。指令遵循提示通过向模型提供明确、详细的指令来解决这个问题,说明其需要执行的任务。将其视为下达命令或提供一套具体要求,而非仅仅是提出问题。有效的指令遵循取决于清晰和具体。目的是尽可能减少关于你期望LLM做什么的不确定性。与主要依赖示例的少样本提示不同,指令遵循侧重于命令本身。指令遵循提示的组成部分精心设计的指令通常包含以下几个部分:清晰的动作动词: 以直接的动词开头,定义主要任务。例如:“总结”、“翻译”、“提取”、“生成”、“重写”、“分类”、“比较”、“解释”主题/输入规定: 明确说明LLM应处理的内容。这可以是直接在提示中提供的文本,对某种输入类型的引用,或之前给出的语境。限制和要求: 定义任务的界限和规则。此处增加精确度。示例:长度限制:“不超过100字”、“作为单个段落”、“精确为三个要点。”内容限制:“侧重技术方面”、“提及优缺点”、“排除任何价格信息。”风格/语气限制:“采用正式语气”、“使用适合十年级学生的简单语言”、“以专家视角撰写。”输出格式规定: 明确说明输出应如何组织。例如:“将输出作为带有‘name’和‘summary’键的JSON对象提供”、“将结果格式化为Markdown表格”、“用逗号分隔各项。”负面限制(可选): 有时,明确LLM不应做什么会很有帮助。示例:“不要包含你自己的观点”、“避免使用过于专业的术语”、“不要添加任何引言或结语。”示例:从模糊到具体让我们看看添加清晰指令如何改善提示:示例1:总结模糊提示: 总结这段文本:[长文章文本]指令遵循提示:将以下文本精确总结为两句话,侧重于作者提出的主要结论。不要包含文本中提及的示例。 文本:[长文章文本]示例2:信息提取模糊提示: 从这封邮件中找出重要内容:[邮件文本]指令遵循提示:从以下邮件文本中提取发件人姓名、会议日期和会议时间。将输出格式化为JSON对象,键为"sender_name"、"meeting_date"和"meeting_time"。如果任何信息缺失,则使用null作为其值。 邮件文本:[邮件文本]示例3:代码生成模糊提示: 编写读取文件的Python代码。指令遵循提示:生成一个名为`read_text_file`的Python函数,它接受一个参数:`file_path`(一个字符串)。 该函数应: 1. 以读取模式打开由`file_path`指定的文件。 2. 读取文件的全部内容。 3. 通过在文件不存在时返回None来处理可能的`FileNotFoundError`异常。 4. 如果成功,将文件内容作为单个字符串返回。 包含一个文档字符串,解释函数的功能、其参数以及返回值。不要在函数定义之外包含任何示例使用代码。有效指令设计的建议明确无误: 将你的指令当作你对任务一无所知来阅读。它们是否可能被误解?使用面向行动的语言: 指令以强有力的动词开头。组织复杂指令: 对于有多步或多重限制的任务,在提示中使用项目符号或编号列表来清晰分隔指令。优先考虑清晰度: 使用简单、直接的语言。避免行话,除非任务特别需要(并且LLM预期能够理解)。迭代和优化: 你第一次尝试的指令可能不完美。测试提示,观察输出,并根据结果优化指令。这种迭代过程是提示工程的重要组成部分(我们将在第3章进一步讨论)。何时使用指令遵循指令遵循在以下情况中特别有用:任务复杂或有多个要求时。在应用程序中,下游处理需要特定输出格式时。你需要比仅通过角色提示更精确地控制回复的语气、风格或人设时。你需要引导LLM通过特定的步骤序列时(尽管思维链提示,稍后会讲到,擅长推理步骤)。虽然零样本和少样本提示适用于较简单的任务或演示模式已足够的情况,但指令遵循提供了一种更直接、可控的机制,用于在复杂应用中引导LLM的行为。它构成提示工程师工具包的重要部分,以获得可靠且可预期的结果。