文件
gpt_academic/crazy_functions/review_fns/query_processor.py
2025-06-22 18:31:41 +08:00

64 行
2.2 KiB
Python

from typing import List, Dict, Any
from .query_analyzer import QueryAnalyzer, SearchCriteria
from .data_sources.arxiv_source import ArxivSource
from .data_sources.semantic_source import SemanticScholarSource
from .handlers.review_handler import 文献综述功能
from .handlers.recommend_handler import 论文推荐功能
from .handlers.qa_handler import 学术问答功能
from .handlers.paper_handler import 单篇论文分析功能
class QueryProcessor:
"""查询处理器"""
def __init__(self):
self.analyzer = QueryAnalyzer()
self.arxiv = ArxivSource()
self.semantic = SemanticScholarSource()
# 初始化各种处理器
self.handlers = {
"review": 文献综述功能(self.arxiv, self.semantic),
"recommend": 论文推荐功能(self.arxiv, self.semantic),
"qa": 学术问答功能(self.arxiv, self.semantic),
"paper": 单篇论文分析功能(self.arxiv, self.semantic)
}
async def process_query(
self,
query: str,
chatbot: List[List[str]],
history: List[List[str]],
system_prompt: str,
llm_kwargs: Dict[str, Any],
plugin_kwargs: Dict[str, Any],
) -> List[List[str]]:
"""处理用户查询"""
# 设置默认的插件参数
default_plugin_kwargs = {
'max_papers': 20, # 最大论文数量
'min_year': 2015, # 最早年份
'search_multiplier': 3, # 检索倍数
}
# 更新插件参数
plugin_kwargs.update({k: v for k, v in default_plugin_kwargs.items() if k not in plugin_kwargs})
# 1. 分析查询意图
criteria = self.analyzer.analyze_query(query, chatbot, llm_kwargs)
# 2. 根据查询类型选择处理器
handler = self.handlers.get(criteria.query_type)
if not handler:
handler = self.handlers["qa"] # 默认使用QA处理器
# 3. 处理查询
response = await handler.handle(
criteria,
chatbot,
history,
system_prompt,
llm_kwargs,
plugin_kwargs
)
return response