目录
[Context Engineering:Prompt不再是核心](#Context Engineering:Prompt不再是核心)
[01|Prompt 不是消失了,而是退到了最后一层](#01|Prompt 不是消失了,而是退到了最后一层)
[02|什么是 Context Engineering?](#02|什么是 Context Engineering?)
[03|企业 SaaS Agent 的上下文分层](#03|企业 SaaS Agent 的上下文分层)
[05|Context Schema:上下文需要结构化](#05|Context Schema:上下文需要结构化)
[06|一个企业 SaaS 问题的上下文装配示例](#06|一个企业 SaaS 问题的上下文装配示例)
[07|Context 与 RAG、Memory 和安全边界](#07|Context 与 RAG、Memory 和安全边界)
[09|Context Engineering 的落地架构](#09|Context Engineering 的落地架构)
[10|总结:Agent 的核心不是 Prompt,而是上下文控制权](#10|总结:Agent 的核心不是 Prompt,而是上下文控制权)

Context Engineering:Prompt不再是核心
摘要: Prompt 只是模型最终看到的表达层。真正决定 Agent 稳定性的,是上下文的来源、结构、可信度、权限边界与装配方式。
上一篇我们讲到,AI Agent 正在从 Prompt Engineering 走向 Platform Engineering。这一篇继续往下拆:为什么 Prompt 已经不再是 AI Agent 的核心?
很多人做 Agent 的第一反应是优化 Prompt:
-
角色描述再具体一点
-
约束条件再多写一点
-
输出格式再严格一点
-
Few-shot 示例再补几个
-
失败场景再提示一下
这些做法有价值,但它们解决的是"模型应该怎么思考和输出"。真正进入企业 SaaS 场景后,更大的问题往往不是模型不知道怎么回答,而是模型拿到的上下文不完整、不可信、不稳定。
同样一个问题:
用户发现报表结果与业务记录不一致,希望系统协助定位。
如果只把这句话丢给模型,模型最多只能猜。
但如果系统同时提供:
-
当前用户属于哪个租户
-
用户能访问哪些组织和模块
-
相关组织、项目和业务对象
-
报表结果及其来源记录
-
相关工单历史
-
第三方系统同步状态
-
最近一次配置变更记录
-
权限校验结果
-
风险动作边界
-
历史类似 case 的处理路径
模型才能真正参与分析。所以,Agent 的关键能力不再是"写一段更聪明的 Prompt",而是"在每次推理前,为模型装配一份正确、可信、可控、可追踪的上下文"。这就是 Context Engineering。

01|Prompt 不是消失了,而是退到了最后一层
先明确一点:说 Prompt 不再是核心,不等于 Prompt 不重要。
Prompt 仍然负责告诉模型:
-
你是什么角色
-
你要完成什么任务
-
你应该遵守哪些规则
-
你应该按什么格式输出
-
遇到不确定信息时如何处理
-
哪些行为不能做
但在企业 Agent 中,Prompt 更像是最后一层"推理指令",而不是系统本身。
真正决定模型表现的,是 Prompt 前面那套上下文装配过程:
-
用户输入是什么?
-
历史上下文是什么?
-
业务事实是什么?
-
检索证据是什么?
-
工具结果是什么?
-
哪些信息可信?
-
哪些信息只是弱证据?
-
当前用户有什么权限?
-
哪些动作有风险?
-
这次执行过程如何被记录和复盘?
如果这些内容缺失,Prompt 写得再好也很难稳定。一个典型错误是:把所有问题都归因于 Prompt。
-
回答不准:是不是 Prompt 没写清楚?
-
路由错了:是不是 Prompt 要加规则?
-
工具调用错了:是不是 Prompt 要多举例?
-
越权风险:是不是 Prompt 要强调不能越权?
-
结果不可复盘:是不是 Prompt 要输出更多字段?
有些问题确实可以通过 Prompt 改善,但很多问题本质上是上下文工程没做好。
比如:
-
模型不知道用户属于哪个租户。
-
模型看到的是过期业务状态。
-
模型拿到了未经校验的截图 OCR 文本。
-
模型把用户历史描述当成了当前事实。
-
模型没有拿到权限上下文。
-
模型无法区分 RAG 文档、工具结果和用户原话的可信度。
-
模型拿到了太长历史,只能在噪声里猜重点。
这些都不是"多写两句 Prompt"能根治的问题。
02|什么是 Context Engineering?
Context Engineering 可以理解为:围绕一次 Agent 推理,把所有可能影响决策的信息收集、清洗、分层、压缩、校验、注入和记录的工程过程。 它不是简单地把材料拼成一个大字符串。
一个完整的 Context Engineering 至少包括八个动作:
-
收集:从用户输入、历史、RAG、工具、多模态、权限系统中收集信息。
-
归一:把不同来源的信息转成统一 Evidence / Context Schema。
-
分层:区分当前请求、短期历史、长期记忆、知识库、工具结果和权限上下文。
-
可信度标注:为每条证据标记来源、置信度、时间、是否经过工具确认。
-
冲突处理:发现 OCR、用户描述、工具结果、历史记录之间的不一致。
-
裁剪压缩:在 Token 预算内保留最相关信息,而不是全部塞入 Prompt。
-
安全过滤:把用户文本、RAG、工具输出都当成不可信证据,不当成系统指令。
-
快照记录:保存本次上下文版本,便于复盘、评测、回放和优化。
所以 Context Engineering 不是 Prompt 技巧,而是 Agent Runtime 前面的一条数据流水线。它的目标不是让 Prompt 更长,而是让 Prompt 更干净。

图|企业 Agent 上下文从采集、治理到推理消费的完整链路
03|企业 SaaS Agent 的上下文分层
企业 Agent 最容易犯的错误,是把所有上下文混在一起。
-
用户原话
-
历史消息
-
系统配置
-
RAG 文档
-
工具结果
-
权限信息
-
用户偏好
-
执行中间状态
-
人工反馈
-
评测结果
这些内容看起来都叫"上下文",但它们的生命周期、可信度、使用方式完全不同。如果不分层,系统后期一定会混乱。
当前请求上下文:这一次任务正在发生什么
当前请求上下文是最短生命周期的信息。
它通常包括:
-
请求标识
-
会话标识
-
租户标识
-
用户标识
-
当前用户问题
-
附件信息
-
当前选择的业务模块
-
本轮抽取出来的实体
-
本轮工具调用状态
-
本轮 Agent 执行中间结果
这类信息只服务于当前请求或当前 case,不应该被当成长久记忆。
例如用户说:
这次帮我看 A 项目 6 月的业务报表。
这里的 A 项目、6 月业务报表 是当前任务上下文,不应该自动写成长期用户偏好。
短期会话上下文:这轮对话前面发生了什么
短期会话上下文用于理解多轮对话。
比如:
-
用户上一轮补充了客户名称。
-
用户刚刚上传了一张报错截图。
-
系统上一轮已经提示缺少统计周期。
-
用户已经确认要查看的是生产环境数据。
这类信息通常来自最近几轮消息和会话摘要。关键点是:不能把完整历史无脑塞给模型。
更合理的做法是:
-
最近 3-5 轮原始消息
-
- 会话摘要
-
- 当前任务相关的历史实体
-
- 上一轮 Agent outcome
这样既保留连续性,又不会让模型在冗长历史里丢失重点。
Checkpoint:执行状态,不是 Prompt 材料库
很多 Agent 项目会用 Checkpoint 保存执行状态。
Checkpoint 的作用是:
-
保存当前图状态
-
支持中断恢复
-
支持 Human-in-the-loop resume
-
支持失败后继续执行
-
支持同一执行线程下的状态延续
但 Checkpoint 不等于 Prompt。一个常见误区是:把完整 checkpoint 或完整 messages 直接塞进 Prompt。
这会带来三个问题:
-
Token 快速膨胀
-
中间状态噪声干扰模型
-
敏感字段和内部控制信息泄露给模型
更合理的做法是:Checkpoint 存执行状态,Prompt 只消费经过裁剪后的必要上下文。
换句话说:
-
Checkpoint 负责恢复执行。
-
Context Assembly 负责组装推理输入。
-
两者不能混成一个东西。
长期记忆:稳定事实和偏好,不是业务数据库
长期记忆用于保存跨会话稳定信息。
例如:
-
用户常用语言
-
用户偏好的回复风格
-
用户所在组织的常见业务模块
-
用户明确要求长期记住的偏好
-
经过确认的稳定事实
长期记忆不应该保存:
-
临时工单内容
-
一次性的账号或业务对象信息
-
未经确认的用户猜测
-
敏感原文
-
密钥、证件号、完整手机号等隐私信息
长期记忆必须按租户、用户和组织隔离,同时记录信息来源、可信度、有效期和隐私处理策略,并提供删除与修正机制。
否则记忆会从"帮助模型理解用户"变成"不可控的信息污染源"。
RAG / 业务知识:外部知识,不是用户记忆
RAG 解决的是知识检索问题。
它适合放:
-
产品文档
-
帮助中心
-
SOP
-
接口文档
-
配置说明
-
错误码说明
-
业务规则
-
历史 FAQ
但 RAG 不适合替代用户记忆,也不适合替代业务数据库。
例如:
-
某个租户当前有没有开通功能
-
某个账号现在有没有权限
-
某项业务数据当前是否已修订
-
某个审批流现在卡在哪个节点
这些是实时业务状态,应该通过业务 API 或只读工具查询,而不是从 RAG 文档里猜。所以在企业 Agent 里,RAG 只是上下文的一层,不是上下文的全部。
工具结果:强证据,但也需要边界
工具调用结果通常比用户描述、OCR、RAG 更接近真实业务状态。
例如:
-
查询账号权限
-
查询报表来源记录
-
查询审批节点
-
查询同步任务状态
-
查询配置变更记录
-
查询操作日志
但工具结果也不能无脑相信。
需要记录:
-
工具名称
-
调用参数
-
返回时间
-
数据版本
-
是否成功
-
是否超时
-
是否部分失败
-
是否命中权限过滤
如果工具返回的是第三方系统数据,还要考虑同步延迟和数据一致性。
多模态证据:只能作为证据,不能直接当事实
企业 SaaS 场景里,用户可能会上传:
-
后台截图
-
报错弹窗
-
审批页面截图
-
报表截图
-
配置页面截图
-
语音说明
-
操作录屏片段
OCR、ASR、VLM 可以把这些内容转成文本和结构化线索。但这些结果应该被标记为 Evidence,而不是最终事实。
因为:
-
OCR 可能识别错字符。
-
ASR 可能听错专有名词。
-
VLM 可能误判页面含义。
-
截图可能是历史截图,不代表当前状态。
-
用户可能上传了不相关附件。
正确做法是:
-
多模态模型负责提取线索。
-
Context Merge 负责合并证据。
-
业务工具负责确认事实。
-
Runtime 负责权限和风险边界。
权限和风险上下文:必须进入推理前置条件
企业 Agent 不能只关心"怎么回答",还要关心"能不能回答、能不能查、能不能做"。
权限上下文应该包括:
-
当前用户角色
-
当前租户范围
-
当前组织范围
-
可访问模块
-
可调用工具
-
可见字段
-
敏感数据脱敏规则
-
高风险动作策略
-
是否需要人工审核
这类上下文不能只靠 Prompt 表达。
Prompt 可以提醒模型:
-
不要越权。
-
高风险动作需要人工审核。
但真正的边界必须由代码执行:
-
Agent Catalog 过滤可用能力
-
执行前权限校验 做执行前校验
-
Action Allowlist 限制可执行动作
-
High Risk Policy 生成审批提案
模型可以提出建议,不能决定越权执行。
04|上下文不是越多越好
很多人做 Agent,第一反应是"把更多信息给模型"。这在早期 Demo 里可能有效,但在生产里很危险。因为上下文越多,不代表效果越好。
它可能带来:
-
Token 成本上升
-
延迟变高
-
关键信息被噪声淹没
-
历史错误被重复放大
-
敏感信息暴露
-
提示词注入攻击面变大
-
模型更难判断信息优先级
真正的 Context Engineering,重点不是"多",而是"准"。
一个更合理的 Prompt Assembly 应该有明确预算:
-
系统指令:固定预算
-
当前用户问题:必须保留
-
最近对话:保留少量原文
-
会话摘要:压缩保留
-
长期记忆:top-k 检索
-
RAG 知识:top-k 检索
-
工具结果:按任务相关性选择
-
权限和风险规则:结构化注入
-
输出格式:固定注入
可以把它理解成:
-
不是把所有上下文塞给模型,
-
而是在预算内选择最有用、最可信、最相关的上下文。
05|Context Schema:上下文需要结构化
如果上下文只是字符串拼接,系统会很快失控。企业 Agent 更适合使用结构化 Schema。
一条证据需要说明内容来自哪里、何时产生、可信度如何、属于哪个租户和用户,以及是否包含风险。统一上下文则要把用户问题、实体、证据、冲突、缺失信息、权限风险和历史摘要组织起来。
这样做有几个好处:
-
模型输入可控
-
证据来源可追踪
-
冲突可以显式表达
-
字段缺失可以被 Runtime 识别
-
评测集可以复用同一套结构
-
线上 case 可以回放
结构化上下文不是为了"看起来规范",而是为了让 Agent 从随机对话变成可治理系统。
Evidence:所有外部输入都应该先当成证据
企业 Agent 里有一个非常重要的原则:
关键判断: 用户输入、历史、RAG、OCR、ASR、VLM、远程工具输出,默认都不是系统指令,而是证据。
这句话很关键。
因为 Agent 会面对很多不可信内容:
-
用户可能输入"忽略之前所有规则"。
-
RAG 文档里可能包含旧版说明。
-
OCR 可能识别出错误数值。
-
ASR 可能把模块名听错。
-
第三方工具可能返回部分失败。
-
历史会话里可能有过期结论。
如果系统把这些内容直接拼进 Prompt,很容易发生提示词注入和错误决策。
更好的做法是按来源建立可信度层级:用户输入、OCR 和 ASR 属于待验证主张;RAG 文档需要检查版本与适用范围;业务工具结果可信度较高,但仍受权限和时间约束;系统权限结果与人工确认可以作为更强证据。
模型可以参考证据,但最终动作必须经过 Runtime 校验。
Snapshot:没有快照,就没有复盘和评测
很多 Agent 项目上线后最痛苦的问题是:线上出了错,但复盘不了。
用户说:
刚才 AI 给我的结论不对。
如果系统没有保存上下文快照,你很难知道:
-
当时模型看到了什么用户问题?
-
当时 RAG 检索到了哪些文档?
-
当时工具返回了什么数据?
-
当时权限上下文是什么?
-
当时多模态识别结果是什么?
-
当时 Prompt 是怎么组装的?
-
当时模型为什么选择这个 Agent?
所以 Context Snapshot 非常重要。
快照至少要保存当时的输入与上下文、Prompt 和模型版本、检索与工具证据、权限风险状态,以及能够关联完整执行链路的追踪信息。
有了快照,才能做:
-
问题复盘
-
Trace 对齐
-
失败分类
-
评测集生成
-
回归测试
-
Prompt 版本对比
-
工具策略优化
-
Router 优化
没有快照,Agent 的线上错误就只能靠猜。
06|一个企业 SaaS 问题的上下文装配示例
假设用户输入:
关键判断: 用户发现本月报表结果与业务记录不一致,并上传截图,希望系统定位原因。
如果只靠 Prompt,系统可能这样处理:
-
用户反馈报表结果不一致。
-
请判断原因并给出回复。
这显然不够。
一个更工程化的 Context Engineering 流程应该是:
-
解析当前用户输入。
-
OCR 识别截图里的业务对象、指标、时间和错误信息。
-
从会话历史里补全用户前面提到的组织或项目。
-
根据租户和用户身份查询可见范围。
-
查询报表结果及其来源记录。
-
查询相关配置、同步日志和变更历史。
-
确认最近是否发生规则调整、版本发布或数据重算。
-
合并证据,标记哪些是截图线索,哪些是系统事实。
-
检测冲突:截图结果和当前系统快照是否一致。
-
判断是否涉及敏感数据修订、权限变更或批量操作。
-
生成只读诊断结论;需要变更时,只输出人工审核提案。
-
保存上下文快照和 Trace,便于后续复盘。
最后进入模型的上下文,不是所有原始信息,而是一份压缩后的结构化材料:
-
当前问题:用户认为某项业务报表与实际记录不一致,并上传了截图。
-
已确认事实:用户有查看对应组织和项目数据的权限;系统快照中的指标值为 X;该指标由多类来源记录聚合而成;最近发生过一次统计规则调整。
-
弱证据:OCR 从截图中识别到指标值 Y,但置信度有限;截图时间可能属于上一统计周期。
-
冲突:截图结果与当前系统快照不一致,截图周期也与用户描述不完全一致。
-
风险边界:当前只能做只读诊断;敏感数据修订、历史数据重算、权限变更和批量配置必须人工审核。
-
输出要求:先解释已确认事实,再指出仍需确认的信息,不自动修改任何业务数据。
这时 Prompt 才真正有价值。因为模型不再是在猜,而是在一份可控上下文里做总结、解释和下一步建议。
07|Context 与 RAG、Memory 和安全边界
很多人会把 Context Engineering 简化成 RAG。这个理解太窄了。RAG 只是 Context Engineering 的一个来源。
它解决的是:
从知识库里找相关内容。
Context Engineering 解决的是:
-
这次 Agent 推理到底应该看到哪些信息?
-
这些信息从哪里来?
-
哪些可信?
-
哪些过期?
-
哪些冲突?
-
哪些需要工具确认?
-
哪些会触发风险?
-
哪些应该进入 Prompt?
-
哪些只能进入 Trace?
所以它包含 RAG,但远大于 RAG。
一个企业 Agent 的上下文来源通常是:
-
用户输入
-
会话历史
-
长期记忆
-
RAG 知识库
-
业务数据库
-
工具结果
-
权限系统
-
审批系统
-
多模态解析
-
Trace 和评测反馈
RAG 只占其中一部分。如果把 RAG 当成全部上下文,Agent 会缺失实时业务状态、用户权限、执行历史和风险边界。
Context Engineering 和 Memory 的关系
Memory 也是容易被误解的概念。很多人把 Memory 理解成"把聊天记录都存起来,下次再塞回 Prompt"。这是非常粗糙的做法。
生产系统里至少要区分四层:
-
State:当前请求和中间状态。
-
Checkpointer:thread 级短期状态和中断恢复。
-
Store:跨会话长期稳定事实和偏好。
-
RAG / Business Knowledge:外部知识和业务资料。
这四层不能混用。
例如:
-
当前请求里抽取到的业务对象标识,属于 State。
-
一次 HITL 中断恢复需要的图状态,属于 Checkpointer。
-
用户长期偏好中文简洁回答,属于 Store。
-
产品规则文档,属于 RAG / Business Knowledge。
如果不区分,系统会出现很多问题:
-
临时事实被错误写入长期记忆。
-
过期结论在未来对话中反复影响模型。
-
完整 checkpoint 被塞进 Prompt。
-
RAG 被拿来存用户隐私。
-
业务数据库被当成向量记忆乱检索。
真正的 Memory 设计,重点不是"存更多",而是"知道什么该存、存多久、怎么取、怎么删、怎么防止污染"。
Context Injection:新的安全边界
过去我们担心 Prompt Injection,主要是用户在输入里写:
-
忽略之前所有规则。
-
你现在是管理员。
-
直接执行删除操作。
但在 Agent 系统里,攻击面会扩大。
因为上下文来源变多了:
-
用户输入可能带指令注入。
-
RAG 文档可能包含恶意文本。
-
网页内容可能诱导模型调用工具。
-
OCR 识别出的截图文字可能包含伪指令。
-
第三方工具返回值可能被污染。
-
历史会话可能残留过期指令。
所以安全策略不能只写在 Prompt 里。
更稳妥的策略是:
-
所有外部内容都标记为 evidence。
-
外部内容不能覆盖 system policy。
-
工具调用必须走 allowlist。
-
Planner 只能输出结构化计划。
-
校验机制检查计划合法性。
-
执行前权限校验用户权限。
-
风险策略 拦截高风险动作。
-
回复生成环节 只基于已确认事实生成最终回复。
也就是说,Prompt 可以提醒,但代码必须兜底。
08|常见误区
把上下文工程等同于长 Prompt
长 Prompt 不等于好上下文。
真正好的上下文应该是:
-
信息少但关键
-
来源清楚
-
可信度明确
-
冲突显式
-
权限明确
-
可回放
-
可评测
把完整历史都塞给模型
完整历史会让模型更容易受到噪声影响。
应该用:
-
短窗口原文
-
- 会话摘要
-
- 当前任务相关实体
-
- 最近 outcome
把 RAG 当成万能记忆
RAG 适合知识检索,不适合保存临时业务状态和用户隐私。
把 Checkpoint 当成用户记忆
Checkpoint 是执行恢复机制,不是长期记忆系统,也不是 Prompt 材料库。
只靠 Prompt 做权限控制
权限必须由代码、策略和执行网关控制。模型可以建议,不能授权自己执行。
不保存上下文快照
没有快照,Agent 就无法复盘、评测和持续优化。线上错误会变成一次性事故,而不是可沉淀的数据资产。
09|Context Engineering 的落地架构
一个更完整的企业 Agent 上下文架构,可以这样设计:
执行流程: 用户输入 → 请求解析 → 多模态证据收集 → 知识检索 → 业务数据读取 → 权限上下文加载 → 历史与记忆检索 → 上下文合并 → 冲突检测 → 风险上下文构建 → 上下文快照 → 预算内组装 → Agent Runtime
每一层都有清晰职责:
-
请求解析:识别当前任务、输入模态和必要约束。
-
证据收集:汇总知识、实时数据、权限与历史信息。
-
检索与读取:分别处理长期知识和实时业务状态。
-
权限过滤:在进入推理前裁剪不可见、不可用的信息。
-
合并归一:统一证据格式,完成去重与时效判断。
-
冲突检测:识别不同来源之间的不一致。
-
风险构建:补充高风险动作所需的限制条件。
-
快照留存:保存本次推理实际使用的上下文版本。
-
预算内组装:按优先级生成最终模型输入。
-
运行执行:完成计划、校验、工具调用和结果聚合。
这套链路形成后,Prompt 才能从"万能补丁"回到它应该做的事情:指导模型在清晰上下文里完成推理和表达。

10|总结:Agent 的核心不是 Prompt,而是上下文控制权
AI Agent 的能力,不只取决于模型有多强,也不只取决于 Prompt 写得多细。
在企业场景里,更关键的是上下文控制权:
-
系统知道应该给模型什么信息。
-
系统知道哪些信息不能给模型。
-
系统知道哪些信息可信。
-
系统知道哪些信息需要工具确认。
-
系统知道哪些信息会触发权限和风险。
-
系统知道如何保存上下文以便复盘和评测。
Prompt Engineering 解决的是"如何表达任务"。 Context Engineering 解决的是"模型基于什么事实执行任务"。
这就是为什么 Prompt 已经不再是 AI Agent 的核心。真正的核心,是围绕 Agent Runtime 构建一套可治理的上下文系统。下一篇,我们继续讲:Workflow 为什么不够?企业为什么开始建设 Agent Runtime?
感谢阅读与关注。如果文章对你有所启发,欢迎在评论区交流企业 AI Agent 落地过程中遇到的问题。