上下文工程是什么?过时了么?一文讲明白!

0 阅读8分钟

在 AI 圈,技术名词的迭代速度快到让人怀疑人生。

从早期入行必学的 Prompt Engineering,到之前流行的 Context Engineering,再到近期爆火的 Harness Engineering,名词一个比一个高大上,门槛也似乎越堆越高。

不少刚入门的小伙伴都在问:是不是新名词一出来,旧的就完全不用学了?毕竟大家都在调侃:“只要我学的足够慢,很多知识都不用学了(手动狗头)”。

答案是否定的。

这三个概念不是替代关系,而是从单点指令优化,到全链路信息管控,再到全系统工程化治理的层层递进

  • Prompt Engineering 解决「指令怎么写,模型才听得懂、做得对」,是聚焦单条指令的入门基本功,也是所有大模型应用的起点;

  • Context Engineering 是 Prompt 的升维,解决「给模型喂什么信息,才能低成本、高质量地完成复杂任务」,核心是管控模型的所有输入信息;

  • Harness Engineering 是上层生产级工程体系,解决「怎么让大模型在生产环境可控、可扩展、可落地」,包括输入输出的整套体系,而 Context Engineering 也是这套体系的核心地基。

图片

之前我已经拆解过  Prompt Engineering 的核心逻辑,今天我们就循序渐进,把承上启下的Context Engineering彻底讲透。


1. 什么是上下文工程?

许多开发者对大模型API的认知,仍停留在单次问答交互的层面。

基于这种认知,他们往往将主要精力投入到系统提示词的优化上,希望通过完善模型的角色设定、拆解任务步骤等方式,解决所有应用中的问题。

但在真实的业务应用场景中,每次调用大模型 API 时,发送的并非单一指令,而是一个完整的信息集合,这个信息集合就是 Context(上下文)。其核心组成部分包括:

  • 系统提示词(System Prompt):定义模型的角色、目标、规则、输出边界等;

  • 用户当前指令(User Prompt):用户本次的具体需求与输入;

  • 会话历史记录(Chat History):多轮对话场景中,用户此前的所有输入内容与模型对应的输出内容;

  • 参考资料(Knowledge):从知识库或外部搜索中检索出来的相关资料片段。

  • 工具调用(Tool):工具的定义声明 Schema、工具调用的请求与返回结果。

图片

Prompt Engineering 只管了系统提示词那一小块,Context Engineering 要管的是整个输入数据。


2. 为什么需要上下文工程?

可能有人会问:我把所有相关信息都直接塞给模型不行吗?

理想状态下当然可以,如果模型有无限长的有效上下文、零成本的推理能力、100% 的信息召回率,那完全不用搞什么上下文管理,有啥塞啥就行。

但在实际生产环境中,这三个理想条件均无法实现。上下文工程的核心价值,就是解决生产场景中与上下文相关的各类痛点:

图片

(1)上下文窗口有限

虽然现在大模型的上下文窗口越做越大,从 4K 到 128K,再到 1M 甚至更长,但无论容量多大,其上限始终是明确且有限的。

在实际应用中,当对话持续几十轮、RAG 检索返回十几篇文档、工具调用输出大量日志信息时,很容易出现 API 调用报错:“请求超出最大上下文长度”。

面对这种情况,系统不可能强制要求用户清空历史,重新开始对话,必须有工程手段来介入处理,否则会严重影响使用体验。

(2)上下文并不是越多越好

很多开发者都曾陷入一个误区:认为将所有相关信息都传入模型,就能提升模型的输出效果。

但大模型与数据库不同,其注意力机制存在先天局限:上下文长度越长,模型的注意力越容易分散。 尤其是大模型对开头和结尾的信息最敏感,中间的内容很容易被忽略。

因此如果我们将大量信息直接传入模型,它并不一定能好好利用,反而可能无法抓住重点内容,导致最终效果更差!

(3)上下文就是钱

