场景概述
慢召回(DeepSearch)
提供深层次记忆挖掘能力,支持多跳推理、全量信息扫描和总结功能。处理时间为数秒到数十秒,建议采用异步模式使用。
检索精准度高:深度挖掘相关记忆内容。
信息覆盖面广:全量扫描记忆数据。
具备推理能力:支持多跳推理分析。
异步处理机制:避免用户界面阻塞。
适用场景
复杂推理任务。
综合分析需求。
非即时反馈的闲聊场景。
异步交互设计
采用"双线程 + 预加载"策略(参考 async_retrieval.py 实现),确保流畅的用户体验:
主线程 (Chat Loop)
功能 | 描述 | 实现方式 |
用户交互处理 | 负责处理用户输入和 LLM 实时回复 | 实时响应机制 |
记忆注入 | 将上一轮 DeepSearch 结果作为 Context 注入当前轮对话 | 预加载记忆数据 |
体验保障 | 确保用户界面流畅,无需等待记忆搜索完成 | 非阻塞交互设计 |
后台线程 (Memory Worker)
功能 | 描述 | 实现方式 |
静默搜索 | 后台运行 DeepSearch 任务 | 独立线程处理 |
深度挖掘 | 根据用户问题深入挖掘相关记忆 | 多跳推理算法 |
结果缓存 | 将挖掘结果存储到 pending_memory 供下一轮使用 | 预加载机制 |
核心代码解析
AsyncMemoryManager 类:管理后台线程和共享状态锁
class AsyncMemoryManager:def __init__(self, actor_id: str):# ... 初始化 ...self.pending_memory: Optional[str] = Noneself.is_searching = Falseself.lock = threading.Lock()def start_deepsearch(self, query: str):# 启动后台线程进行 DeepSearchthread = threading.Thread(target=self._deepsearch_worker, args=(query,), daemon=True)thread.start()def _deepsearch_worker(self, query: str):try:# 执行耗时的 deepsearchresult = self.client.deepsearch(query=query,actor_id=self.actor_id,summary_by_model=True)formatted = self._format_deepsearch_result(result)with self.lock:# 将结果存入缓存,供主线程下一轮读取if formatted:self.pending_memory = formattedfinally:self.is_searching = False
Running Environment
Operating System: Ubuntu 24.04.3 LTS / x86_64
Runtime Version: Python 3.11.1
主交互循环:实现无阻塞聊天体验
def main():user_id = "user_a"memory_manager = AsyncMemoryManager(actor_id=user_id)while True:user_input = input(f"\\n请输入您的问题: ").strip()# 1. 获取上一轮后台挖掘到的记忆 (如果有)pending_memory = memory_manager.get_and_clear_pending_memory()if pending_memory:print(f"\\n[提示] 使用上轮 DeepSearch 召回的记忆进行回复...")# 2. 立即回复用户 (带上记忆Context)# 此时 DeepSearch 还在后台可能没跑完,但不影响这次回复(除非有 pending)chat_with_crewai_streaming(user_message=user_input,memory_context=pending_memory)# 3. 触发新一轮的后台挖掘,为后续聊天做准备memory_manager.start_deepsearch(user_input)
Running Environment
Operating System: Ubuntu 24.04.3 LTS / x86_64
Runtime Version: Python 3.11.1
预期结果
运行
python3 async_retrieval.py。当用户输入“今晚想出去吃饭” 时,系统会在后台异步使用 DeepSearch 召回用户的记忆并进行总结,等待几秒DeepSearch 返回结果后,在下次用户发起对话时,对应的记忆将会被加入上下文。当用户再问“你推荐我今晚吃什么”时,则可根据异步召回的记忆进行回复。