from typing import List, Tuple from src.common.logger import get_module_logger from src.plugins.memory_system.Hippocampus import HippocampusManager from ..models.utils_model import LLMRequest from ...config.config import global_config from ..chat.message import Message from ..knowledge.knowledge_lib import qa_manager logger = get_module_logger("knowledge_fetcher") class KnowledgeFetcher: """知识调取器""" def __init__(self): self.llm = LLMRequest( model=global_config.llm_normal, temperature=global_config.llm_normal["temp"], max_tokens=1000, request_type="knowledge_fetch", ) def _lpmm_get_knowledge(self, query: str) -> str: """获取相关知识 Args: query: 查询内容 Returns: str: 构造好的,带相关度的知识 """ logger.debug("正在从LPMM知识库中获取知识") try: knowledge_info = qa_manager.get_knowledge(query) logger.debug(f"LPMM知识库查询结果: {knowledge_info:150}") return knowledge_info except Exception as e: logger.error(f"LPMM知识库搜索工具执行失败: {str(e)}") return "未找到匹配的知识" async def fetch(self, query: str, chat_history: List[Message]) -> Tuple[str, str]: """获取相关知识 Args: query: 查询内容 chat_history: 聊天历史 Returns: Tuple[str, str]: (获取的知识, 知识来源) """ # 构建查询上下文 chat_history_text = "" for msg in chat_history: # sender = msg.message_info.user_info.user_nickname or f"用户{msg.message_info.user_info.user_id}" chat_history_text += f"{msg.detailed_plain_text}\n" # 从记忆中获取相关知识 related_memory = await HippocampusManager.get_instance().get_memory_from_text( text=f"{query}\n{chat_history_text}", max_memory_num=3, max_memory_length=2, max_depth=3, fast_retrieval=False, ) knowledge = "" if related_memory: sources = [] for memory in related_memory: knowledge += memory[1] + "\n" sources.append(f"记忆片段{memory[0]}") knowledge = knowledge.strip(), ",".join(sources) knowledge +="现在有以下**知识**可供参考:\n 请记住这些**知识**,并根据**知识**回答问题。\n" knowledge += self._lpmm_get_knowledge(query) return "未找到相关知识", "无记忆匹配"