大模型 API 的计费方式与 token 数量直接相关,每一个 token 都对应实际成本,多余的信息会烧更多钱,包括显性成本和隐性成本:

  • 显性成本:1000 token 和 10000 token 的请求,价格差 10 倍,而后者的输出效果甚至可能不如前者。

  • 隐性成本

    • 推理延迟增加:长上下文的自注意力计算需要更多时间,导致用户等待时间延长。

    • 并发能力下降:单个请求占用更多计算资源,系统可处理的并发请求数量减少。

    • 调试难度提升:长上下文导致模型的推理逻辑更难追踪,问题排查复杂度呈指数级增长。


上下文工程的核心逻辑是:在大模型的有限上下文窗口内,用最少的 token,传递最有效的信息,实现效果与成本的最优平衡。


3. 上下文工程的常见手段

上下文优化的常见手段主要有三种:挑选压缩隔离。核心目标是能够高效地利用上下文。

图片

🚗手段一:挑选

核心逻辑:只给模型输入与当前任务强相关的信息,从源头减少冗余。

最典型的挑选手段就是大家熟悉的 RAG:不用把整个知识库全塞给模型,而是先检索出和当前任务最相关的片段,再传给模型。

但很多开发者对 RAG 的理解太窄了,实际上,除了知识库检索外,RAG 的思路可应用于很多场景:

  • 工具挑选:不将所有工具定义都输入给大模型,而是采用 RAG 思路挑选与当前任务可能相关的工具。

  • 历史消息挑选:不将全部会话历史都输入大模型,而是采用 RAG 思路挑选与当前任务可能相关的内容。

  • 技能挑选:典型的就是 SKill 的渐进式加载,不一开始传入所有技能的全部信息,而是先只给模型输入所有技能名称和描述,让模型判断是否需要加载具体技能的信息。

  • 简单裁剪:对于时间过久的历史消息,可直接删除。

🚗手段二:压缩

核心逻辑:在不丢失核心语义的前提下,缩短信息长度,降低 token 消耗。

常见的压缩方式如下:

  • 对话历史总结:多轮对话中,每隔一定轮数或者当上下文达到一定阈值时,调用大模型,将此前的对话进行总结,仅保留核心信息。

  • 工具结果压缩:工具调用返回的结果常含冗余信息,可先用轻量模型进行总结,或提取关键数据(如日志中的错误信息、堆栈信息),再将核心信息输入给主模型。

🚗手段三:隔离

核心逻辑:将复杂任务分解为子任务,为每个子任务分配独立的上下文空间,避免不同任务信息相互干扰。

隔离最典型的落地方式,就是现在常说的多智能体(Multi-Agent)架构,有以下优势:

  • 专属任务分工:每个智能体仅负责一类任务(如代码生成、文档处理),仅加载当前任务所需的上下文;

  • 资源按需分配:简单任务使用轻量模型,复杂任务使用高性能模型,从而降低整体计算成本;

  • 状态独立管理:每个智能体仅维护自身的任务状态,不会有跨任务的状态污染。

🚗三个手段配合使用

这三个手段可以组合使用,比如:可先通过 RAG 检索筛选出与当前任务相关的信息(挑选),再对检索到的长文本资料进行总结压缩(压缩),最后将不同类型的子任务分配给不同的 Agent 处理,实现上下文隔离(隔离)。

当然也要注意,每一种优化都有对应的开发和维护成本,不用盲目把所有手段都堆上去,结合自己的业务场景选最合适的组合,找到效果和成本的平衡点就好。


4. 总结

最后,简单梳理下核心要点,带大家快速掌握 Context Engineering 的核心逻辑:

  1. 上下文定义:调用大模型 API 时传递的全部信息集合,包括系统提示词、用户当前指令、会话历史、参考资料及工具调用相关内容;

  2. 解决的痛点:主要解决生产场景中三大问题:上下文窗口有限导致的 API 报错、上下文过长引发的模型性能下降、冗余信息带来的成本浪费;

  3. 落地的手段:主要包括挑选、压缩、隔离三种手段,可单独使用也可组合运用,核心是在有限窗口内用最少 token 传递最有效信息。

想系统学习 AI 工程,可关注我的微信公众号【一枫说码】,持续输出干货内容!