refactor: 移除多查询生成方法,简化记忆检索逻辑;在工具接口中添加当前时间信息

This commit is contained in:
Windpicker-owo
2025-11-07 16:37:00 +08:00
parent 7dd255fd98
commit de8d1db35f
2 changed files with 2 additions and 92 deletions

View File

@@ -345,98 +345,6 @@ class MemoryManager:
return False
# ==================== 记忆检索操作 ====================
async def generate_multi_queries(
self,
query: str,
context: dict[str, Any] | None = None,
) -> list[tuple[str, float]]:
"""
使用小模型生成多个查询语句(用于多路召回)
简化版多查询策略直接让小模型生成3-5个不同角度的查询
避免复杂的查询分解和组合逻辑。
Args:
query: 原始查询
context: 上下文信息(聊天历史、发言人、参与者等)
Returns:
List of (query_string, weight) - 查询语句和权重
"""
try:
from src.config.config import model_config
from src.llm_models.utils_model import LLMRequest
llm = LLMRequest(
model_set=model_config.model_task_config.utils_small,
request_type="memory.multi_query_generator"
)
# 构建上下文信息
chat_history = context.get("chat_history", "") if context else ""
prompt = f"""你是记忆检索助手。为提高检索准确率请为查询生成3-5个不同角度的搜索语句。
**核心原则(重要!):**
对于包含多个概念的复杂查询(如"小明如何评价小王"),应该生成:
1. 完整查询(包含所有要素)- 权重1.0
2. 每个关键概念的独立查询(如"小明""小王"- 权重0.8,避免被主体淹没!
3. 主体+动作组合(如"小明 评价"- 权重0.6
4. 泛化查询(如"评价"- 权重0.7
**要求:**
- 第一个必须是原始查询或同义改写
- 识别查询中的所有重要概念,为每个概念生成独立查询
- 查询简洁5-20字
- 直接输出JSON不要添加说明
**对话上下文:** {chat_history[-300:] if chat_history else ""}
**输出JSON格式**
```json
{{
"queries": [
{{"text": "完整查询", "weight": 1.0}},
{{"text": "关键概念1", "weight": 0.8}},
{{"text": "关键概念2", "weight": 0.8}},
{{"text": "组合查询", "weight": 0.6}}
]
}}
```"""
response, _ = await llm.generate_response_async(prompt, temperature=0.3, max_tokens=300)
# 解析JSON
import json
import re
response = re.sub(r"```json\s*", "", response)
response = re.sub(r"```\s*$", "", response).strip()
try:
data = json.loads(response)
queries = data.get("queries", [])
result = []
for item in queries:
text = item.get("text", "").strip()
weight = float(item.get("weight", 0.5))
if text:
result.append((text, weight))
if result:
logger.info(f"生成 {len(result)} 个查询: {[q for q, _ in result]}")
return result
except json.JSONDecodeError as e:
logger.warning(f"解析失败: {e}, response={response[:100]}")
except Exception as e:
logger.warning(f"多查询生成失败: {e}")
# 回退到原始查询
return [(query, 1.0)]
async def search_memories(
self,
query: str,