Appearance
76. 什么是上下文工程(Context Engineering)?
难度 P0 必背 · 岗位 应用 · 频率 ★★★ · 预计阅读 6 min
本题阅读地图
- 💡 简要回答
- 📝 详细解析
- 🎯 面试总结
👔 面试官:你有没有听说过「上下文工程」这个概念?它和 Prompt 工程有什么区别?
🙋 我:上下文工程……就是把提示词写得更好?
👔 面试官:不只是写好提示词,上下文工程管的是整个进入模型的信息,而不只是指令文字。你能展开说说吗?
这是 2025 年 AI 工程领域最热门的概念之一,Andrej Karpathy 等人明确提出,值得深入理解。
TL;DR 速记
- 是什么:上下文工程是系统化管理「送进 LLM 的全部信息」:系统提示、任务目标、历史、RAG 证据、工具定义和输出格式。
- 关键点:它比 Prompt 工程更大,Prompt 只管指令文字,上下文工程管模型推理时的整个信息环境。
- 怎么答:「上下文工程 = 为模型塑造信息环境;核心是筛选、排序、压缩、更新,让模型在正确材料和约束下行动。」
图解
图 1:上下文工程管理什么
相关题
上下文工程解释「给模型什么信息」;信息太长会触发 Q31 Lost in the Middle,复杂研究场景会扩展到 Q77 DeepSearch。
💡 简要回答
**上下文工程(Context Engineering)**是一门关于「如何精心设计、筛选、组织和动态更新输送给 LLM 的信息」的工程学科。它比 Prompt 工程更宏观:Prompt 工程只关注「指令文字怎么写」,上下文工程关注的是模型在推理时的「整个信息环境」——系统提示、对话历史、检索到的外部知识、工具定义、结构化输出要求,都是上下文工程的管理对象。
一句话概括:上下文工程 = 为模型精心塑造信息环境,用来引导和约束它的行为。
📝 详细解析
为什么需要上下文工程?
LLM 本质上是基于上下文的自回归预测模型——它的整个世界就是当前这次请求里携带的上下文,模型的所有推理、决策和输出,都完全基于你给它的这些信息。
因此,「给模型什么信息」比「模型本身有多强」更能决定输出质量。上下文工程就是系统化地做这件事。
上下文的六大组成模块
模块一:系统提示 / 角色设定 定义 Agent 的「人设」、核心职责和行为规范。这是上下文里最稳定的部分,整个会话期间几乎不变。
模块二:任务指令与目标 清晰描述当前需要完成的任务,为本次交互提供明确方向。
模块三:对话与行动历史 多轮对话的完整记录,以及 Agent 之前调用工具的结果。这是模拟「记忆」和「状态」的关键。
模块四:外部知识(RAG 检索结果) 通过向量检索从知识库拿到的、与当前任务最相关的信息片段,弥补 LLM 知识时效性和专有性不足。
模块五:工具与函数定义 Agent 可以调用的工具列表,包括描述、参数格式。通过「说明书」的方式扩展 Agent 的行动能力。
模块六:结构化输出要求 要求模型以特定 JSON/XML 格式输出,便于后端程序解析,驱动自动化流程。
上下文工程的三大核心策略
策略一:分层与优先级管理
上下文窗口是有限资源(128K token 也是有限的)。不是所有内容都同等重要:
- 系统提示:最高优先级,始终保留、不截断
- 检索内容:按相关性排序,只放最相关的 Top-K
- 对话历史:可以压缩、摘要,但不能完全丢失关键节点
策略二:引导推理链(Chain-of-Thought)
通过在系统提示里要求 Agent 按「思考 → 行动 → 观察」的步骤工作,把结构化思维过程也放进上下文:
思考:用户需要北京天气决定要不要带伞,我没有实时数据,需要调工具。
行动:调用 get_weather(city="北京")
观察:返回「晴,25°C」
思考:晴天不用带伞,可以给出最终答案了。
回答:北京今天晴天 25°C,出门不需要带伞。这种结构化的推理过程本身放进上下文,会迫使模型进行更深入的逻辑推理。
策略三:动态管理与状态维持
对话越长,上下文管理越关键。三种常用手段:
- 滑动窗口:只保留最近 N 轮,简单但可能丢失关键信息
- 智能摘要:定期把旧对话压成摘要,「用户之前遇到了登录问题,已引导清除浏览器缓存」
- 外部向量记忆:重要信息存到向量库,需要时再检索拉回来
Prompt 工程 vs 上下文工程
| 维度 | Prompt 工程 | 上下文工程 |
|---|---|---|
| 关注范围 | 指令文字怎么写 | 整个信息环境怎么设计 |
| 管理对象 | 提示词本身 | 系统提示 + 历史 + RAG + 工具定义 + 格式要求 |
| 核心技能 | 自然语言表达 | 信息筛选 + 检索 + 记忆管理 + 工作流设计 |
| 复杂度 | 相对低 | 涵盖整个 Agent 信息流 |
常见踩坑与反例
踩坑 1:把上下文工程等同于 Prompt 工程
错误描述:「上下文工程就是把提示词写得更好」。
正确做法:Prompt 只是上下文的一部分。上下文工程还包括历史、外部知识、工具定义、状态、输出约束和动态裁剪策略。
踩坑 2:把所有信息都塞进上下文
错误描述:系统提示、全量历史、所有检索结果、全部工具 schema 一股脑塞进去。
正确做法:按优先级管理上下文:系统约束保留,检索证据按相关性筛选,历史做摘要,工具按场景动态注入。
踩坑 3:只关注输入,不关注状态更新
错误描述:多轮任务里每轮都重新拼 prompt,不维护用户目标、已完成步骤和关键约束。
正确做法:把上下文当成状态管理问题,记录任务进度、决策依据、未完成事项,并在每轮更新。
踩坑 4:忽略输出格式也是上下文
错误描述:只约束模型「认真回答」,不定义 JSON schema、字段、引用格式或校验规则。
正确做法:结构化输出要求也是上下文工程的一部分,直接影响后端能否稳定解析和自动化执行。
面试官可能继续追问
追问 1:上下文工程和 Prompt 工程最大的区别是什么? 答题要点:Prompt 工程关注指令怎么写;上下文工程关注进入模型的整个信息环境怎么设计、筛选、组织和动态更新。
追问 2:上下文里哪些信息优先级最高? 答题要点:系统约束和安全规则最高,任务目标其次,关键状态和证据再其次;低价值历史和冗余检索结果应压缩或删除。
追问 3:长对话里怎么管理历史? 答题要点:滑动窗口保近期上下文,摘要保长期关键事实,重要状态外部持久化,需要时再检索回来。
追问 4:上下文工程怎么评估效果? 答题要点:看任务成功率、引用正确率、工具选择准确率、结构化输出通过率、token 成本和长对话稳定性。
🎯 面试总结
答这道题要清楚地说出上下文工程比 Prompt 工程更宏观:后者只管指令文字,前者管的是整个送进模型的信息环境。六大模块(系统提示、任务指令、历史、外部知识、工具定义、输出格式)说全,再补一句「其根本原理是:信息环境塑造智能行为」,这道题就满分了。