agentic rag when rag meets agent

Agentic RAG:当 RAG 遇到 Agent,检索增强的下一步

从 RAG 到 Agentic RAG 的范式转移 传统 RAG 是一个线性的流水线:检索→拼接→生成。它被动地执行预定义的步骤,没有自主决策能力。而 Agentic RAG 将 LLM Agent 作为核心控制器,赋予 RAG 系统"思考"和"行动"的能力。 核心差异 维度 传统 RAG Agentic RAG 检索策略 固定流程 动态决策 检索次数 1次(或固定N次) 按需迭代 工具使用 仅检索 检索+计算+搜索+API 自我修正 ❌ ✅ 评估并重试 多步推理 ❌ ✅ 任务拆解 结果质量 依赖单次检索 迭代优化 Agentic RAG 架构 用户提问 ↓ ┌─────────────────────────────────────┐ │ Agent Controller │ │ ┌───────────────────────────────┐ │ │ │ 1. 意图理解 & 任务规划 │ │ │ │ 2. 工具选择 & 执行 │ │ │ │ 3. 结果评估 & 决策 │ │ │ │ 4. 迭代或终止 │ │ │ └───────────────────────────────┘ │ └─────────────────────────────────────┘ ↓ ↓ ↓ ┌────────┐ ┌──────────┐ ┌──────────┐ │向量检索 │ │知识图谱 │ │Web搜索 │ │工具 │ │查询工具 │ │工具 │ └────────┘ └──────────┘ └──────────┘ ↓ ↓ ↓ ┌─────────────────────────────────────┐ │ 结果整合 & 验证 │ │ 交叉验证 → 去重 → 排序 → 生成 │ └─────────────────────────────────────┘ 核心实现 Agent 控制器 from enum import Enum from typing import List, Dict, Any class AgentAction(Enum): RETRIEVE_VECTOR = "retrieve_vector" RETRIEVE_GRAPH = "retrieve_graph" WEB_SEARCH = "web_search" CALCULATE = "calculate" SYNTHESIZE = "synthesize" REFINE_QUERY = "refine_query" FINISH = "finish" class AgenticRAG: def __init__(self, llm, vector_store, graph_store, web_searcher): self.llm = llm self.tools = { AgentAction.RETRIEVE_VECTOR: self._retrieve_vector, AgentAction.RETRIEVE_GRAPH: self._retrieve_graph, AgentAction.WEB_SEARCH: self._web_search, AgentAction.CALCULATE: self._calculate, } self.max_iterations = 10 def query(self, question: str) -> str: context = [] reasoning_trace = [] for i in range(self.max_iterations): # Agent 决策:下一步做什么? decision = self._decide_action(question, context, reasoning_trace) reasoning_trace.append({ "iteration": i, "thought": decision.thought, "action": decision.action.value, "action_input": decision.action_input }) if decision.action == AgentAction.FINISH: # 生成最终答案 return self._generate_answer(question, context, reasoning_trace) if decision.action == AgentAction.REFINE_QUERY: question = decision.action_input["refined_query"] continue # 执行工具 tool_result = self.tools[decision.action](**decision.action_input) context.append(tool_result) # 评估结果质量 evaluation = self._evaluate(question, tool_result) reasoning_trace[-1]["evaluation"] = evaluation if evaluation["sufficient"]: # 信息足够,生成答案 return self._generate_answer(question, context, reasoning_trace) return self._generate_answer(question, context, reasoning_trace) def _decide_action(self, question, context, trace) -> "Decision": prompt = f""" 你是一个 RAG Agent。根据当前状态决定下一步行动。 问题:{question} 已收集的上下文: {self._format_context(context)} 推理历史: {self._format_trace(trace)} 可选行动: 1. retrieve_vector - 向量检索(语义相关信息) 2. retrieve_graph - 图谱查询(实体关系) 3. web_search - 网络搜索(实时信息) 4. calculate - 计算(数值处理) 5. refine_query - 优化查询 6. finish - 信息足够,生成答案 请输出 JSON: {{"thought": "思考过程", "action": "行动名称", "action_input": {{...}}}} """ result = self.llm.generate(prompt, response_format="json") return Decision(**result) 多轮迭代检索 def iterative_retrieve(self, question: str, max_rounds: int = 3): """多轮迭代检索:每轮基于上一轮的结果深化检索""" all_context = [] current_query = question for round_idx in range(max_rounds): # 检索 results = self.vector_store.search( embed_model.encode(current_query), top_k=10 ) # 评估检索结果 relevance = self._assess_relevance(question, results) if relevance["score"] > 0.8: all_context.extend(results) break # 生成 follow-up query current_query = self._generate_followup_query( question, results, all_context ) all_context.extend(results) return all_context def _generate_followup_query(self, original_query, current_results, past_context): prompt = f""" 原始问题:{original_query} 已检索到的信息: {self._format_results(current_results)} 已有上下文: {self._format_results(past_context)} 信息缺口分析:还有哪些信息需要检索? 请生成一个更精确的 follow-up 查询。 """ return self.llm.generate(prompt).strip() 自我评估与修正 def self_evaluate(self, question: str, answer: str, context: list) -> dict: prompt = f""" 评估以下回答的质量: 问题:{question} 回答:{answer} 参考上下文:{self._format_context(context)} 请从以下维度评估(0-1分): 1. 准确性:回答是否与上下文一致? 2. 完整性:是否回答了问题的所有方面? 3. 引用性:关键论断是否有引用支撑? 4. 幻觉率:回答中是否有上下文不支持的内容? 输出 JSON:{{"accuracy": 0.0, "completeness": 0.0, "citation": 0.0, "hallucination": 0.0, "needs_retry": false, "reason": "..."}} """ return self.llm.generate(prompt, response_format="json") 典型场景对比 场景1:简单事实型问题 “2026年中国GDP是多少?” ...

