核心内容摘要
iOS界面美化新境界:PrettyKit让UI定制化开发变得前所未有的简单
在大模型应用落地过程中检索增强生成RAG技术是解决模型“幻觉”、提升回答准确性的核心手段。
随着技术迭代传统静态RAG已无法满足复杂场景需求具备智能决策能力的Agentic RAG应运而生。
本文将从架构、流程、特性、代码实现及适用性等维度深度拆解两种技术的差异同时补充实操选型技巧帮小白和程序员快速找准适配自身业务的方案。
概述RAG (Retrieval-Augmented Generation) 技术通过结合信息检索和文本生成来提升大语言模型的回答质量。
随着技术发展从传统的静态RAG演进到了具备智能决策能力的Agentic RAG。
传统RAG的执行逻辑Agentic RAG的执行逻辑核心区别对比
架构设计维度传统 RAGAgentic RAG架构复杂度简单线性流水线多层次智能代理系统组件构成检索器 生成器规划器 执行器 反思器 工具集决策机制预定义规则动态推理决策
工作流程对比传统 RAG 流程用户查询 → 向量检索 → 文档召回 → 上下文注入 → LLM生成 → 返回结果Agentic RAG 流程用户查询 → 任务分析 → 制定计划 → 动态工具选择 → 多轮信息收集 → 推理决策 → 答案合成 → 质量评估 → 返回结果详细技术特性对比
检索策略传统 RAG•静态检索固定的相似度阈值和召回数量•单轮检索一次性获取所有相关文档•被动适应无法根据查询复杂度调整策略Agentic RAG•动态检索根据查询类型智能调整参数•多轮检索迭代式信息收集•主动适应实时评估并调整检索策略
推理能力传统 RAG•直接映射检索到什么就基于什么回答•缺乏验证无法验证信息一致性•单一视角基于有限上下文生成答案Agentic RAG•多步推理能够进行复杂的逻辑推导•信息验证交叉验证多个信息源•多角度分析综合多个视角形成答案代码实现示例传统 RAG 实现from langchain.vectorstores import FAISSfrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.llms import OpenAIfrom langchain.chains import RetrievalQAfrom langchain.document_loaders import TextLoaderfrom langchain.text_splitter import CharacterTextSplitterclass TraditionalRAG: def __init__(self, documents_path): self.embeddings OpenAIEmbeddings() self.llm OpenAI(temperature
self.setup_vectorstore(documents_path) self.setup_qa_chain() def setup_vectorstore(self, documents_path): # 加载文档 loader TextLoader(documents_path) documents loader.load() # 文档分割 text_splitter CharacterTextSplitter(chunk_size1000, chunk_overlap
texts text_splitter.split_documents(documents) # 创建向量库 self.vectorstore FAISS.from_documents(texts, self.embeddings) def setup_qa_chain(self): # 创建检索器固定参数 retriever self.vectorstore.as_retriever( search_kwargs{k: 5} # 固定检索5个文档 ) # 创建QA链 self.qa_chain RetrievalQA.from_chain_type( llmself.llm, chain_typestuff, retrieverretriever, return_source_documentsTrue ) def query(self, question): 简单的单轮查询 result self.qa_chain({query: question}) return { answer: result[result], sources: result[source_documents] }# 使用示例traditional_rag TraditionalRAG(documents.txt)response traditional_rag.query(什么是机器学习)print(response[answer])### Agentic RAG 实现import jsonfrom typing import List, Dict, Anyfrom langchain.agents import Tool, AgentExecutor, create_openai_functions_agentfrom langchain.memory import ConversationBufferMemoryfrom langchain.schema import BaseRetrieverfrom langchain.llms import OpenAIfrom langchain.prompts import ChatPromptTemplateimport loggingclass AgenticRAG: def __init__(self, vectorstores: Dict[str, Any]): self.llm OpenAI(temperature
0.
self.vectorstores vectorstores self.memory ConversationBufferMemory( memory_keychat_history, return_messagesTrue ) self.setup_tools() self.setup_agent() def setup_tools(self): 设置智能工具集 self.tools [ Tool( nameprecise_search, description用于精确搜索特定技术概念和定义, funcself._precise_search ), Tool( namebroad_search, description用于广泛搜索相关背景信息, funcself._broad_search ), Tool( namecross_reference, description交叉验证多个信息源的一致性, funcself._cross_reference ), Tool( namesummarize_findings, description
总结和整合搜索结果, funcself._summarize_findings ), Tool( namefact_check, description验证信息的准确性, funcself._fact_check ) ] def _precise_search(self, query: str) - str: 精确搜索 try: # 动态调整检索参数 if len(query) 20: # 短查询用更高精度 k 3 score_threshold
8 else: # 长查询用更多候选 k 7 score_threshold
7 retriever self.vectorstores[technical].as_retriever( search_typesimilarity_score_threshold, search_kwargs{ k: k, score_threshold: score_threshold } ) docs retriever.get_relevant_documents(query) return self._format_search_results(docs, 精确搜索) except Exception as e: return f精确搜索失败: {str(e)} def _broad_search(self, query: str) - str: 广泛搜索 try: retriever self.vectorstores[general].as_retriever( search_kwargs{k: 10} #
获取更多相关文档 ) docs retriever.get_relevant_documents(query) return self._format_search_results(docs, 广泛搜索) except Exception as e: return f广泛搜索失败: {str(e)} def _cross_reference(self, topic: str) - str: 交叉验证信息 results [] for store_name, store in self.vectorstores.items(): try: retriever store.as_retriever(search_kwargs{k: 3}) docs retriever.get_relevant_documents(topic) results.append({ source: store_name, content: [doc.page_content[:200] for doc in docs] }) except Exception as e: logging.error(f交叉验证失败 {store_name}: {e}) return json.dumps(results, ensure_asciiFalse, indent
def _summarize_findings(self, findings: str) - str: 整合搜索结果 prompt f 请整合以下搜索结果提供一个连贯的
总结 {findings} 要求
去除重复信息
突出关键要点
保持逻辑连贯性
标注不确定的信息 try: response self.llm(prompt) return response except Exception as e: return f
总结失败: {str(e)} def _fact_check(self, statement: str) - str: 事实验证 # 简化的事实检查逻辑 verification_sources [] for store_name, store in self.vectorstores.items(): try: retriever store.as_retriever(search_kwargs{k: 5}) docs retriever.get_relevant_documents(statement) # 检查文档中是否有支持或反驳的证据 for doc in docs: if any(keyword in doc.page_content.lower() for keyword in statement.lower().split()): verification_sources.append({ source: store_name, evidence: doc.page_content[:300], relevance: 支持 if statement.lower() in doc.page_content.lower() else 相关 }) except Exception as e: logging.error(f事实检查失败 {store_name}: {e}) return json.dumps(verification_sources, ensure_asciiFalse, indent
def _format_search_results(self, docs: List, search_type: str) - str: 格式化搜索结果 if not docs: return f{search_type}未找到相关文档 results [] for i, doc in enumerate(docs): results.append({ rank: i 1, content: doc.page_content[:500], metadata: getattr(doc, metadata, {}) }) return json.dumps({ search_type: search_type, total_results: len(results), documents: results }, ensure_asciiFalse, indent
def setup_agent(self): 设置智能代理 # 定义代理的系统提示 system_prompt 你是一个智能的RAG代理具备以下能力
**任务分析**: 分析用户查询的复杂度和类型
**策略规划**: 根据查询特点制定最优的信息检索策略
**工具使用**: 灵活选择和组合使用各种搜索工具
**质量控制**: 验证信息准确性并评估答案完整性
**迭代优化**: 根据中间结果动态调整策略 工作流程
首先分析查询类型事实性、概念性、比较性等
选择合适的搜索策略精确/广泛/交叉验证
执行搜索并评估结果质量
如果需要进行补充搜索或验证
整合所有信息形成最终答案
进行质量检查和准确性验证 请始终保持客观、准确、有条理的回答风格。
prompt ChatPromptTemplate.from_messages([ (system, system_prompt), (user, {input}), (assistant, 我来帮你分析这个问题并制定搜索策略。
), (human, {agent_scratchpad}) ]) # 创建代理 agent create_openai_functions_agent( llmself.llm, toolsself.tools, promptprompt ) self.agent_executor AgentExecutor( agentagent, toolsself.tools, memoryself.memory, verboseTrue, max_iterations5, # 限制最大迭代次数 handle_parsing_errorsTrue ) def query(self, question: str) - Dict[str, Any]: 智能查询处理 try: # 执行智能代理 result self.agent_executor.invoke({input: question}) return { answer: result[output], reasoning_steps: self._extract_reasoning_steps(), sources_used: self._extract_sources(), confidence_score: self._calculate_confidence() } except Exception as e: logging.error(f查询处理失败: {e}) return { answer: 抱歉处理您的查询时出现了错误。
, error: str(e) } def _extract_reasoning_steps(self) - List[str]: 提取推理步骤 # 从内存中提取推理过程 messages self.memory.chat_memory.messages steps [] for msg in messages[-10:]: # 获取最近的消息 if hasattr(msg, content) and Tool in str(msg.content): steps.append(str(msg.content)[:200]) return steps def _extract_sources(self) - List[str]: 提取信息源 # 简化实现从工具调用中提取源信息 return [技术文档库, 通用知识库, 交叉验证结果] def _calculate_confidence(self) - float: 计算答案可信度 # 简化的可信度计算 base_confidence
7 # 根据使用的工具数量调整 tools_used len(self._extract_reasoning_steps()) confidence_bonus min(tools_used *
1,
0.
return min(base_confidence confidence_bonus,
1.
# 使用示例def create_agentic_rag_system(): # 假设已经有多个向量库 vectorstores { technical: technical_vectorstore, # 技术文档向量库 general: general_vectorstore, # 通用知识向量库 specialized: specialized_vectorstore # 专业领域向量库 } agentic_rag AgenticRAG(vectorstores) # 复杂查询示例 complex_query 请详细解释机器学习中的过拟合问题包括
产生原因
识别方法
解决策略
与深度学习的关系 result agentic_rag.query(complex_query) print( Agentic RAG 回答 ) print(f答案: {result[answer]}) print(f\n推理步骤: {result[reasoning_steps]}) print(f信息源: {result[sources_used]}) print(f可信度: {result[confidence_score]:.2f})# 运行示例# create_agentic_rag_system()性能与适用性对比
性能特征指标传统 RAGAgentic RAG响应速度快单轮检索较慢多轮推理准确性中等高多重验证成本低高多次API调用可解释性低高推理过程透明
适用场景传统 RAG 适用于• ✅ 简单的事实查询• ✅ 对响应速度要求高的场景• ✅ 成本敏感的应用• ✅ 文档内容相对静态Agentic RAG 适用于• ✅ 复杂的多步推理问题• ✅ 需要高准确性的关键应用• ✅ 要求可解释性的专业领域• ✅ 动态、多样化的知识源
总结Agentic RAG代表了RAG技术的重要进步通过引入智能代理的概念大大提升了系统的推理能力和灵活性。
虽然在计算成本和复杂性方面有所增加但在准确性、可解释性和处理复杂查询方面具有显著优势。
关键优势智能决策能够根据查询类型动态选择最优策略多步推理支持复杂的逻辑推导和信息整合质量保证通过多重验证确保答案准确性透明可解释提供完整的推理过程和决策依据技术选择建议•简单应用→ 传统 RAG成本低、速度快•专业应用→ Agentic RAG准确性高、可解释性强•混合场景→ 分层架构根据查询复杂度动态选择选择哪种方案需要根据具体的业务需求、性能要求和成本预算来决定。
对于大多数简单应用传统RAG已经足够而对于需要高质量、可信赖答案的专业应用Agentic RAG则是更好的选择。
那么如何系统的去学习大模型LLM作为一名从业五年的资深大模型算法工程师我经常会收到一些评论和私信我是小白学习大模型该从哪里入手呢我自学没有方向怎么办这个地方我不会啊。
如果你也有类似的经历一定要继续看下去这些问题啊也不是三言两语啊就能讲明白的。
所以我综合了大模型的所有知识点给大家带来一套全网最全最细的大模型零基础教程。
在做这套教程之前呢我就曾放空大脑以一个大模型小白的角度去重新解析它采用基础知识和实战项目相结合的教学方式历时3个月终于完成了这样的课程让你真正体会到什么是每一秒都在疯狂输出知识点。
由于篇幅有限⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》扫码获取~为什么要学习大模型我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。
2023年人才缺口已超百万凸显培养不足。
随着AI技术飞速发展预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。
加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。
大模型学习指南路线汇总我们这套大模型资料呢会从基础篇、进阶篇和项目实战篇等三大方面来讲解。
①.基础篇基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念用最易懂的方式带你入门大模型。
②.进阶篇接下来是进阶篇你将掌握RAG、Agent、Langchain、大模型微调和私有化部署学习如何构建外挂知识库并和自己的企业相结合学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。
③.实战篇实战篇会手把手带着大家练习企业级的落地项目已脱敏比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等从而帮助大家更好的应对大模型时代的挑战。
④.福利篇最后呢会给大家一个小福利课程视频中的所有素材有搭建AI开发环境资料包还有学习计划表几十上百G素材、电子书和课件等等只要你能想到的素材我这里几乎都有。
我已经全部上传到CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】相信我这套大模型系统教程将会是全网最齐全 最易懂的小白专用课