1. 传统RAG的局限性与Agentic RAG的革新思路
传统检索增强生成(RAG)系统存在一个根本性缺陷:当检索到的文档与用户意图不匹配时,系统仍然会基于不相关的上下文生成看似合理实则错误的回答。这种"一锤子买卖"式的设计缺乏反馈机制和纠错能力,导致在边界案例中系统表现不可靠。
以一个典型场景为例:假设知识库中存在一篇《大语言模型的参数高效训练方法》,而用户询问"如何微调LLM效果最好"。虽然两者在语义上存在一定关联,但传统RAG可能检索到的是模型架构相关内容,导致最终生成的回答偏离用户实际需求。更严重的是,系统无法自我识别这种失败情况,仍然会自信地输出错误信息。
Agentic RAG通过引入智能体机制彻底改变了这一局面。其核心创新在于:
- 决策闭环设计:系统不会盲目信任初始检索结果,而是通过评分机制评估文档相关性
- 自我修正能力:当检测到检索质量不佳时,系统会自动重写查询并重新尝试
- 透明化流程:每个决策节点都可追踪,便于问题排查和系统优化
这种架构将原本线性的RAG流程转变为可自我修正的循环系统,显著提升了复杂场景下的可靠性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计与模块划分
2.1 整体架构概览
我们构建的Agentic RAG系统采用分层设计,主要包含以下核心模块:
- 配置层:集中管理环境变量和API客户端
- 检索器模块:处理文档加载、分块、向量化和存储
- 智能体子系统:
- 决策节点:判断是否需要检索
- 评分边缘:评估文档相关性
- 重写节点:优化查询语句
- 生成节点:产出最终回答
- 状态机引擎:使用LangGraph协调各模块工作流
系统采用模块化设计,各组件职责明确,便于单独测试和替换。例如,更换向量数据库只需修改检索器模块,不影响其他功能。
2.2 关键数据流
- 用户提问进入智能体节点
- 智能体判断是否需要检索:
- 可直接回答 → 跳转生成节点
- 需要检索 → 调用检索工具
- 检索结果进入评分环节:
- 相关文档 → 传递至生成节点
- 不相关 → 触发查询重写
- 重写后的查询返回智能体节点,开始新一轮循环
- 生成节点基于确认相关的文档产出最终回答
这种设计确保了系统不会基于低质量上下文生成回答,而是持续优化直至获得可靠素材或达到重试上限。
3. 核心模块实现细节
3.1 配置层实现
配置层采用Python的pydantic库进行环境变量管理,主要处理:
python复制# config/settings.py
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
redis_url: str = "redis://localhost:6379"
openai_api_key: str
embedding_model: str = "text-embedding-3-small"
llm_model: str = "gpt-3.5-turbo"
vector_index: str = "agentic_rag_index"
settings = Settings()
这种集中式配置管理带来以下优势:
- 敏感信息(如API密钥)统一存放,避免硬编码
- 模型参数一处修改,全局生效
- 支持不同环
