老城区有家“老王小炒”,老板一手颠勺功夫出神入化,客人点什么他就盯着灶台现炒什么,每一句“大火!快翻!起锅!”都喊得精准——这就是 Prompt Engineering:针对每一次请求,手工打磨一句提示词。可是老王想开连锁店。他发现光靠嗓门喊不行:客人多了、菜品复杂了,每个服务员都要重新教,菜的品质还不稳定。于是他建了中央厨房——把食材预先分装,把菜谱固化成标准工序,把顾客口味记进会员档案,出餐时自动按需配菜、统一烹饪。这套从“单次喊话”到“整套体系”的升级,就是 Context Engineering。Prompt 和 Context 不是对立的。提示词依然是那个“颠勺的手艺”,但 Context 工程要让手艺乘上系统的翅膀。读完这篇文章,你会明白:为什么 AI 应用的竞争力正从“会不会写提示词”转向“会不会设计上下文系统”。

岗位关联

一句话价值:掌握 Context Engineering,你将从“靠感觉写提示词的手艺人”升级为“能搭建 AI 应用核心系统的工程师”,这正是 AI 应用开发岗位的核心竞争力。

目录
  1. 可视化演示
  2. 概念界定:菜谱与大厨
  3. 核心坐标:静态口令 vs 动态系统
  4. 价值版图:手艺人与架构师
  5. 上下文管理:备菜间的功夫
  6. 动态组装:自动配餐流水线
  7. 演进路线:从掌勺到建厨房
  8. 实践落地:厨房的仪表盘
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示上下文工程与提示工程核心区别、Token窗口预算分配、动态上下文组装流程、从Prompt到Context演进路径,步进式深入理解LLM上下文管理工程方法论。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Context vs Prompt:从"怎么说"到"给什么" Prompt Engineering聚焦单次指令措辞,关注语气、结构、示例等表达技巧 Context Engineering管理模型窗口中所有信息,包括系统指令、历史、检索结果等 Context = System + History + RAG + Tools + Profile 上下文工程是提示工程的系统性升级。

概念界定:菜谱与大厨

老王的小炒店里,墙上贴着一张张手写菜谱:“宫保鸡丁,鸡丁先腌十分钟,大火翻炒,最后放花生米。”每来一桌客人点这道菜,老王都要看一眼菜谱,然后凭经验动手。这里的“菜谱”就是 Prompt:一段写给模型看的指令文本,告诉它做什么、怎么做。Prompt Engineering 就是研究“怎么写好这张菜谱”的学问——措辞怎么排、示例给几个、格式怎么约束,让模型一次就听懂。

而老王的连锁店开起来后,他发现仅仅优化菜谱远远不够。一道菜要好吃,取决于食材新不新鲜(背景知识)、灶台火候稳不稳定(模型能力)、客人的口味偏好(用户画像)、以及上一位客人点过什么(对话历史)。把这些要素统一管理起来的整套体系,就是 Context。Context Engineering 研究的是“如何设计和维护整套出餐系统”,而不仅仅是在灶台前喊一句漂亮的吆喝。

在技术层面,一个完整的 Context 通常由四类信息构成:指令(Instruction)告诉模型角色和任务,背景资料(Background)来自知识库检索,对话历史(History)保留多轮交互的记忆,用户画像(Profile)描述用户偏好与身份。Prompt 只是 Context 中的“指令”这一个子集,而 Context 是装着所有食材的整个备菜台。理解了这一点,你就明白了为什么两个概念的工程边界完全不同:一个在“文本优化”层面发力,一个在“系统构建”层面发力。

所以,当你再听到"Prompt Engineering"时,请把它想成老王那手精致的颠勺功夫;而 Context Engineering,是围绕这手功夫建起来的整套中央厨房。菜谱再精彩,也只是厨房的一部分。

