[NeurIPS 2025] WebThinker: Empowering Large Reasoning Models with Deep Research Capability
[NeurIPS 2025] WebThinker: Empowering Large Reasoning Models with Deep Research Capability
WebThinker-QwQ-32B | WebThinker-R1-7B | WebThinker-R1-14B | WebThinker-R1-32B
DeepAgent: A General Reasoning Agent with Scalable Toolsets (New!)
Authors: Xiaoxi Li, Wenxiang Jiao, Jiarui Jin, Guanting Dong, Jiajie Jin, Yinuo Wang, Hao Wang, Yutao Zhu, Ji-Rong Wen, Yuan Lu, Zhicheng Dou
TLDR: An end-to-end deep reasoning agent that performs autonomous thinking, tool discovery, and action execution with brain-inspired memory folding mechanism.
WebThinker: Empowering Large Reasoning Models with Deep Research Capability (NeurIPS 2025)
Authors: Xiaoxi Li*, Jiajie Jin*, Guanting Dong*, Hongjin Qian, Yutao Zhu, Yongkang Wu, Ji-Rong Wen, Zhicheng Dou
TLDR: A deep research agent that empowers large reasoning models with autonomous search, web browsing, and research report drafting capabilities.
Search-o1: Agentic Search-Enhanced Large Reasoning Models (EMNLP 2025)
Authors: Xiaoxi Li, Guanting Dong, Jiajie Jin, Yuyao Zhang, Yujia Zhou, Yutao Zhu, Peitian Zhang, Zhicheng Dou
TLDR: An agentic search-enhanced framework that integrates autonomous knowledge retrieval with large reasoning models through Agentic RAG and reasoning-in-documents modules.
WebThinker is a deep research framework fully powered by large reasoning models (LRMs). WebThinker enables LRMs to autonomously search, deeply explore web pages, and draft research reports, all within their thinking process.
Unlike existing open-source deep search agents that typically employ retrieval-augmented generation (RAG) with predefined workflows, WebThinker allows the reasoning model itself to perform actions during thinking, achieving end-to-end task execution in a single generation.
As shown above, WebThinker consistently outperforms competing approaches on both knowledge-intensive complex reasoning benchmarks (GPQA, GAIA, WebWalkerQA, HLE) and open-ended reasoning tasks for report generation. Our WebThinker-32B with QwQ-32B as backbone reasoning model achieves superior performance across all tasks.
WebThinker enables reasoning models to autonomously conduct web searches and web page navigations to acquire external knowledge during their reasoning process. This approach significantly reduces the time and costs associated with information gathering for researchers in knowledge-intensive fields. Furthermore, WebThinker allows LRMs to draft section content while thinking and searching, producing comprehensive, customized reports that directly address users' research questions.
Key Features:
# Create conda environment
conda create -n webthinker python=3.9
conda activate webthinker
# Install requirements
cd WebThinker-main
pip install -r requirements.txtBefore running WebThinker, ensure your reasoning model and auxiliary model are served using vLLM. In our experiments, we use QwQ-32B as the reasoning model and Qwen-32B-Instruct as the auxiliary model. You can also explore other instruction-tuned models as your auxiliary model, which will be used in webpage reading, report writting/editting, evaluation, etc. For detailed instructions on model serving, see here.
For better web crawling performance, we recommend setting up a web parser client in scripts/search/bing_search.py using Crawl4AI. This will help handle JavaScript-rendered content and provide more reliable webpage extraction.
Now you can run different inference modes using the provided scripts. Below are examples of how to execute each mode:
python scripts/run_web_thinker.py \
--single_question "What is OpenAI Deep Research?" \
--search_engine "serper" \
--serper_api_key "YOUR_GOOGLE_SERPER_API" \
--api_base_url "YOUR_API_BASE_URL" \
--model_name "QwQ-32B" \
--aux_api_base_url "YOUR_AUX_API_BASE_URL" \
--aux_model_name "Qwen2.5-32B-Instruct" \
--tokenizer_path "PATH_TO_YOUR_TOKENIZER" \
--aux_tokenizer_path "PATH_TO_YOUR_AUX_TOKENIZER"python scripts/run_web_thinker.py \
--dataset_name gaia \
--split dev \
--concurrent_limit 32 \
--max_search_limit 15 \
--search_engine "serper" \
--serper_api_key "YOUR_GOOGLE_SERPER_API" \
--api_base_url "YOUR_API_BASE_URL" \
--model_name "QwQ-32B" \
--aux_api_base_url "YOUR_AUX_API_BASE_URL" \
--aux_model_name "Qwen2.5-32B-Instruct" \
--tokenizer_path "PATH_TO_YOUR_TOKENIZER" \
--aux_tokenizer_path "PATH_TO_YOUR_AUX_TOKENIZER"python scripts/run_web_thinker_report.py \
--single_question "What are the models of OpenAI and what are the differences?" \
--search_engine "serper" \
--serper_api_key "YOUR_GOOGLE_SERPER_API" \
--api_base_url "YOUR_API_BASE_URL" \
--model_name "QwQ-32B" \
--aux_api_base_url "YOUR_AUX_API_BASE_URL" \
--aux_model_name "Qwen2.5-32B-Instruct" \
--tokenizer_path "PATH_TO_YOUR_TOKENIZER" \
--aux_tokenizer_path "PATH_TO_YOUR_AUX_TOKENIZER"python scripts/run_web_thinker_report.py \
--dataset_name glaive \
--split test \
--concurrent_limit 32 \
--search_engine "serper" \
--serper_api_key "YOUR_GOOGLE_SERPER_API" \
--api_base_url "YOUR_API_BASE_URL" \
--model_name "QwQ-32B" \
--aux_api_base_url "YOUR_AUX_API_BASE_URL" \
--aux_model_name "Qwen2.5-32B-Instruct" \
--tokenizer_path "PATH_TO_YOUR_TOKENIZER" \
--aux_tokenizer_path "PATH_TO_YOUR_AUX_TOKENIZER"Parameters Explanation:
--dataset_name: Name of the dataset to use (glaive).--split: Data split to run (test).--single_question: The question you want to ask when running in single question mode.--concurrent_limit: Maximum number of concurrent requests.--max_search_limit: Maximum number of search queries per reasoning session.--search_engine: Search engine to use (bing or serper). Default: bing.--serper_api_key: Your Google Serper API key (not required when using Bing).--bing_subscription_key: Your Bing Search API subscription key (not required when using Serper).--api_base_url: Base URL for the main model API.--model_name: Name of the main model to use.--aux_api_base_url: Base URL for the auxiliary model API.--aux_model_name: Name of the auxiliary model to use.You can run the demo we have created with the following command, and we will conduct in-depth exploration and thinking based on the questions you input.
cd demo
streamlit run_demo.pyNote: Before running, it is necessary to configure the relevant parameters in demo/settings.py.
The benchmarks we utilize are categorized into two types:
All the pre-processed data is available in the ./data/ directory. For GAIA, HLE and Reasoning-v1-20m, we sampled a text-only subset of questions to efficiently conduct our evaluation.
No open issues yet, or sync has not completed.