智能查询路由器 核心能力: 1. 查询复杂度分析:识别简单查找 vs 复杂推理 2. 关系密集度评估:判断是否需要图结构优势 3. 策略自动选择:路由到最适合的检索引擎 4. 结果质量监控:基于反馈优化路由决策
| 33 | reasoning: str # 推荐理由 |
| 34 | |
| 35 | class IntelligentQueryRouter: |
| 36 | """ |
| 37 | 智能查询路由器 |
| 38 | |
| 39 | 核心能力: |
| 40 | 1. 查询复杂度分析:识别简单查找 vs 复杂推理 |
| 41 | 2. 关系密集度评估:判断是否需要图结构优势 |
| 42 | 3. 策略自动选择:路由到最适合的检索引擎 |
| 43 | 4. 结果质量监控:基于反馈优化路由决策 |
| 44 | """ |
| 45 | |
| 46 | def __init__(self, |
| 47 | traditional_retrieval, # 传统混合检索模块 |
| 48 | graph_rag_retrieval, # 图RAG检索模块 |
| 49 | llm_client, |
| 50 | config): |
| 51 | self.traditional_retrieval = traditional_retrieval |
| 52 | self.graph_rag_retrieval = graph_rag_retrieval |
| 53 | self.llm_client = llm_client |
| 54 | self.config = config |
| 55 | |
| 56 | # 路由统计 |
| 57 | self.route_stats = { |
| 58 | "traditional_count": 0, |
| 59 | "graph_rag_count": 0, |
| 60 | "combined_count": 0, |
| 61 | "total_queries": 0 |
| 62 | } |
| 63 | |
| 64 | def analyze_query(self, query: str) -> QueryAnalysis: |
| 65 | """ |
| 66 | 深度分析查询特征,决定最佳检索策略 |
| 67 | """ |
| 68 | logger.info(f"分析查询特征: {query}") |
| 69 | |
| 70 | # 使用LLM进行智能分析 |
| 71 | analysis_prompt = f""" |
| 72 | 作为RAG系统的查询分析专家,请深度分析以下查询的特征: |
| 73 | |
| 74 | 查询:{query} |
| 75 | |
| 76 | 请从以下维度分析: |
| 77 | |
| 78 | 1. 查询复杂度 (0-1): |
| 79 | - 0.0-0.3: 简单信息查找(如:干眼症有哪些症状?) |
| 80 | - 0.4-0.7: 中等复杂度(如:青光眼手术后的护理要点?) |
| 81 | - 0.8-1.0: 高复杂度推理(如:糖尿病视网膜病变与青光眼的关系?) |
| 82 | |
| 83 | 2. 关系密集度 (0-1): |
| 84 | - 0.0-0.3: 单一实体信息(如:白内障的手术方式) |
| 85 | - 0.4-0.7: 实体间关系(如:干眼症与隐形眼镜佩戴的关系?) |
| 86 | - 0.8-1.0: 复杂关系网络(如:糖尿病、视网膜病变与黄斑水肿的关联?) |
| 87 | |
| 88 | 3. 推理需求: |
| 89 | - 是否需要多跳推理? |
| 90 | - 是否需要因果分析? |
| 91 | - 是否需要对比分析? |
| 92 |