Context={指令,背景资料,对话历史,用户画像}\text{Context} = \{\text{指令}, \text{背景资料}, \text{对话历史}, \text{用户画像}\}
通俗说明:一个完整的 Context = 一张任务菜单 + 一叠参考资料 + 一本聊天记录 + 一张顾客档案卡。Prompt 只是其中的菜单。
  1. 指令(Instruction)告诉模型“你是谁、要做什么”,就像客人下单时说“少放辣、多放蒜”,是 Prompt 的主体文本。
    指令=Prompt的主体文本\text{指令} = \text{Prompt的主体文本}
  2. 背景资料(Background)从知识库中检索出来的参考文档,像提前分装好的食材,为模型提供事实依据。
    背景资料=Retrieve(用户问题)\text{背景资料} = \text{Retrieve}(\text{用户问题})
  3. 对话历史(History)保存之前几轮的问答,像大厨记得你上次点过微辣,保证回答连贯。
    历史={h1,h2,…,hn}\text{历史} = \{h_1, h_2, \ldots, h_n\}
  4. 用户画像(Profile)用户身份、偏好等结构化信息,像会员档案卡,让回答更个性化。
    画像={身份,偏好,场景}\text{画像} = \{\text{身份}, \text{偏好}, \text{场景}\}

核心坐标:静态口令 vs 动态系统

老王的小炒店,服务员在门口喊一嗓子“一份宫保鸡丁!”,老王就照菜谱炒一份。这句吆喝是固定的、独立的:这桌客人是谁、之前聊过什么,老王并不关心。这就是 Prompt 的典型特征——静态的、单点的一次性指令。它不会主动查阅资料,不会翻看历史,每一句命令都像一张崭新的便签纸。

中央厨房则完全不同。一份宫保鸡丁要出餐,系统会自动做三件事:查一下这位顾客的会员档案(画像),去冷库里取今天早上分装好的鸡丁(检索背景资料),再看一眼他上一单点的什么避免重复(历史记录)。所有这些动态汇入一条生产线,才最终形成“炒这道菜”的完整指令。这就是 Context——组装出来的动态系统,它随着每一次请求、每一个用户、每一段历史而实时变化。

从工程视角看,两者的坐标差异体现在三个维度。静止与流动:Prompt 是一条固定文本,Context 是随请求变化的动态集合;手工与自动:Prompt 依赖人逐次手写,Context 由系统自动组装;局部与全局:Prompt 只看当下的一次问答,Context 横跨知识库、记忆与业务系统。用集合论的语言说,静态的 Prompt 是整个动态 Context 的一个子集。这个包含关系,是理解两者关系的最小必要知识。

所以,别再纠结“Prompt 和 Context 谁更好”。它们压根不在一个维度上:一个是一句吆喝,一个是运转整个后厨的系统。理解了“包含”而非“取代”,你就握住了这两者的正确坐标系。

Prompt静态⊂Context动态\text{Prompt}_{\text{静态}} \subset \text{Context}_{\text{动态}}
通俗说明:手写的那张点菜单,只是整套配餐系统中的一小块。动态上下文包含了菜单,更包含了食材、档案和记录。
  1. 静态谓词Prompt 是一次请求内写死的文本,不随用户和场景变化,像一张“今日特价菜单”。
    Prompt静态=固定文本\text{Prompt}_{\text{静态}} = \text{固定文本}
  2. 动态谓词Context 基于检索与记忆实时生成,像“按会员点单记录自动配菜”。
    Context动态=Generate(q,u,h,k)\text{Context}_{\text{动态}} = \text{Generate}(q, u, h, k)
  3. 子集关系提示词只是上下文的一个子组件,理解这个包含关系是升级的第一步。
    Prompt⊆Context\text{Prompt} \subseteq \text{Context}

价值版图:手艺人与架构师

老王最自豪的,是他那口锅气。同样一盘青菜,他颠两下就比徒弟炒的香——这是手艺,来自千百次重复得来的肌肉记忆。Prompt Engineering 的价值也在于此:通过精心优化指令的措辞、示例、逻辑,让模型输出更准确。这套手艺在任何 LLM 应用中都不会过时,它决定了你看似不起眼的文本能否激发出模型真正的能力。

但手艺有上限。老王一天最多炒两百道菜,他徒弟照着菜谱炒,味道就是差一截——为什么?因为菜谱只能传递“放盐少许”,传不了“油温七成热”这种隐性经验。同样,提示词技巧只能优化模型“听懂”的概率,却控制不了背景知识够不够、历史记忆全不全、检索结果准不准。真正的杠杆在于上下文治理:把知识、记忆、规则当作系统资产来经营,而不是每次临时抱佛脚。

