做 Agent 之后我才明白:不是提示词不行,是上下文没做对
本文深入解析了构建高效AI Agent的关键——上下文工程(Context Engineering)。作者通过Google/Kaggle课程学习后指出,Agent的核心不是提示词,而是动态管理上下文信息。文章提出上下文三层次架构(规则层、证据层、状态层),揭示了常见Agent失效原因(信息过载、状态缺失),并给出解决方案:事件/状态分离、信息压缩提纯、记忆管理流水线。最后提供10项自查清单,强调上
更加完善准确的文章内容在我的公众号:破茧Plan,欢迎关注.
我把 Google 的 Agent 课程啃完后,才真正搞懂:Agent 不是“写提示词”,而是“做上下文工程”
先说明一下:这篇内容不是白皮书原文,是我把 Google / Kaggle 那套 Agent 课程里讲“Context Engineering”的部分读完、消化后,按我的理解整理出来的笔记和框架。
如果你也在做 Agent(客服/销售/数据助理/工作流自动化),很可能遇到过这种尴尬:
• Demo 很丝滑,上线就开始胡说八道
• 轮次一多就变慢、变贵、变不稳定
• 工具越接越多,反而越像“随机漫步”
• 你以为是模型不够强,结果换更强的也救不了
我后来发现,很多问题根本不在“模型能力”,而在你给模型的上下文。
同一个模型,有的人能做出生产级 Agent,有的人只能做玩具。差别往往就是:上下文有没有工程化。
1)为什么“提示词工程”救不了 Agent?
提示词(Prompt)更像一段“固定开场白”:告诉模型你是谁、要做什么、语气如何、有哪些边界。
但 Agent 不是一次性回答,它是一个持续运行的系统。每一步都要依赖:
• 用户是谁、偏好是什么(长期信息)
• 目前任务进行到哪一步(状态)
• 刚刚调用工具得到什么结果(证据)
• 过去几轮说过什么、哪些话是关键(历史)
• 还有你希望模型按什么方式推理、用哪些工具(规则)
这些东西不是一段静态 Prompt 能解决的,而是需要你在每一轮把“当下最重要的信息”拼装成一个资料包喂给模型。
这件事,我更愿意叫它:上下文工程(Context Engineering)。
一句话解释:
Prompt 是“怎么说”,上下文工程是“给它看什么”。
2)一个“能打的上下文”到底长什么样?
我把上下文粗暴分成三类,你可以对照你现在的 Agent 看看缺了哪块:
A. 规则层:告诉它“怎么做”
• 系统指令(角色、边界、输出格式)
• 工具说明(能调用哪些接口、参数是什么)
• 必要的示例(你希望它怎么思考、怎么写答案)
这层决定“方向”和“行为”。
B. 证据层:告诉它“事实是什么”
• 检索到的文档片段(RAG)
• 工具返回的数据(搜索、数据库、接口结果)
• 文件/图片/表格等外部材料
这层决定“靠谱不靠谱”。没有证据层,模型就会靠猜。
C. 当前态:告诉它“现在发生了什么”
• 用户本轮问题
• 任务状态(例如:已确认需求 / 待补充信息 / 已生成方案待审核)
• 必要的历史摘要(不是全量聊天记录)
这层决定“连贯”和“能不能推进任务”。
很多 Agent 做不稳,是因为把 B 和 C 当成了“堆聊天记录”。
聊天记录一长,就会出现“噪音越来越多、关键点越来越稀释”的问题:模型注意力被水掉了。
3)上下文为什么会越聊越崩:不是玄学,是结构问题
你一定见过两种崩法:
① 越聊越慢、越聊越贵
因为你把越来越长的历史塞进去了,Token 一路涨,成本和延迟自然就涨。
② 越聊越不聪明(甚至开始胡扯)
这就是我最在意的:信息变多不等于变强。
当上下文里废话、重复、冲突信息越来越多,模型更容易抓错重点,甚至被旧信息带偏。
所以“让它记住更多”并不是万能解,关键在于:
记住什么、忘掉什么、以什么形式记、什么时候取出来。
4)把会话拆开:Events 和 State(这一步很多人没做)
我建议你把“会话数据”拆成两种:
Events:发生过什么(不可变日志)
• 用户说了什么
• 模型回了什么
• 调过哪些工具、工具返回了什么
Events 是“记录”,适合追溯,也适合让模型从最近的过程里学习(比如照着你的示例风格输出)。
State:现在是什么状态(可变快照)
• 当前任务进度
• 关键参数(比如用户已确认的需求点)
• 中间变量(比如提取出来的字段、已选方案)
State 是“控制面”,适合驱动流程。
重点:State 不会自动出现在对话里,需要你显式地注入给模型,比如一段结构化 JSON。
很多 Agent 失败就是因为:
• 只堆 Events(聊天记录越堆越乱)
• 没有 State(导致每一轮都像重开一局)
5)怎么解决“上下文变长变乱”?核心是“压缩”和“提纯”
这里不是让你粗暴截断,而是追求一件事:高信噪比。
常见做法我总结成三类:
① 截断(最简单)
只保留最近 N 轮,或者最近 M tokens。
适合短流程、对长期一致性要求不高的任务。
② 摘要(更通用)
定期把旧对话总结成“关键结论”,替换掉长段历史。
注意:摘要不是复述,而是“只保留会影响后续决策的点”。
③ 触发机制(工程化的关键)
不要每轮都总结,那样太贵。可以按这些条件触发:
• 达到轮数 / token 阈值
• 任务阶段完成(比如“需求确认结束”)
• 用户长时间不活跃(下一次进来时再做一次整理)
6)记忆(Memory)不是“多存点向量”这么简单
很多人做 Memory 的第一反应是:上向量库,把每轮对话都嵌入,然后相似度检索。
问题是:你会得到一堆碎片——重复的、过时的、互相冲突的。
我更认可的做法是把 Memory 当成一条“数据加工流水线”:
Step 1:抽取(Extraction)
从对话里提取“事实”和“偏好”,过滤寒暄和噪音。
比如:
• 用户是做跨境电商的
• 更喜欢要点式输出
• 目前在做一个客服 Agent
Step 2:整合(Consolidation)
新信息来了,要做判断:
• 更新(UPDATE):用户偏好变了
• 删除(DELETE):旧信息不再成立
• 忽略(IGNORE):重复/无意义
• 新增(CREATE):第一次出现的关键事实
这一步非常关键,不做整合,你的 Memory 会越用越乱。
Step 3:检索(Retrieval)
检索不应该只看“语义相似度”,还要看:
• 相关性(Relevance)
• 新近性(Recency)
• 重要性(Importance)
否则你会把“很像但不重要/过时”的东西也塞进上下文。
7)我自己做 Agent 时的一个小结:真正的难点是“上下文拼装”
把上面的东西落到工程上,其实就是每轮在做四件事:
1. 取信息:从会话、状态、记忆、知识库里取出可能相关的材料
2. 筛信息:按相关性/重要性/时效性排序,删掉噪音
3. 组信息:用固定模板把规则、证据、状态、问题拼成上下文
4. 写回去:把本轮的新事实抽取后写入记忆(最好异步,不阻塞用户)
做对这四步,模型不需要换最贵的,也能稳定很多。
8)给你一份“上下文工程自查清单”(强烈建议收藏)
如果你现在就想定位 Agent 为什么不稳,用这 10 个问题排雷:
1. 你的上下文里:规则/证据/状态有没有分区?还是一锅粥?
2. 你是“堆聊天记录”,还是“按任务动态拼装”?
3. 有明确 State 吗?还是每轮都让模型自己猜进度?
4. 工具返回结果有没有结构化放进上下文?还是散落在对话里?
5. 你如何控制 token?有截断/摘要机制吗?
6. 摘要是“复述”,还是“只保留影响后续决策的点”?
7. Memory 是否做新旧整合?还是只增不减?
8. 检索是否考虑时效性、重要性?
9. 上下文里是否存在冲突信息?谁来裁决?
10. 你能不能清楚说出:这一轮模型为什么会做出这个决定?(可解释性)
最后:如果你想把 Agent 做到“能上线”,上下文工程才是主战场
我写这篇不是为了抬概念,而是因为:
Agent 真的不是“提示词写得好看”就能搞定的东西。
你只要把上下文工程这件事做扎实,会明显感觉到:
• 回答更稳定
• 幻觉更少
• 任务推进更顺
• 成本也更可控
更加完善准确的文章内容在我的公众号:破茧Plan,欢迎关注.
更多推荐


所有评论(0)