MindSearch论文中提出的模型如何应用于检索?
摘要:本文主要是针对MindSearch进行研读,掌握其中的原理及思想,期许对日常项目工作带来价值,且部署验证了效果。
1.背景
近日中科大与上海人工智能实验室联合推出的MindSearch思索,引起了不小的关注,github上的星标,短短几周时间,已经飙到了4.2K。看来确实有些内容,因此本qiang~研读了论文及代码,针对其中的原理与创新思想进行了熟悉与了解。
2.简介
2.1技术团队
中科大以及上海人工智能实验室,也是书生浦语大模型的开发团队联合打造。
2.2技术目标
结合大模型,优化搜索效果,聚焦用户问题的检索及生成细粒度结果。
当前集成LLM的搜索技术存在的挑战如下:
1)搜索引擎往往不能通过一次请求,就能够准确、完整地检索到用户的复杂请求
2)相应待整合集成的信息会分布在多个网页中,且存在大量噪声
3)大量内容较长的网页可能很快超过LLM的上下文长度
MindSearch通过模仿人类在信息检索中的思维,实现了一个简单有效的Multi-agent框架,进而解决如上问题。
3.方案设计
3.1 整体框架
MindSearch包含一个WebPlanner和一组WebSearchers。整体框架如下图所示:
3.2 WebPlanner
WebPlanner首先将用户的问题拆解为一系列搜索任务,搜索任务的维护主要通过有向无环图(DAG)实现,每一个节点将调用WebSearcher执行检索,然后汇总返回结果,再决定执行下一个节点,以此迭代执行,最后一个节点执行完成后,再做最后的总结并输出结果。
有向无环图中包含节点和边,其中节点表示待执行独立的web搜索,且包含START节点(用户的原始问题)以及END节点(最后的回答)。边表示节点直接的推理拓扑关系。
有向无环图的构建是基于LLM的代码生成功能,LLM读取用户的问题,并基于LLM生成代码创建节点及边,然后通过Python解释器按节点逐步运行,即”code as planning”。每个节点将调用一个WebSearcher来执行搜索任务,并总结搜索信息。
示例如下。
3.3 WebSearcher
WebSearcher相当一个复杂的RAG agent,具有web访问,基于搜索结果总结有价值的信息。
搜索过程采用”由粗到细”的选择策略。首先,LLM基于节点信息生成相似问题,以便提高检索范围,提高召回率,然后调用搜索API接口,获取web地址,然后选择其中最相关的地址,进一步读取网页内容,并生成结果。这种分层检索方法可以有效减少大量web页面,并且可以抽取相关信息的深度细节。
原理如下图。
4.效果层面
返回结果的深度、广度、真实性高于SoT方案Perplextiy.ai、ChatGPT-web等
MindSearch与Perplextiy.ai针对同一问题解决轨迹比较。
5.个人实验
通过论文,能窥探框架原理、实验方法及效果,但不能仅限于论文,该动手时需动手。因此本qiang~也本地部署了MindSearch,基于提供的gradio进行效果验证。如下记录其中一个示例:
1.原始问题
截止到目前,俄罗斯和乌克兰的战争打了几年了,双方伤亡情况如何
2. WebPlanner构建DAG
为了回答这个问题,我们需要将其拆分为两个主要部分:一是确定战争开始的时间,二是了解双方的伤亡情况。我们将首先创建一个搜索图,并添加根节点来表示这个问题。
