【Harness Engineering(1)】如何判断一个系统是否真的进入上下文工程

很多人理解上下文工程,第一反应是:这不就是把提示词写长一点吗?

这个理解看起来没错。很多上下文工程的结果,确实是一段更长、更完整的输入。但如果只看到"长",就会错过真正的变化。

上下文工程的关键,不是输入变长了,而是任务语境开始由系统负责维护。

提示词工程解决的是"我怎么把话说清楚"。上下文工程解决的是"模型在每一步工作时,应该知道什么、忽略什么、更新什么"。

这两个问题听起来接近,工程含义完全不同。

一、问题不在提示词太短,而在语境缺失

书里用了一个购车例子:用户问"理想 L6 怎么样?"

这个问题太短。模型可以回答很多参数,比如空间、续航、智驾、价格、品牌定位。但这些回答大多是通用信息。

因为模型不知道提问者是谁,也不知道他在什么约束下做决策。

他是第一次买车,还是老车主换车?预算是多少?通勤还是长途?家里几口人?更看重操控、安全,还是智能化?能不能接受增程?准备开几年?

这些信息没有进入上下文,模型只能输出"看起来全面,但对决策帮助有限"的回答。

于是,很多人会得出一个结论:提示词要写长一点。这个结论只对了一半。

如果用户自己补充通勤距离、家庭成员、预算、试驾反馈、电池供应商,再问一次,模型当然会答得更好。

但这里真正发生的变化,不是提示词从一句话变成了一段话,而是决策所需的语境被补齐了

购车决策需要个人约束、评价维度、外部知识和现实反馈。预算、家庭成员、用车周期是约束;安全、操控、续航是评价维度;电池供应商、竞品差异是外部知识;试驾感受和车主反馈是现实反馈。

这些信息不是修辞,而是判断材料。

所以,提示词工程和上下文工程的分界,不在于字数,而在于责任归属。

如果语境完全靠用户一次性组织好,那仍然主要是提示词工程。

如果系统能主动识别缺什么、去哪里取、如何筛选、怎么更新,再把它组织成模型下一步需要的输入,这才进入上下文工程。

二、上下文工程的分界,是语境由系统维护

换一个工程场景:你让 Agent 分析一个陌生代码仓库,并输出架构说明。

最朴素的提示词可能是:

帮我分析这个项目的架构。

这句话和"理想 L6 怎么样"一样,太空。模型如果只能看到这一句话,就只能给一套泛泛的方法论:先看目录,再看 README,再看入口文件,再看模块关系。

你可以把提示词写长一点:

请分析项目架构,包括目录结构、核心模块、数据流、启动方式、测试方式、潜在风险,并用 Markdown 输出。

这比第一版好,但它仍然没有真正看到项目。它只是把输出格式讲清楚了。

真正的上下文工程会让系统开始行动:先列出仓库文件,判断 README、配置文件、入口文件在哪里;读取关键文件,而不是读取所有文件;根据发现继续追踪模块依赖;把无关日志、重复文件、生成产物排除;把中间发现压缩成结构化摘要;最后再让模型写架构说明。

这时,模型的输入不是一条更长的提示词,而是一份被系统逐步构建出来的任务语境。

这个差异很关键。

提示词工程仍然假设,人已经知道该放什么信息,并且能一次性组织好。上下文工程则承认,复杂任务一开始往往不知道缺什么信息,必须在任务推进中不断发现、筛选和修正。

换句话说,提示词工程是一次表达;上下文工程是一个维护过程。

三、判断一个系统是否进入上下文工程

判断一个系统是否真正进入上下文工程,可以先看三件事。

第一,信息是不是动态获得的。

如果所有信息都由用户在开始时一次性提供,它更接近提示词工程。如果系统会随着任务推进去读文件、查资料、调用 API、执行命令,并把结果带回模型,它开始具备上下文工程特征。

但关键不在于有没有工具,而在于工具结果是否改变了下一步判断。

第二,信息是不是经过选择和结构化。

上下文不是资料越多越好。代码仓库里可能有源码、测试、缓存、构建产物、锁文件、日志。全部塞给模型,只会让模型分心。

上下文工程必须回答:哪些信息进入当前窗口,哪些只保留引用,哪些应该丢弃。同样一批信息,散乱堆放和结构化组织,效果完全不同。

好的上下文会区分目标、约束、事实、假设、观察、待验证问题。没有结构的上下文,只是更大的文本块。

第三,信息是不是会随任务推进更新。

复杂任务里,早期判断经常会被后续观察修正。一开始以为项目是普通 Web 服务,后来发现它是一个脚手架;一开始以为性能问题在数据库,后来发现慢在权限服务。

上下文工程要允许旧判断被覆盖、压缩或标记为已失效。

这也是很多长提示词失败的原因:它们增加了信息量,但没有提高决策质量。真正有用的上下文,不是让模型知道更多,而是让模型下一步更好判断。

如果一段信息不能帮助下一步计划、执行、校验或收束,它就可能只是噪声。

四、上下文工程也有代价

不是所有任务都需要上下文工程。

如果任务是单轮、低风险、信息完整的,提示词工程就够了。比如改写一段文案、总结一段已给出的文本、生成一个固定格式模板。这些任务没有复杂外部状态,也不需要持续探索。

这时引入 Agent、记忆、Skills、上下文压缩,反而会让系统变重。

上下文工程适合的是另一类任务:目标开放,信息不完整,需要多步探索,且中间观察会影响后续判断。

比如代码仓库分析、深度研究、复杂运维诊断、企业知识问答、ChatBI 查询。这些任务的问题不在于"提示词还不够好",而在于"任务语境无法靠人一次性准备完整"。

当然,上下文工程不是免费午餐。

它会引入系统复杂度。你需要工具、状态、记忆、压缩、选择策略,还要处理失败路径。

它也会引入错误传播。工具拿到的信息可能错,摘要可能丢关键信息,早期错误判断可能影响后续探索。

它还会带来噪声治理问题。系统越主动收集信息,越容易把无关内容带进上下文。

所以,上下文工程的目标不是"让系统尽可能多地收集信息",而是让系统在约束下持续维护一份足够好的工作记忆。

足够好,比看起来全面更重要。

提示词工程的核心动作,是把一句输入写清楚。上下文工程的核心动作,是让系统持续维护任务语境。

二者的分界不在长度,而在过程:信息是否由系统动态获得、筛选、结构化、更新,并服务于下一步行动。

如果只是把更多背景一次性塞进模型,那只是长提示词。
如果系统能在任务过程中持续改善模型的工作记忆,那才是上下文工程。