RAG已经过时了吗?2026年最该学的,其实是AI Agent的上下文工程
摘要:RAG 没有过时,但它已经从“主架构”变成了 Agent 上下文工程中的一个关键组件。RAG 仍然重要Elastic 和 Weaviate 的资料都明确指出,RAG 仍是给模型补足外部知识的关键方式,尤其在企业知识库、文档问答、搜索增强场景中不可替代。但 Agentic AI 需要的上下文远不止文档片段进入 Agent 场景后,模型需要处理任务状态、工具调用结果、执行轨迹、审批状态、长期记忆
RAG已经过时了吗?2026年最该学的,其实是AI Agent的上下文工程
过去两年,很多团队把“做 AI 应用”理解成“向量库 + Embedding + RAG + 大模型”。这套架构确实解决了不少企业知识问答问题,但到 2026 年,如果你的目标从“回答问题”升级到“完成任务”,仅靠传统 RAG 就不够了。
OpenAI 在 2026-04-15 发布的 Agents SDK 新能力中,重点已经不是单轮问答,而是面向长流程任务的 agent 基础设施:configurable memory、sandbox-aware orchestration、文件系统工具、MCP 集成、AGENTS.md、自定义技能、snapshotting 与 rehydration 等能力都被放到了工程框架里。这说明行业重心正在从“把外部知识塞进上下文”转向“管理状态、工具、记忆、执行环境和多代理协作”的上下文工程。
本文面向工程师,不讨论概念炒作,而是回答三个实际问题:
- RAG 到底是不是过时了?
- Agent 的上下文工程到底比 RAG 多了什么?
- 2026 年要落地 AI Agent,工程上应该怎么设计?
摘要
摘要:RAG 没有过时,但它已经从“主架构”变成了 Agent 上下文工程中的一个关键组件。
本文的核心观点很简单:
-
RAG 仍然重要
Elastic 和 Weaviate 的资料都明确指出,RAG 仍是给模型补足外部知识的关键方式,尤其在企业知识库、文档问答、搜索增强场景中不可替代。 -
但 Agentic AI 需要的上下文远不止文档片段
进入 Agent 场景后,模型需要处理任务状态、工具调用结果、执行轨迹、审批状态、长期记忆、子代理上下文、文件系统、沙箱环境等内容。 -
上下文工程是 RAG 的上层抽象
Elastic 将 context engineering 定义为“在正确时间给 AI 系统正确的信息”,并强调 data、retrieval、tools、memory 的连接。这已经明显超出传统 RAG 的范围。 -
2026 年的工程重点是:让 Agent 稳定完成长流程任务
OpenAI Agents SDK 文档指出,当应用需要自己管理 orchestration、tool execution、approvals 和 state 时,应使用 Agents SDK。这正是上下文工程的典型应用边界。
一句话总结:RAG 解决“知道什么”,上下文工程解决“在什么状态下、用什么工具、按什么步骤、基于哪些记忆去完成任务”。
为什么传统 RAG 不够用了
摘要:传统 RAG 擅长知识补全,但在多步骤任务、状态管理和工具执行场景下会暴露明显短板。
经典 RAG 架构通常是这样的:
- 用户提问;
- 将问题向量化;
- 从向量库或搜索引擎中检索相关文档;
- 将文档片段拼进 prompt;
- 调用 LLM 生成答案。
这对“问答”很有效,但对“任务执行”远远不够。
例如你要做一个 DevOps Agent,让它完成:
- 阅读故障日志;
- 搜索历史工单;
- 分析 Prometheus 指标;
- 查询变更记录;
- 生成修复方案;
- 请求人工审批;
- 执行回滚脚本;
- 记录事故复盘。
这已经不是一次检索加一次回答能解决的问题。Agent 在执行过程中需要持续维护:
- 当前任务目标;
- 已经完成的步骤;
- 工具调用返回值;
- 文件和日志上下文;
- 用户授权状态;
- 中间判断依据;
- 后续执行计划。
Elastic 在关于 agentic AI 的上下文工程材料中指出,RAG 依然是重要补充,但上下文窗口过载会让模型失焦。也就是说,问题不是“有没有检索”,而是“检索来的内容如何被选择、压缩、隔离和使用”。
传统 RAG 常见问题包括:
- 检索结果太多,污染上下文;
- chunk 切分不合理,导致语义断裂;
- 每轮对话重复检索,缺少任务状态;
- 没有工具调用轨迹,模型无法稳定规划;
- 长流程中缺少 memory,结果前后不一致;
- 所有信息塞进同一个上下文窗口,导致注意力分散。
所以,RAG 没死,但“只会搭 RAG”已经不够了。
上下文工程到底是什么
摘要:上下文工程的核心是在正确时间、以正确形式、向正确的 Agent 提供正确信息。
Elastic 对 context engineering 的定义非常工程化:在正确时间给 AI 系统正确的信息。这个定义比“prompt engineering”更接近生产系统,因为它关注的不只是提示词,而是整个运行时上下文。
一个面向 Agent 的上下文工程系统,通常要管理以下几类信息:
- Instructions:系统指令、角色边界、任务规则;
- Retrieved Context:从搜索、向量库、数据库中检索的信息;
- Memory:用户偏好、历史任务、长期事实、阶段性总结;
- Tool Results:工具调用输出,如 API 返回、命令执行结果;
- Execution State:任务进度、审批状态、失败重试次数;
- Files and Workspace:Agent 读写的文件、生成的中间产物;
- Sub-agent Context:不同子代理各自隔离的上下文窗口。
这就是为什么 OpenAI Agents SDK 文档会把规划、工具调用、specialist 协作、状态保留放在同一个框架下。Agent 应用不是简单调用一次模型,而是一个可编排、可恢复、可审计的执行系统。
从工程角度看,上下文工程至少包含四个动作:
- 选择:哪些信息应该进入上下文?
- 压缩:长文档、历史记录、工具输出如何摘要?
- 隔离:哪些任务应该交给子代理,避免污染主上下文?
- 持久化:哪些状态需要保存,供后续 rehydration 使用?
Elastic 的资料还提到 agentic search:可以将复杂多步探索交给专门的子代理,让它在隔离上下文中完成搜索和归纳,再把摘要返回主代理。这种设计比“主 prompt 里塞一堆搜索结果”更稳。
Key Comparison Table
摘要:从工程选型看,RAG、Agent 和上下文工程不是互斥关系,而是不同抽象层级。
| Dimension | Traditional RAG | Agent with Tools | Context Engineering | Practical Tradeoff |
|---|---|---|---|---|
| Primary Goal | 补充外部知识并回答问题 | 规划并执行多步骤任务 | 管理任务全过程的信息流 | RAG 简单,Agent 更适合复杂流程 |
| Context Source | 文档 chunk、搜索结果 | 工具输出、API、文件、检索结果 | data、retrieval、tools、memory、state | 来源越多,越需要治理和压缩 |
| State Management | 通常较弱,每轮独立 | 需要保存任务状态和工具轨迹 | 强调 snapshot、rehydration、memory | 状态越强,系统复杂度越高 |
| Failure Mode | 检索不准、幻觉、上下文过载 | 工具调用失败、规划漂移、权限问题 | 上下文污染、记忆错误、隔离不足 | 需要可观测性和回滚机制 |
| Best Use Case | 企业知识问答、文档搜索 | 自动化运维、代码修复、数据分析 | 长流程 Agent、多人协作、复杂工作流 | 按任务复杂度逐步升级 |
| Engineering Focus | chunking、embedding、rerank | orchestration、tool execution、approval | selection、compression、isolation、persistence | 2026 年更应补齐上下文治理能力 |
| Representative Capability | Hybrid search、向量检索 | MCP、文件系统工具、沙箱执行 | configurable memory、AGENTS.md、snapshotting | 新框架正在把这些能力产品化 |
2026 年 Agent 上下文架构怎么设计
摘要:生产级 Agent 架构应把检索、工具、记忆、状态和执行环境拆成可组合模块。
一个较稳的 Agent 上下文架构可以分成六层。
1. 输入解析层
负责将用户请求转换为结构化任务:
- 目标是什么;
- 约束是什么;
- 是否需要工具;
- 是否需要审批;
- 是否需要长期记忆参与。
不要一上来就检索。很多请求其实需要先分类:是问答、分析、执行,还是需要人工确认。
2. 检索与搜索层
这里 RAG 仍然存在,但要升级为 hybrid search:
- 关键词搜索处理精确术语;
- 向量搜索处理语义相似;
- rerank 提升最终上下文质量;
- metadata filter 控制租户、权限、时间范围。
Elastic 的 2026 材料强调 hybrid search 与 agentic AI 的关系,说明检索依然是 Agent 的基础能力,但不是全部。
3. 上下文处理层
负责把原始信息变成适合模型消费的上下文:
- 去重;
- 摘要;
- 分段;
- 引用来源;
- 按任务目标重排;
- 丢弃低价值内容。
这是避免上下文窗口过载的关键。
4. 工具编排层
Agent 不只是读文档,还会调用工具:
- 数据库查询;
- HTTP API;
- 文件读写;
- shell 命令;
- 内部审批系统;
- 搜索服务;
- 代码执行环境。
OpenAI Agents SDK 文档提到,当应用需要自己负责 orchestration、tool execution、approvals 和 state 时,应使用 Agents SDK。这意味着工具编排已经是 Agent 工程的核心问题。
5. 记忆与状态层
需要区分三类内容:
- 短期上下文:当前任务中的对话和中间结果;
- 长期记忆:用户偏好、项目背景、历史决策;
- 执行状态:任务步骤、工具结果、审批记录、失败信息。
OpenAI 2026 年 Agents SDK 新能力中提到 configurable memory、snapshotting 与 rehydration,说明生产级 Agent 必须支持状态保存和恢复。
6. 隔离与多代理层
复杂任务不要让一个 Agent 背全部上下文。更稳的方式是:
- 主 Agent 负责规划和决策;
- Search Agent 负责检索和归纳;
- Code Agent 负责代码分析;
- Ops Agent 负责命令执行;
- Review Agent 负责安全检查。
Elastic 资料指出,现代 agentic 架构中,顶层 agent 会编排多个 sub-agents,每个子代理拥有自己的 logic chains、instruction sets、context 与 tools。这样可以降低上下文污染,也方便权限控制。
代码块注释规范
摘要:Agent 代码示例要让读者看清上下文流转,而不是只展示 API 调用。
写 Agent 或 RAG 相关代码时,注释建议遵循以下规则:
-
说明代码块目的
每个代码块开头用一两行注释说明“这段代码解决什么问题”,例如检索、压缩、工具调用或状态保存。 -
标注关键上下文边界
明确哪些变量是用户输入、哪些是检索上下文、哪些是工具结果、哪些会进入模型 prompt。 -
避免解释语法细节
不要给for、if这类基础语法写废话注释。注释应解释工程意图,而不是翻译代码。 -
标注生产环境注意点
对权限、超时、重试、审计、脱敏、token 限制等风险点给出简短说明。 -
保持注释短而具体
Agent 示例很容易变长,注释应帮助读者定位上下文流,不要写成小作文。
实战代码示例
摘要:下面用简化代码展示如何把 RAG 检索、上下文压缩、工具调用和状态保存组合成 Agent 上下文工程。
下面示例不是绑定某个具体云厂商,而是展示工程结构。真实生产中可以将搜索层替换成 Elasticsearch、Weaviate 或其他混合检索服务,将 Agent 运行层替换成 Agents SDK 或内部编排框架。
# 目的:构建一个最小上下文组装流程
# 关键步骤:检索文档 -> 压缩摘要 -> 组合任务状态 -> 生成模型输入
from typing import List, Dict
def hybrid_search(query: str, top_k: int = 5) -> List[Dict]:
# 生产环境可组合 BM25、向量检索和 rerank
# 注意:应加入租户、权限、时间范围等 metadata filter
return [
{"title": "故障手册", "content": "CPU 飙高时先检查最近发布和慢查询。", "score": 0.91},
{"title": "变更记录", "content": "10:30 发布了 payment-service v2.3.1。", "score": 0.87},
][:top_k]
def compress_context(docs: List[Dict], max_chars: int = 500) -> str:
# 目的:避免把所有检索结果直接塞入上下文导致模型失焦
# 生产环境建议使用摘要模型,并保留引用来源
lines = []
for doc in docs:
lines.append(f"[{doc['title']}] {doc['content']}")
return "\n".join(lines)[:max_chars]
def build_agent_context(user_task: str, task_state: Dict) -> Dict:
# user_task 是用户目标;retrieved_context 是可丢弃上下文;task_state 是必须保留状态
docs = hybrid_search(user_task)
retrieved_context = compress_context(docs)
return {
"instructions": "你是一个运维分析 Agent,先分析证据,再提出操作建议。",
"user_task": user_task,
"retrieved_context": retrieved_context,
"task_state": task_state,
}
task_state = {
# 执行状态应独立保存,不能只依赖模型上下文窗口
"incident_id": "INC-2026-0415",
"completed_steps": ["collected_metrics"],
"approval_required": True,
}
context = build_agent_context("分析 payment-service CPU 飙高原因", task_state)
print(context)
上面代码体现了一个重要原则:检索上下文和任务状态要分开管理。检索内容可以被替换、压缩、丢弃;但任务状态、审批状态、执行轨迹必须持久化。
再看一个多代理隔离的伪实现:
# 目的:展示主 Agent 如何把搜索任务委派给子 Agent
# 关键步骤:主 Agent 只接收子 Agent 的摘要,避免原始搜索结果污染主上下文
class SearchAgent:
def run(self, query: str) -> dict:
# 子 Agent 拥有独立上下文,可进行多轮搜索和归纳
docs = hybrid_search(query, top_k=10)
summary = compress_context(docs, max_chars=800)
return {
"summary": summary,
"sources": [doc["title"] for doc in docs],
}
class MainAgent:
def __init__(self):
self.search_agent = SearchAgent()
self.state = {
# 主 Agent 只保存任务级状态,不保存所有原始文档
"steps": [],
"decisions": [],
}
def handle(self, task: str) -> str:
# 将复杂检索交给子 Agent,主 Agent 保持上下文干净
search_result = self.search_agent.run(task)
self.state["steps"].append("search_completed")
# 生产环境这里可调用 LLM,并传入 instructions、summary、state 和工具列表
response = (
"分析结论:可能与最近发布有关。\n"
f"证据摘要:{search_result['summary']}\n"
f"引用来源:{', '.join(search_result['sources'])}\n"
"建议:先请求审批,再执行回滚或限流。"
)
self.state["decisions"].append("request_human_approval")
return response
agent = MainAgent()
print(agent.handle("排查 payment-service CPU 飙高问题"))
这个例子对应 Elastic 提到的 isolation 思路:复杂任务拆给子代理,每个子代理拥有干净、聚焦的 context window。主 Agent 不必持有所有原始搜索细节,只需要高质量摘要、来源和任务状态。
常见问题与排错
摘要:Agent 上下文问题通常不是模型单点问题,而是检索、状态、工具和记忆协同失败。
-
问题:模型回答引用了无关文档
排查:检查 chunking、metadata filter、rerank 结果;不要把 top_k 设置过大。上下文过载会让模型失焦。 -
问题:Agent 多轮执行后前后矛盾
排查:确认任务状态是否持久化。不要只依赖对话历史,应保存 completed_steps、decisions、tool_results。 -
问题:工具调用结果被模型忽略
排查:将工具结果放入明确字段,并在 instructions 中要求“基于工具结果回答”。必要时对工具输出做摘要和结构化。 -
问题:长期记忆污染当前任务
排查:给 memory 增加作用域、更新时间、置信度和可撤销机制。不是所有历史偏好都应该进入当前上下文。 -
问题:子代理结果不可追溯
排查:子代理返回 summary 的同时必须返回 sources、工具调用记录和关键中间结论,方便审计。 -
问题:Agent 执行中断后无法恢复
排查:需要 snapshotting 或等价机制保存任务状态、文件产物、工具结果和审批状态。OpenAI 2026 年 Agents SDK 新能力中强调的 snapshotting 与 rehydration 正是为了解决这类问题。
结论:RAG 没过时,但你该升级技能栈了
摘要:2026 年的关键能力不是放弃 RAG,而是把 RAG 纳入 Agent 上下文工程。
如果你的应用只是企业知识库问答,RAG 仍是最直接、性价比最高的方案。你应该重点优化:
- 文档清洗;
- chunking;
- embedding;
- hybrid search;
- rerank;
- 引用溯源。
但如果你的目标是构建能完成任务的 AI Agent,就必须继续学习:
- 上下文选择与压缩;
- 多代理上下文隔离;
- 工具调用编排;
- memory 设计;
- 状态持久化;
- 审批与权限控制;
- snapshot 与恢复;
- 文件系统和沙箱执行。
下一步建议很明确:
- 先把现有 RAG 系统改造成“可观测的检索上下文层”;
- 再引入工具调用和任务状态;
- 最后拆分 specialist sub-agents,做上下文隔离和长期记忆治理。
不要问“RAG 和 Agent 该选哪个”。更准确的问题是:你的 Agent 在每一步到底需要什么上下文,以及这些上下文从哪里来、如何压缩、如何隔离、如何保存、如何审计。
CSDN 发布建议(标签与专栏)
摘要:标题和标签应突出 RAG、Agent、上下文工程和 2026 技术趋势,方便工程读者检索。
标签建议:AI Agent、RAG、上下文工程、Agents SDK、LLM 应用开发、向量检索、工程架构
专栏建议:AI Agent 工程实践 / 大模型应用架构 / RAG 与企业知识库实战
References
摘要:以下资料用于支撑本文关于 RAG、Agent 和上下文工程关系的判断。
-
The next evolution of the Agents SDK
https://openai.com/index/the-next-evolution-of-the-agents-sdk/ -
Context engineering with hybrid search for agentic AI
https://www.elastic.co/pdf/elastic-search-labs-context-engineering-with-hybrid-search-for-agentic-ai.pdf -
What is Context Engineering? Architecting Reliable AI
https://www.elastic.co/what-is/context-engineering -
Agents SDK
https://developers.openai.com/api/docs/guides/agents -
Context engineering for AI agents | Elastic
https://www.elastic.co/elasticsearch/context-engineering -
Context Engineering - LLM Memory and Retrieval for AI Agents
https://weaviate.io/blog/context-engineering -
Context engineering: LLM evolution for agentic AI
https://www.elastic.co/search-labs/blog/context-engineering-llm-evolution-agentic-ai
更多推荐



所有评论(0)