这就引出 Context Engineering 的价值定位:Prompt Engineering 优化“单点指令的有效性”,Context Engineering 治理“整个信息供应链的质量”。在应用中,两者共同决定输出上限。一个形象的公式是:输出质量 = 模型能力 × 上下文质量。模型再强,上下文是一团乱麻,回答照样跑偏;反之,上下文组织得越清晰,小模型也能发挥出超出预期的水平。

换句话说,提示词高手打磨的是“一句漂亮的吆喝”,Context 工程师经营的是“整条供应链的质量”。前者是手艺人的匠心,后者是架构师的格局。AI 应用要规模化,缺不了后者。

输出质量=模型能力×上下文质量\text{输出质量} = \text{模型能力} \times \text{上下文质量}
通俗说明:模型能力是发动机功率,上下文质量是油品和管道。发动机再好,油路堵塞也跑不起来。
  1. 模型能力基座模型经过预训练得到的智能上限,像灶台的硬件功率。
    模型能力=Model(参数,训练数据)\text{模型能力} = \text{Model}(\text{参数}, \text{训练数据})
  2. 上下文质量信息是否相关、是否准确、是否有序,像食材的新鲜度和配菜的合理性。
    上下文质量=f(相关度,准确度,结构化)\text{上下文质量} = f(\text{相关度}, \text{准确度}, \text{结构化})
  3. 乘法关系任何一维趋近于零,乘积都趋于零——两者缺一不可。
    lim⁡上下文质量→0输出质量=0\lim_{\text{上下文质量} \to 0} \text{输出质量} = 0

上下文管理:备菜间的功夫

中央厨房的备菜间,是整个连锁店的心脏。每天凌晨,采购员把蔬菜按类分装进保鲜盒,标上日期,放进不同温区的冷柜:叶菜类 2℃、肉类-18℃、干货常温。这样出餐时,厨师随手就能拿到需要的食材。上下文管理就是这个备菜间——在请求到来之前,先把知识准备好、组织好、编排好,而不是等到用户提问时才手忙脚乱找资料。

管理上下文首先要面对一个硬约束:上下文窗口是有限的,就像保鲜柜的容量有限。模型一次只能读取有限数量的 Token。塞太多无关内容,有效信息会被稀释,甚至直接溢出窗口,导致关键指令被“挤”出视野。因此 Context Engineering 的第一课不是“塞什么”,而是“不塞什么”——学会做减法,比学会做加法更重要。

上下文管理包含三个核心动作。窗口规划:评估任务需要多少 Token,给知识库、历史、指令分配预算;内容组织:将长文档分块(Chunking)、摘要(Summarization)、加标签(Tagging),方便检索;检索注入:按用户问题从知识库选出最相关的片段注入上下文。衡量管理好坏的关键指标是窗口利用率——它直接反映你的“保鲜柜”里装的是今天要用的食材,还是囤积过期的冻货。

老王的经验告诉我们:好厨师不靠食材堆砌,靠的是备菜间井井有条。Prompt 工程让你喊得出好口令,而上下文管理决定你有没有好料可喊、窗口装不装得下。

η窗口=有效信息量上下文窗口大小\eta_{\text{窗口}} = \frac{\text{有效信息量}}{\text{上下文窗口大小}}
通俗说明:保鲜柜里放的全是今天要用的食材,而不是把整个仓库塞进去。利用率越高,出餐越高效。
  1. 有效信息量真正能支撑模型正确回答的内容量,像“这单菜实际用到的食材克数”。
    有效信息量=∑注入片段相关度i\text{有效信息量} = \sum_{\text{注入片段}} \text{相关度}_i
  2. 上下文窗口大小模型一次能处理的最大 Token 数,像保鲜柜的总容量。
    窗口=4096,8192,…Token\text{窗口} = 4096, 8192, \ldots \text{Token}
  3. 利用率两者之比越接近 1,说明窗口被充分利用;越低说明装了太多“冻得硬邦邦用不上的存货”。
    η→1优质管理;η→0信息浪费\eta \to 1 \quad \text{优质管理}; \quad \eta \to 0 \quad \text{信息浪费}

