异步慢召回(deepsearch)

最近更新时间:2025-12-25 17:02:21

我的收藏

场景概述

慢召回(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] = None
self.is_searching = False
self.lock = threading.Lock()

def start_deepsearch(self, query: str):
# 启动后台线程进行 DeepSearch
thread = threading.Thread(target=self._deepsearch_worker, args=(query,), daemon=True)
thread.start()

def _deepsearch_worker(self, query: str):
try:
# 执行耗时的 deepsearch
result = 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 = formatted
finally:
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 返回结果后,在下次用户发起对话时,对应的记忆将会被加入上下文。当用户再问“你推荐我今晚吃什么”时,则可根据异步召回的记忆进行回复。