LlamaIndex Agentic RAG实战:从基础检索到智能推理🎯适合人群:有Python基础,想构建智能问答/知识库系统的开发者📚前置知识:了解RAG基本概念,会使用Python💡核心收获:掌握LlamaIndex Agentic RAG架构,实现真正能"思考"的检索系统📖 目录为什么传统RAG不够用?LlamaIndex架构全景环境搭建与基础配置基础RAG Pipeline实现Agentic RAG核心设计RouterQueryEngine智能路由SubQuestionQueryEngine子问题拆解Agent与Tool集成多知识库联合检索生产级优化与部署踩坑实录与解决方案总结与最佳实践1. 为什么传统RAG不够用?传统RAG的流程很简单:检索 → 拼接 → 生成。但实际生产中,这个流程有致命缺陷:# ❌ 传统RAG的典型问题defnaive_rag(query:str)-str:# 问题1: 不管问题类型,都走同一条检索路径nodes=vector_store.query(query)# 问题2: 检索到的内容可能不相关context="\n".join([n.textforninnodes])# 问题3: 复杂问题无法拆解answer=llm.generate(f"基于以下内容回答:{context}\n问题:{query}")returnanswer传统RAG的核心痛点:痛点具体表现影响单一检索策略所有问题都用向量检索某些问题需要关键词检索更准确无法理解意图不区分总结、对比、细节查询回答质量参差不齐复杂问题处理差多跳推理、多知识库联合查询无法回答跨领域问题无自我纠错检索失败就直接返回空用户体验差Agentic RAG的核心思想:让AI Agent来决定如何检索,而不是固定的pipeline。# ✅ Agentic RAG的思路defagentic_rag(query:str)-str:# Agent分析问题,决定检索策略strategy=agent.analyze_query(query)ifstrategy=="vector_search":results=vector_store.query(query)elifstrategy=="keyword_search":results=keyword_store.query(query)elifstrategy=="sub_questions":sub_queries=agent.decompose(query)results=[retrieve(sq)forsqinsub_queries]elifstrategy=="multi_knowledge_base":results=multi_kb_search(query)returnagent.synthesize(results,query)2. LlamaIndex架构全景LlamaIndex(2024年更名为LlamaIndex)是目前最强大的RAG框架之一,2026年已经发展到非常成熟的阶段。2.1 核心组件┌─────────────────────────────────────────────┐ │ LlamaIndex 架构 │ ├─────────────────────────────────────────────┤ │ │ │ ┌──────────┐ ┌──────────┐ │ │ │ Data Loaders │ │ Index Types │ │ │ │ (300+ connectors) │ │ (Vector, │ │ │ │ │ │ Tree, │ │ │ │ │ │ Keyword) │ │ │ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ └───────┬───────┘ │ │ │ │ │ ┌───────▼───────┐ │ │ │ Query Engine │ │ │ │ (Agentic RAG) │ │ │ └───────┬───────┘ │ │ │ │ │ ┌────────────┼────────────┐ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ Router SubQuestion Chat Engine │ │ Engine Engine │ └─────────────────────────────────────────────┘2.2 与LangChain的对比# LlamaIndex的优势:声明式、专注RAGfromllama_index.coreimportVectorStoreIndex,SimpleDirectoryReader documents=SimpleDirectoryReader("./data").load_data()index=VectorStoreIndex.from_documents(documents)query_engine=index.as_query_engine()response=query_engine.query("什么是RAG?")# LangChain的优势:灵活、生态丰富,但RAG需要更多胶水代码fromlangchain.document_loadersimportDirectoryLoaderfromlangchain.vectorstoresimportFAISSfromlangchain.chainsimportRetrievalQA# ... 需要手动组装多个组件选型建议:纯RAG场景 → LlamaIndex(更简单、更强大)复杂Agent场景 → LangChain + LangGraph混合场景 → LlamaIndex做RAG + LangChain做Agent3. 环境搭建与基础配置3.1 安装依赖# 创建虚拟环境python-mvenv llamaenvsourcellamaenv/bin/activate# Linux/Mac# .\llamaenv\Scripts\activate # Windows# 安装核心包pipinstallllama-index-core pipinstallllama-index-llms-openai pipinstallllama-index-embeddings-openai# 安装常用loaderpipinstallllama-index-readers-file pipinstallllama-index-readers-web# 安装向量数据库(可选)pipinstallllama-index-vector-stores-qdrant pipinstallllama-index-vector-stores-chroma3.2 配置LLM# ⚠️ 踩坑1: 必须先配置Settings,否则会用默认的小模型fromllama_index.coreimportSettingsfromllama_index.llms.openaiimportOpenAIfromllama_index.embeddings.openaiimportOpenAIEmbedding# ✅ 正确做法:全局配置Settings.llm=OpenAI(model="gpt-4o",temperature=0.1,# RAG场景用低temperatureapi_key="your-api-key",api_base="https://your-api-base/v1"# 如果用代理)Settings.embed_model=OpenAIEmbedding(model="text-embedding-3-large",api_key="your-api-key")# ❌ 错误做法:每个组件单独配置(容易不一致)# index = VectorStoreIndex(nodes, embed_model=some_embedding)# engine = index.as_query_engine(llm=some_llm)3.3 使用国产模型# 使用通义千问fromllama_index.llms.openai_likeimportOpenAILike Settings.llm=OpenAILike(model="qwen-max",api_key="your-dashscope-key",api_base="https://dashscope.aliyuncs.com/compatible-mode/v1")# 使用智谱GLMSettings.llm=OpenAILike(model="glm-4",api_key="your-zhipu-key",api_base="https://open.bigmodel.cn/api/paas/v4")4. 基础RAG Pipeline实现4.1 加载文档fromllama_index.coreimportSimpleDirectoryReader# 加载PDF、Word、Markdown等reader=SimpleDirectoryReader(input_dir="./documents",recursive=True,# 递归子目录required_exts=[".pdf",".md",".txt",".docx"])documents=reader