动态组装:自动配餐流水线

中央厨房最神奇的环节在出餐高峰。顾客扫码下单的瞬间,系统同时做三件事:从数字档案里调出这位常客的口味(他不吃香菜)、从冷库挑出对应食材(今天推荐的鸡腿肉)、翻出他上回的评价(嫌上次太咸)。三路信息汇聚到一条流水线上,自动拼成一份完整的加工单,交到灶台。这就是动态上下文组装——不是人肉复制粘贴,而是系统自动配餐。

在 LLM 应用中,这三路信息分别对应:用户画像(Profile)、知识检索(Retrieve)、对话历史(Memory)。组装器(Assembler)按业务策略把它们与系统指令拼接成最终 Prompt。拼什么、按什么顺序拼、各占多少比例,这些决策就是 Context Engineering 的核心技术。同样的模型,用不同的组装策略,效果可以天差地别。

一个典型的动态组装流程可以概括为:先根据用户问题 q 从知识库检索 Top-K 相关片段;再读取用户 u 的画像和最近 n 轮对话历史;最后按“系统指令 → 画像 → 历史 → 检索片段 → 当前问题”的顺序组装成完整的上下文。检索增强(RAG)、路由分发(Routing)、对话编排(Orchestration)是三个最常用的实现手段。它们让上下文不再是“写死的纸”,而是“活着的流水线”。

如果说 Prompt Engineering 关心的是“这句话怎么写”,Context Engineering 关心的则是“这句话怎么来”。流水线一转,上下文自己备齐了——这正是老王从单店迈向连锁的关键一跃。

Cdynamic=Assemble(Retrieve(q),Profile(u),History(h),Instruction)C_{\text{dynamic}} = \text{Assemble}\big( \text{Retrieve}(q), \text{Profile}(u), \text{History}(h), \text{Instruction} \big)
通俗说明:动态上下文 = 把知识库检索结果、用户档案、聊天记录和系统指令,按配方拼成一份完整加工单。
  1. 检索函数给定用户问题 q,从知识库中挑出最相关的 K 个片段。
    Retrieve(q)={d1,d2,…,dK}\text{Retrieve}(q) = \{d_1, d_2, \ldots, d_K\}
  2. 画像读取取用户 u 的偏好、身份等结构化信息,像读取会员档案。
    Profile(u)={偏好,身份}\text{Profile}(u) = \{\text{偏好}, \text{身份}\}
  3. 历史记忆取最近 n 轮对话,保证多轮问答连贯。
    History(h)={ht−n,…,ht}\text{History}(h) = \{h_{t-n}, \ldots, h_t\}
  4. 组装函数把这些部件按模板和预算拼成一个完整上下文。
    Assemble(⋯ )=指令⊕画像⊕历史⊕检索片段\text{Assemble}(\cdots) = \text{指令} \oplus \text{画像} \oplus \text{历史} \oplus \text{检索片段}

演进路线:从掌勺到建厨房

老王把小炒店开成连锁店,不是某一天突然学会的。他先把手写菜谱打印成标准手册(模板化),再请人把食材提前切好分装(半成品化),然后引入冷库和排菜系统(体系化),最后才建成中央厨房(工程化)。这条路,恰好就是 Prompt Engineering 向 Context Engineering 演进的真实轨迹。没有前面的铺垫,中央厨房不过是空中楼阁。

从技术演进看,AI 应用开发正沿着同样的阶梯攀爬。第一级:纯手写提示词,每次调用现场发挥,适合 Demo 和简单问答;第二级:提示词模板化,把固定部分抽离复用,如 LangChain 的 PromptTemplate;第三级:引入检索与记忆,让上下文按需变化;第四级:完整的上下文工程平台,把知识、记忆、评估、监控作为系统能力统一治理。每一级都在解决上一级的瓶颈。

