MetaSearch 是一个基于Multi-Agent协作的下一代检索增强生成 (RAG) 系统。通过QueryPlanner、RetrievalAgent、EvaluatorAgent、GeneratorAgent四大智能体协同工作,实现智能规划、精准检索、质量评估和优质生成,提供全面且上下文丰富的答案。
四大智能体协同工作,重新定义RAG系统的智能化水平。从查询规划到答案生成,每个环节都由专门的Agent负责,实现前所未有的智能协作模式。
输入问题或需求
四大专门智能体并行工作,协同优化
查询规划智能体
检索执行智能体
质量评估智能体
答案生成智能体
高质量综合回答
明朝内阁制度起源于永乐年间,经历了从内阁大学士到首辅制度的发展演变,在张居正改革时期达到权力顶峰,成为明朝政治制度的重要组成部分...
查询规划智能体
检索执行智能体
质量评估智能体
答案生成智能体
QueryPlanner
{
"query": "明朝内阁制度的发展历程"
}
{
"agent": "QueryPlannerAgent",
"plan": {
"query_type": "analytical",
"complexity": "medium",
"info_sources_needed": 8,
"retrieval_strategy": "hybrid",
"multi_round_needed": true,
"max_rounds": 3,
"sub_queries": ["明朝内阁起源", "内阁大学士", "张居正改革"],
"confidence": 0.85
},
"original_query": "明朝内阁制度的发展历程"
}
RetrievalAgent
{
"current_query": "明朝内阁制度的发展历程",
"plan": {...}, // QueryPlannerAgent的输出
"retrieval_strategy": "hybrid",
"top_k": 8,
"current_round": 1
}
{
"agent": "RetrievalAgent",
"retrieved_content": "明朝内阁制度始建于永乐年间...",
"source_ids": ["doc_1234", "doc_5678", ...],
"raw_chunks": [
{
"content": "永乐年间,明成祖设立内阁...",
"chunk_id": "chunk_1234_2",
"score": 0.892
}, ...
],
"search_time": 1.23,
"total_chunks": 8
}
EvaluatorAgent
{
"original_query": "明朝内阁制度的发展历程",
"raw_chunks": [...], // RetrievalAgent的输出
"current_round": 1,
"max_rounds": 3
}
{
"agent": "EvaluatorAgent",
"reranked_chunks": [...], // 重排序后的chunks
"evaluation_scores": {
"coverage": 0.75,
"depth": 0.68,
"consistency": 0.82,
"novelty": 0.65,
"overall_quality": 0.725
},
"decision": {
"action": "continue_search",
"reason": "信息覆盖不够全面,缺少发展历程细节",
"suggested_queries": ["内阁大学士制度", "张居正改革"]
}
}
GeneratorAgent
{
"original_query": "明朝内阁制度的发展历程",
"all_retrieved_content": [
// 第1轮检索结果
// 第2轮检索结果
// 第3轮检索结果
],
"plan": {...} // 原始规划信息
}
{
"agent": "GeneratorAgent",
"final_answer": "明朝内阁制度的发展历程可以分为...",
"generation_metadata": {
"total_sources": 23,
"generation_time": 3.45,
"answer_length": 1247,
"confidence_score": 0.91
},
"source_attribution": [
{"source": "doc_1234", "contribution": 0.25},
{"source": "doc_5678", "contribution": 0.18},
...
]
}
明朝内阁制度的发展历程
明朝内阁制度起源于永乐年间,经历了从内阁大学士到首辅制度的演变过程。最初由明成祖设立,用以协助处理政务...
探索MetaSearch Agent系统的核心实现,了解每个智能体的代码架构和关键逻辑
deepsearch/agents/base_agent.py
"""
Agent RAG 基础智能体类
定义了所有Agent的基础接口和通用功能
"""
import time
from abc import ABC, abstractmethod
from typing import Dict, List, Any, Optional
from .logger import get_agent_logger
class BaseAgent(ABC):
"""所有Agent的基础类"""
def __init__(self, name: str, llm=None, tools: List = None, **kwargs):
"""初始化基础Agent
Args:
name: Agent名称
llm: 大语言模型接口
tools: 可用工具列表
**kwargs: 其他配置参数
"""
self.name = name
self.llm = llm
self.tools = tools or []
self.config = kwargs
# 获取统一日志器
self.logger = get_agent_logger()
# Agent状态
self.is_active = False
self.memory = [] # Agent记忆
self.execution_count = 0
# 性能统计
self.performance_stats = {
'total_executions': 0,
'total_execution_time': 0.0,
'average_execution_time': 0.0,
'last_execution_time': 0.0,
'success_count': 0,
'error_count': 0
}
@abstractmethod
def execute(self, task: Dict) -> Dict:
"""执行任务的核心方法 - 必须由子类实现
Args:
task: 任务参数字典
Returns:
执行结果字典
"""
pass
def log_step(self, step: str, details: str = None):
"""记录执行步骤"""
message = f"[{self.name}] {step}"
if details:
message += f" - {details}"
self.logger.info(message)
遵循社区标准,学习使用清晰、模块化的架构构建 LLM 项目的最佳实践。
实现前沿的 RAG 算法,通过多轮搜索迭代深入探索信息。
结合向量搜索、关键词搜索 (TF-IDF) 和知识图谱检索,实现更广泛的覆盖。
利用 LLM 动态生成子查询,实现知识探索的广度和深度。
基于新发现信息的比例决定是否继续搜索,优化效率。
利用最大边际相关性 (MMR) 平衡相关性和多样性,提供更全面的结果。
基于智能体协作的RAG系统,规划、检索、评估、生成四大专门Agent协同工作。
基于重排序的智能评估系统,自主决策下一步行动:深入检索、扩展搜索或生成答案。
Agent级别的详细日志记录,时间戳命名,每步决策过程可追踪,便于系统优化。
将原始文档分割成带有上下文和摘要的可管理文本块。
构建向量、TF-IDF 和知识图谱索引以实现高效检索。
结合多种检索方法(向量、关键词、图谱)查找相关文档。
使用 LLM 基于检索到的信息生成新的子查询。
协调迭代检索过程并综合生成最终答案。
MetaSearch/
├── config/ # 配置文件 (YAML)
├── data/ # 数据目录 (原始, 处理后, 索引)
│ ├── raw/ # 原始数据
│ ├── processed/ # 处理后的数据
│ └── indexes/ # 索引文件
├── deepsearch/ # 核心库代码
│ ├── indexing/ # 索引逻辑 (向量, tfidf, 图谱)
│ ├── llm/ # LLM 接口封装
│ ├── preprocessing/# 文档解析与分块
│ ├── rag/ # RAG 流水线实现 (标准, 深度)
│ ├── retrieval/ # 检索策略与重排序
│ └── utils/ # 工具函数
├── scripts/ # 辅助脚本 (下载, 处理)
├── app.py # 主应用入口点
├── requirements.txt # 项目依赖
└── README.md # 项目文档
原始文档被解析并分割成重叠的块。每个块存储:
content
: 块的主要文本。chunk_id
: 唯一标识符。parent_content
: 可选的更大上下文块。abstract
: LLM 生成的摘要 (可选)。# 示例配置 (config/config.yaml)
processing:
chunk_size: 512 # 每个块的目标大小
overlap_size: 64 # 连续块之间的重叠大小
generate_abstract: true # 是否生成摘要
多个索引捕获数据的不同方面:
检索模块融合来自已启用索引的结果。
迭代地扩展搜索范围:
核心引擎在一个循环中运行:
# 示例配置 (config/config.yaml)
deepsearch:
max_iterations: 3 # 最大检索循环次数
growth_rate_threshold: 0.1 # 如果发现的新信息少于 10%,则停止
extend_query_num: 3 # 每次迭代的子查询数量
app.py --interactive
) 查看实际效果。app.py
: 理解初始化和主要的 RAG 调用流程。deepsearch/preprocessing/
: 文档是如何加载和分块的?deepsearch/indexing/vector_index.py
: 基本的向量索引创建和搜索。deepsearch/llm/
: 代码如何与 LLM (本地或 API) 交互?deepsearch/rag/standard_rag.py
: 基础的“检索-生成”流水线。deepsearch/rag/deep_rag.py
: 理解迭代循环、IGR 和查询扩展逻辑。deepsearch/retrieval/
: 探索混合检索和 MMR 重排序。deepsearch/indexing/
中不同的索引实现。deepsearch/rag/query_expansion.py
中的查询扩展实现。config/config.yaml
中的参数 (迭代次数、阈值、模型) 并观察变化。MetaSearch 是一个开源教育项目。欢迎各种形式的贡献!
欢迎您的 Forks 和 PR!✨