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

在 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 工程,欢迎关注,全网同名,持续输出干货内容!

#Agent##LLM##大模型##AI#
AI技术合集 文章被收录于专栏

专注于AI工程化实战分享

全部评论

相关推荐

目前agent还是需要学习传统的开发的。先说说传统开发这块的核心技能,对 Java 程序员来说,这些都是绕不开的基本功:扎实的后端开发能力Agent 需要处理复杂的任务流程,比如任务拆解、多工具调用、状态管理,这和后端开发里的 “业务逻辑设计”“接口开发”“并发处理” 是相通的。你得懂怎么设计一个高可用的服务架构,怎么用 SpringBoot 搭建项目,怎么处理多线程下的任务调度 —— 这些能力能帮你把 Agent 的 “骨架” 搭得稳。比如做一个电商智能客服 Agent,你需要设计它的对话流程引擎,这和后端写订单流转逻辑的思路是一致的。数据结构与算法基础Agent 的核心是 “决策”,而决策依赖高效的信息处理。比如 Agent 在做工具选择时,需要快速匹配当前任务和可用工具的关联度;在处理长上下文时,需要对信息进行筛选和压缩。这些场景都需要用到字符串处理、哈希表、树结构等基础数据结构,以及贪心、动态规划等算法思想。刷 LeetCode 练的那些题,本质上就是在锻炼这种 “高效解决问题” 的思维,对 Agent 的决策模块设计至关重要。数据库与中间件技术Agent 需要存储大量的上下文数据、用户偏好、任务历史,这就需要你懂 MySQL、Redis 这些数据库的使用。比如用 Redis 做 Agent 的会话状态缓存,用 MySQL 存储长期的用户行为数据;如果是分布式 Agent 系统,还得用到消息队列(比如 Kafka)来做任务异步通信。这些传统中间件的使用经验,能帮你解决 Agent 开发中的 “数据存储” 和 “系统协作” 问题。在传统开发的基础上,再叠加这些 AI 相关的技术,才算真正入门 Agent 开发:大模型基础与 API 调用能力大模型是 Agent 的 “大脑”,你得懂大模型的基本原理,比如 Prompt 工程、上下文管理、多轮对话的一致性处理。还要熟练掌握主流大模型的 API 调用,比如 OpenAI、通义千问的接口,知道怎么传参、怎么处理返回结果、怎么解决调用超时或报错的问题。更重要的是,要学会根据任务场景选择合适的模型 —— 比如处理复杂逻辑用 GPT-4,做轻量化对话用 ERNIE-3.0-Turbo。RAG(检索增强生成)技术纯大模型的知识容易过时,而且容易 “胡说八道”,RAG 能让 Agent 调用外部知识库,提升回答的准确性。你需要学习向量数据库(比如 Chroma、Milvus)的使用,知道怎么把文档转换成向量、怎么做相似性检索、怎么把检索结果和 Prompt 结合起来喂给大模型。这部分技术是 Agent 落地企业级场景的关键,比如做一个企业内部的智能助手 Agent,就需要用 RAG 对接公司的知识库。工具调用与多智能体协作一个强大的 Agent 不能只靠大模型 “空想”,还得会调用外部工具 —— 比如查天气、查数据库、调用第三方 API。你需要学习工具的封装方法,设计清晰的工具描述(让大模型知道什么时候该用这个工具),以及处理工具调用的异常情况(比如工具调用失败怎么重试)。如果想做更复杂的 Agent 系统,还得研究多智能体协作,比如让一个 “规划 Agent” 拆解任务,再分给 “执行 Agent”“评估 Agent” 去完成,这就需要设计智能体之间的通信协议和任务分配机制。Agent 框架的使用与二次开发不用从零造轮子,主流的 Agent 框架(比如 LangChain、AutoGPT、AgentBuilder)已经封装了很多基础功能。你需要学会用这些框架快速搭建 Agent 原型,比如用 LangChain 的 Chain 和 Agent 组件,组合出任务流程;更进阶的是,根据业务需求对框架进行二次开发,比如自定义工具、自定义决策逻辑,这就需要你能读懂框架的源码 —— 而这又回到了传统开发的代码阅读能力上。
想从事Agent应该学习...
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务