这场演进的本质,是范式的转变——从“面向单次对话的文本优化”转向“面向业务场景的信息系统工程”。提示词不会消失,它被吸收为 Context 系统中的一个模块。这就像大厨的手艺没有被机器取代,而是被转化成了流程、SOP 和品控标准。理解这条演进路径,能帮你判断:你的应用现在处在哪一级,下一步该升级什么,而不是盲目追新概念。

所以,别把“从 Prompt 到 Context”理解成一场革命——它是一次自然进化。老王没有丢掉颠勺的手艺,而是把它放进了更大的系统。你也不用推翻已有的提示词经验,而是把它升级为工程体系的一部分。

Context工程=f(提示词,检索,记忆,评估)\text{Context工程} = f(\text{提示词}, \text{检索}, \text{记忆}, \text{评估})
通俗说明:升级不是扔掉提示词,而是把它接入一个更大的函数。提示词、检索、记忆、评估,四路输入共同决定系统效果。
  1. 提示词模块仍然负责定义任务的“锅气”与输出格式。
    提示词=Role, Task, Format\text{提示词} = \text{Role, Task, Format}
  2. 检索模块提供按需取用的外部知识。
    检索=Embedding+相似度搜索\text{检索} = \text{Embedding} + \text{相似度搜索}
  3. 记忆模块管理短期与长期的用户状态。
    记忆=短期缓存+长期档案\text{记忆} = \text{短期缓存} + \text{长期档案}
  4. 评估模块驱动迭代优化的闭环。
    评估=指标采集+回归分析\text{评估} = \text{指标采集} + \text{回归分析}

实践落地:厨房的仪表盘

连锁店总部的大屏上,跳动着几个关键数字:今日出餐合格率 98.7%、食材损耗率 3.2%、平均出餐时间 4 分 15 秒。老王不用再去每个分店亲自炒菜,他只要盯着这面仪表盘,就能知道整个体系健不健康。Context Engineering 的落地,同样需要这样一面仪表盘——用数据代替感觉,用指标代替猜测。

很多团队的 Context 系统上线后效果不错,但过了两周,发现回答质量时好时坏。为什么?因为没有评估和监控。上下文组装是动态的:知识库更新了、用户分布变化了、检索质量波动了,任何一环出问题都会反映到最终效果上。如果只有上线时的“一次性评测”,系统就会悄悄劣化,而你浑然不知。

落地一套 Context 工程,至少需要三块基础设施。工具链:LangChain、LlamaIndex 等编排框架,提供检索、组装、调用的标准组件;评估体系:用“黄金问答集”定期回归测试,核心指标包括任务准确率、上下文命中率、Token 成本与响应延迟;监控运维:记录每次请求的上下文组装明细、检索命中的文档、模型输出,出现 badcase 可以回放归因。这三块构成一个持续优化的闭环,让系统越跑越稳。

老王的连锁店靠数据管理,而不是靠他挨个灶台喊话。Context Engineering 的落地同样如此:用仪表盘代替直觉,用指标代替感觉。当你建立起质量、成本、延迟三位一体的监控体系,你的 AI 应用才真正从“作品”变成了“产品”。

质量分=α×任务准确率+β×成本效率+γ×响应速度\text{质量分} = \alpha \times \text{任务准确率} + \beta \times \text{成本效率} + \gamma \times \text{响应速度}
通俗说明:质量分是准确、省钱、够快的加权综合。就像开饭店要同时盯住好吃、不浪费、上菜快三个指标。
  1. 准确率指标模型回答与标准答案的吻合程度。
    准确率=正确样本数测试样本总数\text{准确率} = \frac{\text{正确样本数}}{\text{测试样本总数}}
  2. 成本效率单位 Token 消耗带来的有效输出。
    成本效率=有效回答数Token消耗量\text{成本效率} = \frac{\text{有效回答数}}{\text{Token消耗量}}
  3. 速度指标从请求到响应的延迟。
    速度=1平均响应延迟\text{速度} = \frac{1}{\text{平均响应延迟}}
  4. 权重合成α、β、γ 按业务侧重调节,三者之和为 1。
    α+β+γ=1\alpha + \beta + \gamma = 1

AI 应用场景

智能客服:每一次开口都带背景

阶段:应用工程化 / 动态上下文组装

