别只研究提示词了:一文看懂 AI 时代的“上下文工程”

使用 AI 时,很多人都会关注提示词。
为了得到更好的回答,我们会尝试补充角色、明确任务、限制字数,或者要求 AI 按照固定格式输出。
但真正使用一段时间后,很多人会发现:
同一段提示词,有时效果很好,有时却不够稳定。
这不一定是提示词写得不好,也可能是模型在回答问题时,没有获得足够、准确且相关的上下文。
例如,让 AI 修改一个项目中的代码,只告诉它报错信息通常不够。它可能还需要了解:
- 项目使用的编程语言和框架
- 依赖版本
- 相关代码文件
- 运行环境
- 最近做过哪些修改
- 预期结果是什么
- 项目有哪些开发规范
这些信息共同构成了模型完成任务所需的上下文。
最近,AI 开发领域开始频繁讨论一个概念:
Context Engineering,也就是上下文工程。
如果说提示词工程关注的是“如何向 AI 提问”,那么上下文工程关注的就是:
在模型开始回答之前,如何为它准备完成任务真正需要的信息。
本文将从基础概念出发,介绍上下文工程是什么,它和提示词、RAG、Memory、MCP 有什么区别,以及普通用户和开发者可以如何使用这种方法提升 AI 输出质量。
一、什么是上下文?
上下文可以理解为大模型在处理当前任务时能够看到的全部信息。
它不只是用户刚刚输入的那句话,还可能包括:
系统提示词
用户当前问题
历史对话
上传的文档
检索到的知识
工具返回的数据
代码和错误日志
用户偏好
输出格式要求
安全和权限规则
例如,当用户只输入:
帮我修改一下。
模型几乎无法判断用户到底想修改什么。
但如果上下文中已经包含一篇文章,以及用户之前提出的写作要求,模型就可能理解这是要修改文章。
所以,大模型的回答并不只取决于当前问题,也取决于它在当前上下文中获得了哪些信息。
可以把模型生成过程简化为:
模型能力 + 当前上下文 + 生成参数 = 最终回答
模型能力很重要,但如果上下文不完整、不准确或过于混乱,即使使用能力更强的模型,也可能得到不理想的结果。
二、什么是上下文工程?
上下文工程是围绕具体任务,设计、收集、筛选、组织和更新模型上下文的过程。
它通常要解决以下问题:
- 模型完成任务需要哪些信息?
- 这些信息应该从哪里获取?
- 哪些信息与当前任务真正相关?
- 信息应该按照什么顺序组织?
- 哪些内容需要长期保存?
- 哪些历史内容应该删除或压缩?
- 如何避免把错误、过期的信息提供给模型?
- 如何在上下文长度和调用成本之间取得平衡?
一个简单的上下文工程流程可以表示为:
理解用户任务
↓
识别所需信息
↓
从对话、文档或工具中获取信息
↓
筛选和压缩内容
↓
按照清晰结构组成上下文
↓
调用模型生成结果
↓
检查结果并更新上下文
因此,上下文工程不是简单地把更多资料塞给 AI。
它真正关注的是:
如何在正确的时间,把正确的信息,以正确的结构提供给模型。
三、上下文工程和提示词工程有什么区别?
提示词工程和上下文工程关系密切,但两者关注的范围不同。
提示词工程关注“怎么说”
例如:
请分析下面的代码错误,并按照“原因、排查步骤、修复方案、验证方法”的结构回答。
这里主要是在设计任务指令和输出要求。
上下文工程关注“给模型看什么”
为了完成上面的代码分析任务,还需要准备:
错误日志
相关代码
依赖版本
运行环境
最近改动
预期行为
项目约束
如果只优化提示词,却没有提供这些信息,模型仍然只能根据有限线索进行猜测。
可以用一句话概括二者的区别:
提示词工程:告诉模型要做什么
上下文工程:为模型准备完成任务所需的信息
在简单任务中,一段清楚的提示词可能已经足够。
但在编程、知识库问答、数据分析和 AI Agent 等复杂场景中,决定结果质量的往往是完整的上下文设计。
四、上下文并不是越长越好
很多人发现 AI 缺少信息后,第一反应是把所有资料都提供给模型。
这种做法并不一定有效。
上下文太少,模型无法理解任务;上下文太多,同样会带来问题。
1. 重要信息被稀释
如果上下文中包含大量无关资料,模型可能无法抓住真正重要的内容。
例如,要分析一个登录接口错误,却把整个项目的所有文件都交给模型,配置文件、前端样式和其他业务模块可能会干扰判断。
2. 新旧信息发生冲突
在多轮对话中,用户可能先提出一种要求,后面又修改了要求。
如果旧要求仍然保留在上下文里,模型可能不知道应该遵循哪一个版本。
3. Token 消耗增加
输入模型的内容通常会占用 Token。
上下文越长,调用成本和处理时间通常也会增加。
4. 响应速度变慢
模型需要处理更多内容,首字响应和完整回答的时间可能变长。
5. 更容易达到上下文上限
每个模型都有上下文窗口限制。如果输入、历史对话和预期输出总长度超过限制,请求可能被截断或直接失败。
所以,上下文工程的目标不是“信息最多”,而是:
信息足够、相关、准确,并且能够被模型有效利用。
五、一个好的上下文通常包含什么?
不同任务需要的上下文并不相同,但通常可以分成几个部分。
1. 角色和规则
告诉模型应该遵守什么原则。
你是一个代码审查助手。
不要直接修改代码,先列出风险和修改建议。
如果信息不足,请明确指出缺少什么。
2. 当前任务
清楚说明本次要完成的工作。
请分析登录接口偶发返回 500 的原因,并给出排查顺序。
3. 必要背景
提供模型理解问题所需的环境信息。
运行环境:Node.js 20
框架:Express 5
数据库:PostgreSQL 16
部署方式:Docker
4. 任务材料
提供与问题直接相关的代码、文档、日志或数据。
错误日志
接口代码
数据库连接配置
容器日志
最近提交记录
5. 输出要求
明确结果应该如何组织。
请按照以下结构回答:
1. 最可能的原因
2. 依据
3. 排查步骤
4. 最小修复方案
5. 验证方法
6. 边界条件
告诉模型哪些事情不能做。
不要假设未提供的配置。
不要编造日志中不存在的信息。
将结论分成“已确认”和“需要验证”两类。
当这些信息被清晰组织后,模型更容易理解任务,也更容易输出可执行的结果。
六、上下文工程和 RAG 有什么关系?
RAG 的全称是 Retrieval-Augmented Generation,也就是检索增强生成。
它的基本流程是:
用户提问
↓
从知识库检索资料
↓
把相关资料放入上下文
↓
让模型根据资料回答
从上下文工程的角度看,RAG 是一种动态获取上下文的方法。
当用户提出问题时,系统不需要把整个知识库交给模型,而是只检索当前问题相关的内容。
例如,用户问:
如何申请发票?
系统可以从产品帮助文档中检索发票申请流程,再把相关片段提供给模型。
但 RAG 并不等于完整的上下文工程。
除了知识库内容,模型可能还需要:
- 当前用户的权限
- 所属地区
- 订单状态
- 历史对话
- 当前产品版本
- 回答格式和安全规则
因此,可以这样理解:
RAG:负责从知识库找到相关资料
上下文工程:负责组织模型完成任务所需的全部信息
RAG 是上下文工程的一种重要工具,但不是全部。
七、上下文工程和 Memory 有什么关系?
Memory 通常被翻译为“记忆”。
在 AI 应用中,记忆主要用于保存当前对话之外仍然有价值的信息。
例如:
用户偏好的编程语言
常用输出格式
项目技术栈
历史任务结果
长期写作风格
团队业务规则
Memory 可以分为两类。
短期记忆
主要保存当前会话中的信息,比如最近几轮对话、当前任务进度和工具调用结果。
长期记忆
主要保存跨会话仍然需要复用的信息,比如用户偏好、项目背景和长期目标。
从上下文工程角度看,记忆的关键不是“保存得越多越好”,而是:
- 什么信息值得保存?
- 保存多长时间?
- 什么时候取出来?
- 如何判断信息是否已经过期?
- 用户能否查看和删除?
- 是否包含敏感数据?
如果系统把所有历史对话都当成记忆,模型可能被过期内容干扰,也可能增加隐私风险。
所以 Memory 负责保存信息,上下文工程负责判断当前任务是否需要使用这些信息。
八、上下文工程和 MCP 有什么关系?
MCP,也就是 Model Context Protocol,主要用于连接外部工具和数据。
通过 MCP,AI 应用可以在授权范围内访问:
- 本地文件
- 数据库
- 代码仓库
- 项目管理系统
- 搜索工具
- 企业业务接口
从上下文工程角度看,MCP 是一种获取外部上下文和执行工具调用的方式。
例如,开发者让 AI 分析一个代码项目时,系统可以通过 MCP:
读取项目目录
获取相关代码
查询 Git 提交记录
读取测试日志
运行检查工具
这些结果经过筛选后,再组成模型当前任务的上下文。
两者的关系可以概括为:
MCP:负责连接外部工具和数据
上下文工程:决定何时获取、获取什么以及如何使用
MCP 能让 AI 获得更多信息,但如果没有做好上下文筛选,仍然可能把大量无关数据交给模型。
九、普通用户如何使用上下文工程思维?
上下文工程听起来像一个开发概念,但普通用户同样可以使用。
一个简单的方法是,在提问时提供五类信息:
目标 + 背景 + 材料 + 限制 + 输出格式
例如,一个不够完整的提问是:
帮我写一篇文章。
使用上下文工程思维后,可以改成:
目标:
写一篇介绍 AI 推理模型的科普文章。
读者:
没有技术背景的普通用户。
发布平台:
CSDN 和微信公众号。
内容要求:
解释推理模型和普通模型的区别,并提供使用建议。
表达限制:
避免夸张宣传,不使用未经验证的数据。
输出格式:
包含标题、开头、分节正文、总结和 150 字摘要。
这种方式并不是让提示词变得越长越好,而是补充完成任务真正需要的信息。
十、写文章时如何使用上下文工程?
AI 写作是非常典型的上下文工程场景。
如果只提供一个标题,模型容易生成内容正确但缺少特点的文章。
更完整的写作上下文可以包含:
选题信息
文章主题
目标读者
发布渠道
写作目的
内容材料
官方资料
个人经验
测试数据
参考案例
需要引用的观点
写作要求
语言风格
文章长度
章节结构
专业程度
需要避免的表达
审核要求
不编造发布时间
不虚构官方结论
数据注明来源
广告内容和正文区分
文章生成后,还可以进行一次上下文检查:
请检查文章中的每个事实性结论,
将内容分为:
1. 已有资料支持
2. 作者经验判断
3. 仍然需要核实
这样可以降低 AI 生成文章时出现错误信息的风险。
十一、开发者如何设计上下文?
在 AI 应用中,可以把上下文分成几个明确的区域。
系统规则
↓
用户与任务信息
↓
历史对话摘要
↓
知识库检索结果
↓
工具调用结果
↓
当前用户问题
↓
输出格式约束
建议不同来源的信息使用清楚的边界。
例如:
【系统规则】
只根据提供的资料回答,不要编造。
【用户信息】
用户角色:普通成员
所属地区:中国大陆
【检索资料】
来源:产品帮助文档
更新时间:2026-02-10
内容:……
【工具结果】
订单状态:已完成
发票状态:未申请
【用户问题】
这个订单现在能申请发票吗?
这种结构可以帮助模型区分规则、资料、工具结果和用户输入。
同时,还应该给不同信息设置优先级:
系统安全规则
高于
业务规则
高于
工具返回结果
高于
知识库资料
高于
用户自然语言要求
这在 Agent 和自动化系统中尤其重要,否则外部文档中的恶意内容可能影响模型行为。
十二、如何管理长对话上下文?
随着对话轮数增加,历史上下文会越来越长。
如果每次请求都携带完整对话,可能导致成本和延迟不断增加。
常见处理方法包括:
1. 只保留最近几轮
适合短期聊天和简单问答。
保留系统规则
保留最近 5 到 10 轮对话
删除过早且无关的内容
2. 对历史对话进行摘要
当会话变长时,把早期内容压缩成结构化摘要。
当前目标
已经确认的信息
已经完成的步骤
尚未解决的问题
用户新增的约束
后续只携带摘要和最近对话。
3. 按主题保存
如果一个会话中讨论了多个主题,可以分别保存,当前任务只加载相关主题。
4. 按需检索历史记录
不把全部历史内容放入上下文,而是在需要时检索相关对话。
无论采用哪种方式,都要避免摘要改变原意。涉及关键数字、路径、代码和业务规则时,最好保留原始内容或引用位置。
十三、不同模型需要不同的上下文吗?
需要。
不同模型在上下文长度、指令遵循、工具调用和复杂推理方面可能存在差异。
同一套上下文直接交给不同模型,结果未必一致。
例如:
- 轻量模型更适合短而明确的上下文
- 均衡模型可以处理常规文档和多轮任务
- 推理模型更适合复杂约束和多步骤分析
- 长上下文模型适合处理大型文档或代码库
- 支持工具调用的模型更适合 Agent 场景
开发者应该使用真实任务进行测试,而不是只根据模型参数判断。
如果需要在多个客户端或开发工具中比较模型,可以使用兼容 OpenAI 接口格式的统一接入方式。例如 https://transitai.chat/ 这类模型中转服务,可作为集中配置 API Key、Base URL 和模型名称的一种参考。
测试时,应尽量保持以下条件一致:
相同任务
相同上下文
相同输出要求
相近生成参数
相同评估标准
然后比较不同模型的:
- 任务完成率
- 事实准确性
- 指令遵循能力
- 响应时间
- Token 消耗
- 结构化输出稳定性
- 单任务调用成本
具体支持哪些模型、接口参数和工具调用能力,应以接入平台的实际文档为准。
十四、上下文工程需要注意哪些安全问题?
上下文中可能包含用户数据、业务资料和外部工具结果,因此安全问题不能忽略。
1. 不要提交不必要的敏感信息
如果任务不需要,就不要把以下内容放入上下文:
- 密码
- API Key
- 私钥
- 客户身份信息
- 完整合同
- 生产数据库数据
- 公司核心源代码
2. 区分可信和不可信内容
网页、邮件、用户上传文档和工具返回内容都可能包含恶意指令。
系统应该明确标记:
系统指令
可信业务数据
用户输入
外部不可信内容
不能让外部文档覆盖系统安全规则。
3. 控制工具权限
如果 AI 可以读取文件或调用业务接口,应遵循最小权限原则。
只开放任务需要的目录、数据表和操作。
4. 设置上下文生命周期
敏感上下文不应该无限期保存。
系统需要明确:
- 数据保存多久
- 是否写入日志
- 用户能否删除
- 是否用于训练
- 第三方服务如何处理数据
使用官方接口或 transitai.chat 等第三方统一接入服务时,都应该先了解相应的数据处理规则,再决定可以提交哪些内容。
十五、关于上下文工程的几个常见误区
误区一:上下文越长,回答越准确
不一定。过多无关信息会稀释重点,也会增加成本。
误区二:模型上下文窗口大,就能理解所有内容
上下文能放进去,不等于模型能准确使用其中每一处信息。
误区三:使用 RAG 就等于做好了上下文工程
RAG 只解决知识检索的一部分问题,还需要处理用户信息、历史对话、工具结果和系统规则。
误区四:把全部历史对话发给模型最保险
过期或冲突的历史信息可能干扰当前任务。
误区五:换成更强模型就不需要管理上下文
模型再强,也无法可靠理解没有提供的信息。
误区六:上下文只影响回答质量
上下文还会影响响应速度、Token 消耗、调用费用和数据安全。
十六、一个可以直接使用的上下文模板
普通用户可以使用下面这个模板组织复杂任务:
【任务目标】
我希望 AI 最终完成什么?
【使用场景】
结果会用在哪里,面向什么人?
【必要背景】
完成任务前必须知道哪些信息?
【参考材料】
需要依据哪些文档、代码或数据?
【已知限制】
有哪些不能改变的条件?
【输出格式】
最终结果应该如何组织?
【判断标准】
什么样的结果才算完成?
【不确定信息】
遇到资料不足时,请明确指出,不要编造。
开发者可以进一步增加:
【工具权限】
允许调用哪些工具?
【数据来源】
哪些内容可信,哪些需要核验?
【失败处理】
工具调用失败时应该如何处理?
【安全规则】
哪些操作需要人工确认?
【上下文预算】
最多允许使用多少 Token?
这个模板不需要每次全部填写,但任务越复杂,越有必要把关键信息补充完整。
十七、写在最后
提示词仍然重要,但只研究提示词已经无法覆盖复杂 AI 应用中的所有问题。
当 AI 开始进入代码开发、知识库问答、资料分析、MCP 工具调用和 Agent 工作流后,决定结果质量的往往不只是“问题怎么问”,还有:
- 模型看到了哪些信息
- 信息是否准确和相关
- 历史内容是否已经过期
- 工具结果是否可信
- 不同内容如何排列
- 上下文是否超过必要范围
- 敏感数据是否受到保护
可以把上下文工程概括成一句话:
在模型回答之前,为它准备完成当前任务真正需要的信息。
对于普通用户来说,上下文工程意味着提问时补充目标、背景、材料、限制和输出格式。
对于开发者来说,它还意味着设计知识检索、记忆管理、工具连接、权限边界和上下文压缩策略。
如果需要在不同模型之间验证同一套上下文,可以通过 transitai.chat 这类兼容接口入口进行统一配置和对比测试,但最终仍应以模型的真实任务表现、接口文档和数据处理规则为准。
更多推荐



所有评论(0)