【AI翻译】上下文工程指南(Context Engineering Guide )
原文: https://docs.google.com/document/d/1JU8w-E4LlseFZm-ag22GSBU5A2rp2nb7iFGBNAbFL7k/mobilebasic
上下文工程指南
由 DAIR.AI 学院提供
目录
- 什么是上下文工程?
- 上下文工程实践
- 系统提示
- 指令
- 用户输入
- 结构化输入与输出
- 工具调用
- RAG 与内存
- 状态与历史上下文
- 高级上下文工程
- 资源
什么是上下文工程?
上下文工程是一种优化指令和相关上下文的过程,以确保大语言模型(LLM)及高级AI模型能够有效执行任务。近年来,随着提示工程的重要性不断提升,它逐渐被重新定义为上下文工程。这一术语更全面地描述了提示工程及相关任务的复杂性。
上下文工程不仅限于精心设计单个提示词,而是涉及构建动态系统,为模型提供正确的信息、工具和格式,以完成特定任务。这包括:
- 设计和管理提示链
- 优化系统提示/指令
- 处理动态提示元素(如用户输入、日期/时间)
- 搜索和准备相关知识(即检索增强生成,RAG)
- 查询增强
- 工具定义和指令(在代理系统的情况下)
- 准备和优化少样本示例
- 结构化输入和输出(如分隔符、JSON模式)
- 短期内存(管理状态/历史上下文)和长期内存(如从向量存储中检索相关知识)
上下文工程的目标是优化模型上下文窗口中的信息,同时过滤掉无关或噪声信息。这一过程需要系统的性能测量和迭代优化。
上下文工程实践
以下通过一个具体的多代理深度研究应用示例,展示上下文工程在构建AI代理工作流中的实际应用。
系统提示
系统提示为代理提供了明确的任务定义和期望输出格式。以下是一个为“搜索规划代理”设计的系统提示示例:
你是一名专业的搜索规划者。你的任务是将复杂的搜索查询(由<user_query></user_query>分隔)分解为具体的搜索子任务,每个子任务聚焦于主题的不同方面或来源类型。
当前日期和时间是:{{ $now.toISO() }}
每个子任务需提供以下信息:
1. 子任务的唯一字符串ID(如“subtask_1”、“news_update”)
2. 专注于主查询某一方面的具体搜索查询
3. 搜索的来源类型(web、news、academic、specialized)
4. 时间范围相关性(today、last week、recent、past_year、all_time)
5. 适用的领域焦点(technology、science、health等)
6. 优先级(1为最高,5为最低)
所有字段(id、query、source_type、time_period、domain_focus、priority)为每个子任务所必需,除非time_period和domain_focus不适用时可为null。
创建2个子任务,共同覆盖主题的全面内容,聚焦于不同的方面、视角或信息来源。
每个子任务包含以下信息:
id: str
query: str
source_type: str # 例如“web”、“news”、“academic”、“specialized”
time_period: Optional[str] = None # 例如“today”、“last week”、“recent”、“past_year”、“all_time”
domain_focus: Optional[str] = None # 例如“technology”、“science”、“health”
priority: int # 1(最高)到5(最低)
在获取上述子任务信息后,添加两个额外字段:start_date和end_date。根据当前日期和所选时间范围推断这些信息,格式如下:
"start_date": "2024-06-03T06:00:00.000Z",
"end_date": "2024-06-11T05:59:59.999Z",
此提示为代理提供了清晰的任务范围、输出结构和动态上下文(如当前日期),以确保生成一致且有用的子任务。
指令
指令是系统提示中的高层指导,明确告知模型需要完成的任务。例如:
你是一名专业的搜索规划者。你的任务是将复杂的搜索查询(由<user_query></user_query>分隔)分解为具体的搜索子任务,每个子任务聚焦于主题的不同方面或来源类型。
此指令为代理设定了角色和目标,但仅靠它不足以确保任务成功。上下文工程需要更详细的上下文来支持模型。
用户输入
用户输入是触发代理任务的查询。例如:
<user_query> OpenAI的最新开发者新闻是什么? </user_query>
使用分隔符(如<user_query>
)可以明确区分用户输入和指令,避免混淆。这种结构化方法是上下文工程的重要部分。
结构化输入与输出
为了确保代理生成一致的子任务,提示中详细定义了子任务的字段和格式:
每个子任务需提供:
1. 唯一字符串ID(如“subtask_1”、“news_update”)
2. 专注于主查询某一方面的具体搜索查询
3. 搜索的来源类型(web、news、academic、specialized)
4. 时间范围相关性(today、last week、recent、past_year、all_time)
5. 适用的领域焦点(technology、science、health等)
6. 优先级(1为最高,5为最低)
此外,提供了一个JSON示例来指导输出结构:
{
"subtasks": [
{
"id": "openai_latest_news",
"query": "OpenAI最新公告和新闻",
"source_type": "news",
"time_period": "recent",
"domain_focus": "technology",
"priority": 1,
"start_date": "2025-06-03T06:00:00.000Z",
"end_date": "2025-06-11T05:59:59.999Z"
},
{
"id": "openai_official_blog",
"query": "OpenAI官方博客近期文章",
"source_type": "web",
"time_period": "recent",
"domain_focus": "technology",
"priority": 2,
"start_date": "2025-06-03T06:00:00.000Z",
"end_date": "2025-06-11T05:59:59.999Z"
}
]
}
通过工具(如n8n的输出解析器),可以自动生成结构化输出,确保一致性:
[
{
"action": "parse",
"response": {
"output": {
"subtasks": [
{
"id": "subtask_1",
"query": "OpenAI最近的公告或新闻或更新",
"source_type": "news",
"time_period": "recent",
"domain_focus": "technology",
"priority": 1,
"start_date": "2025-06-24T16:35:26.901Z",
"end_date": "2025-07-01T16:35:26.901Z"
},
{
"id": "subtask_2",
"query": "OpenAI官方博客或新闻发布",
"source_type": "web",
"time_period": "recent",
"domain_focus": "technology",
"priority": 1.2,
"start_date": "2025-06-24T16:35:26.901Z",
"end_date": "2025-07-01T16:35:26.901Z"
}
]
}
}
}
]
结构化输入和输出是上下文工程的核心,确保模型的输出符合预期并易于下游处理。
工具调用
在示例中,动态上下文(如当前日期和时间)通过工具调用提供:
当前日期和时间是:{{ $now.toISO() }}
这允许代理根据查询需求动态调整上下文,例如推断日期范围:
在获取上述子任务信息后,添加两个额外字段:start_date和end_date。根据当前日期和所选时间范围推断这些信息,格式如下:
"start_date": "2024-06-03T06:00:00.000Z",
"end_date": "2024-06-11T05:59:59.999Z",
工具调用使代理能够访问外部数据(如日期或检索工具),从而增强上下文的动态性和准确性。
RAG 与内存
虽然此版本的深度研究应用未使用短期内存,但通过缓存子查询到向量存储中,可以优化性能。如果用户提交了类似查询,可以从向量存储中检索现有子任务,避免重复生成。这降低了延迟和成本,是上下文工程中动态性和效率的体现。
长期内存(如用户偏好或历史交互)也可以通过检索工具动态加载到上下文窗口中,进一步优化代理性能。
状态与历史上下文
在更复杂的场景中,代理可能需要访问先前状态或历史上下文。例如,在修订阶段,代理可能需要回顾子任务、修订历史或先前代理的输出。这种上下文管理需要仔细设计,以确保仅提供相关信息,避免上下文窗口过载。
高级上下文工程 [进行中]
上下文工程还包括以下未在本文详细展开的方面:
- 上下文压缩:通过总结或修剪,减少上下文窗口中的令牌数,同时保留关键信息。
- 上下文管理技术:如多代理系统中隔离上下文,或使用状态对象管理动态数据。
- 上下文安全性:确保上下文不包含敏感或无关信息。
- 上下文有效性评估:系统地测量上下文对模型性能的影响。
这些领域需要进一步研究和工具支持,以实现自动化和高效的上下文工程。
资源
以下是一些关于上下文工程的推荐阅读:
- Prompting Guide
- Context Engineering by Lance Martin
- Andrej Karpathy on X
- Phil Schmid on Context Engineering
- Simple AI: The Skill Replacing Prompt Engineering
- 12-Factor Agents
- LangChain: The Rise of Context Engineering
如果您想深入学习,推荐参加相关课程,采用实践方法探索上下文工程的各个方面。