解决的问题:传统客服机器人每次请求只靠一句提示词,答不准、不连贯。用户问“我的订单为什么还没到”,机器人不知道用户的订单状态,只能给出通用话术,用户体验很差。

具体案例:某电商平台的智能客服接入 Context Engineering:调用订单系统的 API 实时拉取用户订单状态,拼接用户画像(会员等级、常用地址)和最近 3 轮对话历史,动态组装成“订单查询专家”上下文。上线后,订单类问题的一次解决率从 42% 提升到 78%,转人工率下降 35%。

企业知识库问答:从检索到回答的全链路

阶段:上下文管理 / 检索增强生成(RAG)

解决的问题:法律、金融行业文档动辄上千页,直接塞进 Prompt 既不现实也浪费 Token。传统做法靠人翻阅资料,效率极低。

具体案例:某律所部署法律问答助手,使用向量检索将数千份合同、法规分块入库;用户提问时检索 Top-5 相关片段,与法规原文、历史同类案件结论一起组装进上下文。律师再也不用逐页翻 PDF,检索命中率 92%,回答附原文出处,大幅降低人工核验成本。

AI Agent:让Agent带着记忆干活

阶段:动态组装 / 记忆与路由编排

解决的问题:多步骤 Agent 任务中,模型经常“失忆”,第二步忘了第一步的结论。手工在提示词里维护状态既脆弱又难以扩展。

具体案例:某 SaaS 公司的数据分析 Agent 接入上下文管理框架,将用户的历史操作、当前项目目标、API 返回结果分层注入上下文,并用路由策略判断每一步该调哪个工具。Agent 执行多步数据清洗任务的完成率从 61% 提升到 89%,且中途不再“断片”。

Python 演示