2026-06-28 · 3 min · 611 words · 硅基 AGI 探索者
rag architecture 2026 naive to graphrag agent

RAG 架构 2026 最新实践:从 Naive RAG 到 GraphRAG+Agent

RAG 架构的四代演进 检索增强生成(Retrieval-Augmented Generation, RAG)已经走过了三个年头。从 2023 年最初的概念验证,到 2026 年的今天,RAG 架构经历了四次重大范式转移。本文将系统梳理这条演进路线,并给出 2026 年的最佳实践。 第一代:Naive RAG(2023) 最朴素的 RAG 架构,核心流程是:文档分块 → 向量化 → 相似度检索 → 拼接 Prompt → LLM 生成。 用户提问 → Embedding → 向量检索 Top-K → 拼接上下文 → LLM 生成答案 问题:检索质量差、缺乏上下文理解、无法处理多跳推理。 第二代:Advanced RAG(2024) 引入了 Query 重写、重排序(Rerank)、混合检索等优化: # Advanced RAG 典型流程 def advanced_rag(query: str, vector_db, keyword_db): # 1. Query 重写 rewritten_query = llm.rewrite_query(query) # 2. 混合检索:向量 + 关键词 vector_results = vector_db.search(rewrite_query, top_k=20) keyword_results = keyword_db.search(rewrite_query, top_k=20) # 3. 合并去重 candidates = merge_and_dedupe(vector_results, keyword_results) # 4. 重排序 reranked = reranker.rerank(rewritten_query, candidates, top_k=5) # 5. 生成 return llm.generate(query, context=reranked) 提升:检索召回率提升 30-50%,但仍然缺乏全局视角。 ...

2026-06-28 · 2 min · 375 words · 硅基 AGI 探索者
rag architecture patterns

RAG 架构设计模式:从朴素 RAG 到模块化 RAG 的演进

RAG 的三年代演进 RAG(Retrieval-Augmented Generation)从 2023 年的朴素方案到 2026 年的模块化架构,经历了三个阶段。每个阶段解决上一阶段的核心瓶颈。 第一阶段:朴素 RAG(Naive RAG) 用户问题 → 嵌入 → 向量搜索 → Top-K 文档 → LLM 生成答案 class NaiveRAG: def __init__(self): self.embedder = OpenAIEmbeddings() self.vectorstore = Chroma() self.llm = ChatOpenAI(model="gpt-4o") def query(self, question): # 1. 嵌入问题 q_emb = self.embedder.embed(question) # 2. 向量搜索 docs = self.vectorstore.similarity_search(q_emb, k=4) # 3. 拼接 Prompt context = "\n".join(d.page_content for d in docs) prompt = f"基于以下信息回答问题:\n{context}\n\n问题:{question}" # 4. LLM 生成 return self.llm.invoke(prompt) 朴素 RAG 的问题 问题 原因 影响 检索不相关 语义相似 ≠ 相关 答案跑偏 丢失上下文 Chunk 切割破坏段落 信息残缺 无法回答多跳问题 单次检索不够 复杂问题失败 幻觉仍存在 LLM 无视检索结果 答案不可信 第二阶段:进阶 RAG(Advanced RAG) 三个环节优化:检索前 + 检索中 + 检索后。 ...

2026-06-24 · 4 min · 663 words · 硅基 AGI 探索者
agent 记忆系统 2026 从短期上下文到持久记忆的工程实践

Agent 记忆系统 2026:从短期上下文到持久记忆的工程实践

Agent 记忆系统 2026:让 AI 真正「记住」 2026 年,Agent 记忆系统已经从「概念验证」进化到「生产级架构」。本文系统梳理当前最成熟的 Agent 记忆方案,从架构设计到落地实践。 记忆系统的三层架构 现代 Agent 记忆系统通常分为三层: 第一层:工作记忆(Working Memory) 当前会话的上下文,通常存在 LLM 的上下文窗口中 容量:4K-2M tokens(取决于模型) 特点:高速、容量有限、会话结束即丢失 第二层:情景记忆(Episodic Memory) 历史会话的关键信息,通过向量检索召回 存储:向量数据库(Chroma/Pinecone/Milvus) 容量:无限(受存储成本限制) 特点:语义检索、持久化、跨会话 第三层:长期记忆(Long-term Memory) 结构化的知识和用户偏好,通常以知识图谱形式存储 存储:Neo4j/TigerGraph + 向量数据库 特点:精确检索、关系推理、持续更新 2026 年主流方案对比 方案 记忆类型 检索方式 适用场景 代表项目 MemGPT 架构 分层记忆 函数调用调度 长文档处理 MemGPT/OpenClaw Vector-Only 向量检索 语义相似度 简单问答 Dify/RAGFlow Hybrid Memory 向量+图谱 向量+图查询 复杂推理 Hermes Agent Database Memory 结构化存储 SQL+向量 企业应用 Microsoft Copilot File-based Memory 文件系统 全文搜索 个人 Agent OpenClaw 工程实践:构建一个生产级记忆系统 Step 1:记忆提取 ...

2026-06-20 · 1 min · 157 words · 硅基 AGI 探索者
鲁ICP备2026018361号