上下文工程中提示词编写的原则和技巧
摘要自anthropic:Effective context engineering for AI agents
引言:从单一提示到上下文状态管理
在构建复杂的 AI 智能体(Agent)时,我们关注的焦点已不再仅仅是如何写出“魔法”般的提示词(Prompt)。大型语言模型(LLM)的推理过程是一个多轮、动态的状态管理过程。因此,我们需要从“提示工程”(Prompt Engineering)迈向上下文工程(Context Engineering)。
提示工程侧重于如何编写和组织 LLM 指令以获得最佳结果。而上下文工程,作为提示工程的自然演进,则关注于在 LLM 推理过程中策划和维护最优的代币集合(信息)的整套策略。系统提示(System Prompts)是 Agent 初始、静态上下文的核心组成部分,其编写质量直接决定了 Agent 的初始效用和指导方向。
有效的上下文工程要求我们“在上下文中思考”(thinking in context),即如何利用有限的上下文窗口,找到最小可能集合的高信号代币,最大限度地提高所需结果的可能性。
一、提示词编写的核心原则:清晰性与极简主义
上下文(Context)是 Agent 的有限资源,因为它受到 LLM 的注意力预算(attention budget)和上下文衰减(context rot)等架构约束。因此,对系统提示的要求是高效且紧凑。
1. 极度清晰和直接的语言
系统提示应该极其清晰(extremely clear),并使用简单、直接的语言来呈现 Agent 的指导信息。
2. 追求最小化信息集合
无论您如何组织系统提示,都应该努力实现信息的最小化集合,这个集合必须充分概述您期望的 Agent 行为。
请注意,这里的“最小化”(minimal)不一定意味着简短。您仍然需要预先为 Agent 提供足够的信息,以确保它能够坚持您期望的行为。我们的总体指导原则是深思熟虑,并保持上下文内容丰富,但同时又紧凑(informative, yet tight)。
最佳实践:最好从一个最小化的提示开始测试,并使用可用的最佳模型来观察其在任务上的表现。然后,根据在初始测试中发现的失败模式,迭代性地添加清晰的指令和示例来改进性能。
二、关键技巧:定位“正确的高度”(The Right Altitude)
“正确的高度”是 Agent 开发者在编写提示时需要掌握的“金发姑娘区”(Goldilocks zone)。它要求我们在两种常见的失败模式之间取得平衡:
失败模式一:过于僵化(硬编码的复杂逻辑)
- 特点: 工程师试图在提示中硬编码复杂、脆弱的逻辑,以引发精确的 Agent 行为。
- 后果: 这种方法会随着时间的推移,增加系统的脆弱性和维护的复杂性。
- 示例(避免): 像“如果工具 A 返回了 HTTP 404 错误,并且用户在过去 5 分钟内没有提及‘重试’,那么你必须调用工具 B,且将
query参数设置为用户消息的前 10 个词,除非用户消息包含 URL”——这种脆弱的 If-Else 逻辑应该被避免。
失败模式二:过于笼统(模糊的指导)
- 特点: 工程师提供模糊、高层的指导,未能为 LLM 提供具体的信号以指导期望的输出,或者错误地假设 Agent 具有共享的上下文。
- 后果: Agent 可能会偏离目标,无法做出有效的、符合预期的行动。
- 示例(避免): 像“做一名优秀的助手,帮助用户解决问题”——这种提示过于笼统,难以有效指导行为。
“正确的高度”的提示词
最优的高度是:足够具体以有效地指导行为,但同时要足够灵活,为模型提供强大的启发式方法来引导行为。
示例(理想的系统提示片段):
Agent 角色与目标:
“你是一名专业的技术文档分析师。你的首要目标是准确回答用户关于文档库的查询。你必须始终使用search_documents工具来获取最新的信息。如果信息来源不确定,你必须明确告知用户信息不足。”约束与输出格式:
“在回答之前,你必须在内部推理步骤中指出你使用的工具和检索到的信息。最终回答必须简洁,并且仅包含来自工具结果的信息。”
三、结构化提示:利用标记增强 Agent 可读性
为了避免提示内容混杂,提高 Agent 的理解效率,建议将提示组织成不同的部分(distinct sections)。
技巧:使用 XML 标签或 Markdown 标题进行划分
建议使用技术,如 XML 标签或 Markdown 标题来划分这些部分。这种结构化方法使得 LLM 能够更好地识别不同类型的信息,即使模型能力不断提升,这种清晰的划分仍是良好实践。
| 部分名称 | 标记示例 | 目的 |
|---|---|---|
| 背景信息 | <background_information> |
设定 Agent 的专业领域或限制条件。 |
| 指令 | <instructions> |
明确 Agent 必须遵循的步骤或行动规则。 |
| 工具指导 | ## Tool guidance |
描述工具的使用方式、时机和优先级。 |
| 输出描述 | ## Output description |
明确最终输出的格式要求(如 JSON、Markdown)。 |
四、少样本提示(Few-shot Prompting)的精心策展
提供示例(即少样本提示)是 Agent 开发中持续强烈建议的最佳实践。示例是 Agent 预期行为的视觉蓝图,对于 LLM 而言,示例有极大引导作用。
策展要点:
- 避免堆砌边缘案例: 不要试图将一大堆边缘案例清单塞入提示中,试图囊括 Agent 可能需要遵循的每一条规则。
- 提供规范化示例: 应该努力策划一组多样化、规范化的示例,以有效地描绘 Agent 的预期行为。这些示例应展示核心功能、正确的工具使用流程以及预期的响应风格。
通过以上这些技巧,Agent 开发者能够确保他们的系统提示在上下文工程的框架下,既能提供有效的指导信号,又能尊重 LLM 有限的注意力预算,从而构建出更可靠、高效的 Agent。
上下文工程中提示词编写的原则和技巧