python77 行
# context_vs_prompt.py"""Prompt vs Context Engineering 最小对比演示""" KNOWLEDGE_BASE = {    "退款": "退款政策: 7天无理由, 需保留原包装",    "物流": "物流政策: 默认发货后3天送达",    "发票": "发票政策: 支持电子发票, 24小时发放",}  def fake_model(context):    """模拟LLM: 根据上下文中是否含知识做出不同回答"""    docs = [line.replace("【知识】", "") for line in context.split("\n")            if "【知识】" in line]    if docs:        return "[模型] 结合检索知识回答: " + ";".join(docs)    return "[模型] 抱歉, 我缺少相关知识, 无法准确回答。"  class PromptHandCraft:    """方式一: Prompt工程, 每次手工拼提示词"""     def ask(self, question):        prompt = "你是AI助手, 请回答用户问题: " + question        return fake_model(prompt)  class ContextAssembler:    """方式二: Context工程, 动态组装上下文"""     def __init__(self):        self.knowledge_base = KNOWLEDGE_BASE        self.history_map = {}        self.profile_map = {"user_001": "金牌会员, 偏好简洁回答"}     def retrieve(self, query):        # 简单的关键词召回, 模拟向量检索        hits = []        for key, doc in self.knowledge_base.items():            if key in query:                hits.append("【知识】" + doc)        return hits     def load_profile(self, user_id):        return self.profile_map.get(user_id, "普通用户")     def load_history(self, user_id):        return self.history_map.get(user_id, [])     def assemble(self, user_id, question):        parts = ["【画像】" + self.load_profile(user_id)]        parts += self.retrieve(question)        history = self.load_history(user_id)        if history:            parts.append("【历史】" + ";".join(history))        parts.append("【问题】" + question)        return "\n".join(parts)     def ask(self, user_id, question):        context = self.assemble(user_id, question)        self.history_map.setdefault(user_id, []).append(question)        return fake_model(context)  def main():    print("===== 方式一: Prompt 手工拼 =====")    worker = PromptHandCraft()    print(worker.ask("退款怎么操作? "))     print("\n===== 方式二: Context 动态组装 =====")    engine = ContextAssembler()    print(engine.ask("user_001", "退款怎么操作? "))    print(engine.ask("user_001", "那发票呢? "))  if __name__ == "__main__":    main()
目的:对比展示“手工写提示词”与“动态组装上下文”两条路线的差异——后者检索知识、读取画像、记住历史,回答更具体。
  1. KNOWLEDGE_BASE = {模拟企业知识库,像中央厨房的食材冷库。
  2. def fake_model(context):模拟 LLM:有检索知识就给出具体回答,否则只能道歉。说明“上下文里有什么,输出就有什么”。
  3. class PromptHandCraft:传统 Prompt 模式:只拼一句话就提问,不查库、不记历史。
  4. def retrieve(self, query):最简版“按需取料”,真实系统会换成向量相似度检索。
  5. if key in query:关键词命中即视为相关,这是检索的朴素雏形。
  6. def assemble(self, user_id, question):核心组装逻辑:画像、知识、历史、问题按顺序拼成一个完整上下文。
  7. self.history_map.setdefault(user_id, []).append(question)把提问写入历史,让多轮对话“不失忆”。

常见误区

误区Context Engineering 就是高级提示词工程,无非是把更多背景信息、更多示例塞进提示词里,塞得越多效果越好。

正解两者是两种不同的工程对象。Prompt 工程优化的是“单条指令文本”;Context 工程优化的是“信息供应链”——数据怎么存、怎么检、怎么组装、怎么评估。无脑堆信息反而会稀释有效内容、浪费 Token,就像往保鲜柜里塞满冻货,出餐时反而找不到要用的食材。

为何常见:初学者最先接触的都是“优化提示词”的教程,很容易把任何新概念都理解成提示词技巧的延伸。

误区新范式来了,提示词工程没用了,以后只用学怎么搭检索和组装就行。

正解提示词没有消失,而是变成了 Context 系统的一个子模块。再好的检索和组装,最终指令写得稀烂,模型照样答非所问。就像中央厨房解决了备料问题,但灶台师傅的颠勺手艺依然是出品质量的关键。二者是包含与递进,不是非此即彼。

为何常见:技术社区每隔一段时间就有“新概念推翻旧概念”的叙事,容易让人忽略真实的工程连续性。

误区要做上下文工程,就得自己实现向量数据库、Embedding、检索服务,甚至要懂分布式系统。

正解工程化的本质是复用。LangChain、LlamaIndex 等框架已经提供了检索、记忆、组装的成熟组件,真正要花心思的是组装策略、评估体系和迭代节奏。就像开连锁店不必自己炼钢造锅,用现成厨具设计好流程才是重点。

为何常见:看到网上帖子天天讲向量数据库、倒排索引等技术细节,容易产生“我必须从零造轮子”的焦虑。

误区上下文组装得越丰富,模型效果就越好,多花点 Token 无所谓。

正解实际生产环境必须做权衡。注入更多知识能提升准确率,但 Token 成本上升、延迟变长、还可能引入噪声。成熟的 Context 团队会用“质量分 = α×准确率 + β×成本效率 + γ×响应速度”来综合评估。就像配菜不是越多越好——食材堆满案板,出餐反而更慢。

为何常见:在 Demo 阶段大家只关心“能不能答对”,只有上线后才会被成本账单和用户等待时间教育。

面试题

Q1. Context Engineering 相比 Prompt Engineering,最核心的区别在于?

单选题 · easy

  • A.多了一个上下文压缩步骤
  • B.从单次提示转向系统构建← 正确答案
  • C.完全替代了提示词工程
  • D.只优化模型推理速度

答案:B。Context Engineering 的核心是从“优化单次 Prompt”升级为“系统化构建上下文”,它并不替代提示词工程,而是将其包含在内。A 只是上下文管理的一个子动作,C、D 表述都过于绝对,不符合实际工程定位。

Q2. 下列哪个操作属于 Context Engineering 的范畴?

单选题 · easy

  • A.修改提示词中的语气词
  • B.为提示词增加示例文本
  • C.检索知识并动态注入下文← 正确答案
  • D.调整模型的温度参数

答案:C。检索知识并动态注入上下文是 Context Engineering 的典型工作。A、B 属于 Prompt 工程的文本优化技巧,D 属于推理参数调优,三者都不涉及“上下文系统”层面的构建与管理。

Q3. 在“老王开餐厅”的比喻中,Prompt 工程最像什么?

单选题 · mid

  • A.大厨现场喊出的加盐口令← 正确答案
  • B.中央厨房的自动配餐流水线
  • C.顾客在餐桌上的临时点菜
  • D.餐厅提前规划的菜单菜谱

答案:A。Prompt 对应的是“单次调用时给模型的指令”,像大厨炒菜时现场喊的口令。B 指 Context 系统,C 是用户问题本身,D 是模板化提示词但偏静态,都不如 A 准确反映“当场、即时、单点”的特征。

Q4. 上下文窗口利用率 η 的计算公式中,分母代表什么?

单选题 · mid

  • A.模型隐藏层的维度参数
  • B.窗口内的有效信息数量
  • C.上下文窗口的总大小← 正确答案
  • D.用户会话的历史轮数

答案:C。η = 有效信息量 ÷ 上下文窗口大小,分母是窗口的 Token 总容量。A 是模型结构参数,B 是分子,D 只是上下文的一部分,均不对应分母。

Q5. 动态上下文组装通常包含哪些环节?

多选题 · hard

  • A.检索知识库相关片段← 正确答案
  • B.读取用户画像偏好← 正确答案
  • C.直接修改模型全部权重
  • D.拼接最近的对话历史← 正确答案

答案:ABD。动态组装 = 检索(A)+ 画像(B)+ 历史(D)+ 指令,再按策略拼接。C 是模型微调(Fine-tuning)的范畴,属于训练阶段,与“请求时的上下文组装”无关。

Q6. 为什么说“Context 工程不会取代 Prompt 工程”?

单选题 · hard

  • A.因为 Prompt 是组装后 Context 的核心组件← 正确答案
  • B.因为 Context 只关注系统架构设计
  • C.因为 Prompt 可以脱离 Context 独立生效
  • D.因为模型能力比两者都更重要

答案:A。提示词作为“指令”模块被包含在动态上下文中,Context 工程把提示词放进更大的系统,而非抛弃它。B 片面,C 不符合实际(上下文缺失时 Prompt 效果受限),D 把模型与工程对立,三者都偏离了“包含与递进”的关系。

Q7. 传统手工 Prompt 方式的主要局限是什么?

单选题 · mid

  • A.模型无法理解任何形式的提示词
  • B.每次请求都要重写难以应对复杂场景← 正确答案
  • C.提示词会永久保存在模型记忆里
  • D.提示词会导致模型无限制发散

答案:B。手工 Prompt 无法自动接入知识库、用户画像和历史记忆,面对动态场景时必须反复人工重写,这是它最核心的局限。A、C、D 在技术上均不正确。

Q8. Context 工程的评估体系通常关注哪些指标?

多选题 · hard

  • A.任务准确率与关键效果← 正确答案
  • B.Token 成本与响应延迟← 正确答案
  • C.上下文内容排版美观
  • D.检索命中与上下文利用率← 正确答案

答案:ABD。评估体系围绕“质量、成本、速度、检索效率”展开:准确率(A)、成本与延迟(B)、检索命中率与上下文利用率(D)。C 是视觉层面问题,不属于 Context 工程的核心评估指标。

Q9. 哪项工作最符合“上下文管理”的任务定义?

单选题 · easy

  • A.用模板语法编写一段提示词
  • B.将长文档分块并决定注入顺序← 正确答案
  • C.微调一个百亿参数的大模型
  • D.为推理服务配置 GPU 集群

答案:B。上下文管理包括窗口规划、内容组织(分块、摘要)、检索注入等,B 正是其典型任务。A 是 Prompt 模板化,C 是微调,D 是基础设施运维,均属于其他工程范畴。

Q10. 从 Prompt 升级到 Context 工程需要培养哪些能力?

多选题 · mid

  • A.掌握检索路由与内容编排← 正确答案
  • B.建立系统架构与治理思维← 正确答案
  • C.理解评估监控与迭代闭环← 正确答案
  • D.精通前端页面的样式美化

答案:ABC。升级路径要求检索、路由、编排能力(A),系统架构及治理思维(B),评估监控与迭代闭环(C)。D 是前端工程能力,与 Context Engineering 无关。