MindSearch 的多代理设计使整个框架能够并行从大规模网页中检索和整合信息(例如,在 3 分钟内处理超过 300 个网页的内容),相当于人类耗费 3 小时的工作量。实验表明,MindSearch 在回答质量的深度和广度上,在闭集和开放集问答问题中都显著优于传统方法。此外,基于 InternLM2.5-7B 的 MindSearch 所生成的回答相比于 ChatGPT-Web 和其他同类应用,更受到人类用户的青睐。这表明 MindSearch 已经能够为专有 AI 搜索引擎提供一个具有竞争力的解决方案。
基于大型语言模型的多代理网页搜索引擎框架(如 Perplexity.ai Pro 和 SearchGPT)
信息检索与整合是一项复杂的认知任务,通常需要耗费大量时间和精力。受大型语言模型(LLMs)显著进展的启发,近期的研究尝试通过结合 LLMs 和搜索引擎来解决这一任务。然而,这些方法仍然存在性能不佳的问题,主要面临以下三大挑战:
- 对于复杂的请求,搜索引擎通常无法一次性准确、完整地检索相关内容;
- 需要整合的相关信息往往分散在多个网页中,同时伴随着大量噪声;
- 大量长篇内容的网页可能很快超出 LLMs 的上下文长度限制。
受到人类解决此类问题的认知过程的启发,我们提出 MindSearch,它旨在模拟人类在网页信息检索与整合中的思维过程,并可以通过一种简单但高效的基于 LLM 的多代理框架实现。
框架设计
-
WebPlanner
WebPlanner 模拟人类在多步骤信息检索中的动态认知过程,将用户查询分解为多个原子子问题,并将这些子问题作为图的节点,根据 WebSearcher 的搜索结果逐步扩展该图。 -
WebSearcher
WebSearcher 的任务是针对每个子问题,利用搜索引擎执行分层信息检索,收集有价值的信息并反馈给 WebPlanner。
构建MindSearch
第一步:安装依赖
git clone https://github.com/InternLM/MindSearch
cd MindSearch
pip install -r requirements.txt
第二步:设置环境变量
在配置 API 之前,需要设置环境变量。将 .env.example
文件重命名为 .env
,并填写所需的值。
mv .env.example .env
# 打开 .env 文件,添加您的密钥和模型配置
第三步:设置 MindSearch API
启动 FastAPI 服务器:
python -m mindsearch.app --lang en --model_format internlm_server --search_engine DuckDuckGoSearch --asy
参数说明:
--lang
:模型语言,en
表示英文,cn
表示中文。--model_format
:模型格式。internlm_server
表示 InternLM2.5-7b-chat,本地服务器运行(InternLM2.5-7b-chat 针对中文进行了更好的优化)。gpt4
表示 GPT4。如果使用其他模型,请修改models
文件夹中的内容。
--search_engine
:搜索引擎。DuckDuckGoSearch
:DuckDuckGo 搜索引擎。BingSearch
:必应搜索引擎。BraveSearch
:Brave Web API 搜索引擎。GoogleSearch
:Google Serper Web 搜索 API 引擎。TencentSearch
:腾讯搜索 API 引擎。
注意:
-
除 DuckDuckGo 和 TencentSearch 外,其他搜索引擎需要将 API 密钥设置为环境变量
WEB_SEARCH_API_KEY
。 -
如果使用 TencentSearch,请将
TENCENT_SEARCH_SECRET_ID
和TENCENT_SEARCH_SECRET_KEY
设置为环境变量。 -
--asy
:部署异步代理。
第四步:设置 MindSearch 前端
提供以下前端接口:
React 前端
-
配置 Vite 代理的后端 URL:
HOST="127.0.0.1" # 根据需求修改 PORT=8002 sed -i -r "s/target:\s*\"\"/target: \"${HOST}:${PORT}\"/" frontend/React/vite.config.ts
-
安装 Node.js 和 npm:
Ubuntu 用户:sudo apt install nodejs npm
Windows 用户:
从官网下载安装。 -
安装依赖并启动服务:
cd frontend/React npm install npm start
详细信息请参考 React 前端文档。
Gradio 前端
python frontend/mindsearch_gradio.py
Streamlit 前端
streamlit run frontend/mindsearch_streamlit.py