๐Ÿ“‹ Overview

January 14, 2026 ยท View on GitHub

๐Ÿ”ฌ O-Researcher

An Open-Source Tool-Augmented Research Agent for Complex Question Answering

Python

This is the official repository for our paper "O-Researcher: An Open Ended Deep Research Model via Multi-Agent Distillation and Agentic RL".By integrating web search, page crawling, and intelligent summarization, it delivers accurate and traceable research results.

O-Researcher Architecture

๐Ÿ“‹ Overview

O-Researcher presents a unified framework that bridges the gap between closed-source and open-source LLMs through automated multi-agent data synthesis and a two-stage training strategy, achieving state-of-the-art performance on deep research benchmarks while eliminating dependency on proprietary data.

Key Features

๐Ÿ” Web Search Integration: Multi-API Google search with intelligent caching and load balancing

๐Ÿ“„ Page Crawling: Concurrent page crawling with AI-powered content summarization

โšก High Performance: Multi-worker architecture with async processing for concurrent operations

๐Ÿ”„ Smart Caching: Persistent cache mechanism reduces redundant API calls and improves response times

๐Ÿ›ก๏ธ Robust Error Handling: Automatic retry logic with multi-API fallback for enhanced reliability

๐ŸŽฏ Structured Output: Generates well-formatted research reports with traceable citations


๐Ÿš€ Quick Start

1. Install Dependencies

First, install the required dependencies by executing the command below to install packages listed in requirements.txt

# Install Python dependencies
pip install -r requirements.txt

2. Model Download

You can directly download the model by following the links below.

ModelDownload LinksModel SizeContext Length
O-Researcher-72B-rl๐Ÿค— HuggingFace72B128K
O-Researcher-72B-sft๐Ÿค— HuggingFace72B128K

Alternative Download Methods:

  1. Direct from HuggingFace: Click the ๐Ÿค— HuggingFace link above
  2. Script Download:
    cd ./model
    python download.py
    

3. Data Download

The sft and rl datasets for O-Researcher, the download links are as below: You can directly download the model by following the links below.

DatasetsDownload LinksDataset SizeMax Context Length
O-Researcher-SFT-Dataset๐Ÿค— HuggingFace2.92k128K
O-Researcher-RL-Dataset๐Ÿค— HuggingFace10k128K

4. Configure Environment

# Copy the template and fill in your values
cp env_template .env

# Edit .env with your actual configuration
vim .env

Server Configuration (server/start_servers.sh):

VariableDescriptionDefault
SERVER_HOSTServer listening address127.0.0.1
CRAWL_PAGE_PORTCrawlPage service port20001
WEBSEARCH_PORTWebSearch service port20002
CRAWL_PAGE_WORKERSCrawlPage worker processes10
WEBSEARCH_WORKERSWebSearch worker processes10

API Configuration:

VariableDescriptionExample
SERPER_API_KEYSerper API Key (multiple keys separated by |)key1|key2
SERPAPI_BASE_URLSerper API URLhttps://google.serper.dev/search
SUMMARY_API_URLSSummarization API URL (multiple separated by |)https://api.openai.com/v1
SUMMARY_OPENAI_API_KEYOpenAI API Key for summarizationsk-xxx
SUMMARY_MODELSummarization model namegpt-5-mini
JINA_API_KEYJina API Key (optional)jina_xxx

5. Start Tool Servers

# Start all tool servers
bash server/start_servers.sh start

# Check server status
bash server/start_servers.sh status

# Stop all servers
bash server/start_servers.sh stop

Available Tool Servers:

ServerPortDescription
WebSearchWEBSEARCH_PORTMulti-API Google search with intelligent caching
CrawlPageCRAWL_PAGE_PORTConcurrent page crawling with AI summarization

6. Deploy Model Server

Deploy the model using vLLM for high-performance inference:

# Start model deployment
bash deploy/deploy.sh start

# Check deployment status
bash deploy/deploy.sh status

# Stop model deployment
bash deploy/deploy.sh stop

Deployment Configuration:

VariableDescriptionDefault
MODEL_PATHPath to your model (required)-
MODEL_NAMEModel name (required)-
MODEL_BASE_PORTBase port for model service9095
DEPLOY_HOSTDeployment host address0.0.0.0
DEPLOY_INSTANCESNumber of instances1
DEPLOY_GPUS_PER_INSTANCEGPUs per instance4
DEPLOY_MAX_MODEL_LENMaximum model length131072
DEPLOY_LOG_DIRDeployment log directorydeploy/logs
DEPLOY_WAIT_TIMEOUTStartup timeout (seconds)120

Inference Configuration:

VariableDescriptionExample
MODEL_URLModel API URL (multiple separated by | for load balancing)http://localhost:9095/v1
WEBSEARCH_URLWebSearch service URLhttp://localhost:20002/search
CRAWL_PAGE_URLCrawlPage service URLhttp://localhost:20001/crawl_page

Multi-Instance Deployment:

When deploying multiple instances (DEPLOY_INSTANCES > 1), ports are assigned incrementally:

  • Instance 1: MODEL_BASE_PORT (e.g., 9095)
  • Instance 2: MODEL_BASE_PORT + 1 (e.g., 9096)
  • ...

Remember to update MODEL_URL accordingly:

# For 2 instances
export MODEL_URL="http://localhost:9095/v1|http://localhost:9096/v1"

7. Run Inference

Make sure .env is properly configured and sourced:

source .env

cd infer
python infer.py --input_file ../data/example.jsonl --output_file ../results/output.jsonl

Quick Start with Example Script:

cd infer
bash example_infer.sh  # Automatically sources .env

โš™๏ธ Configuration Reference

Key Parameters

ParameterDescriptionDefault
--input_fileInput JSON/JSONL file pathRequired
--output_fileOutput JSONL file pathRequired
--q_keyKey name for question fieldquestion
--a_keyKey name for answer fieldanswer
--temperatureGeneration temperature1.0
--top_pTop-p sampling0.9
--max_tokensMax tokens per generation4096
--total_tokensMax total tokens131072
--max_stepsMax inference steps per question100
--parallelNumber of parallel workers1
--roundNumber of inference rounds1

Example Usage

# Custom input/output keys
python infer.py \
    --input_file ../data/queries.jsonl \
    --output_file ../results/output.jsonl \
    --q_key "prompt" \
    --a_key "answer"

# High-performance parallel processing
python infer.py \
    --input_file ../data/example.json \
    --output_file ../results/parallel_output.jsonl \
    --parallel 30

# Multiple rounds inference
python infer.py \
    --input_file ../data/example.json \
    --output_file ../results/multi_round.jsonl \
    --round 3

๐Ÿ”ง Tool Server Details

WebSearch Server

The WebSearch server provides intelligent web search with caching:

  • Multi-API Support: Load balancing across multiple Serper API keys
  • Intelligent Caching: JSONL-based persistent cache reduces API costs
  • Query Splitting: Supports multiple queries separated by |
  • Result Formatting: Structured output with titles, snippets, and URLs

API Endpoint:

POST /search
Content-Type: application/json

{
    "q": "query1 | query2",
    "num": 10
}

CrawlPage Server

The CrawlPage server handles webpage content extraction:

  • Concurrent Crawling: Async processing for multiple URLs
  • AI Summarization: Intelligent content summarization using LLM
  • Error Handling: Robust retry mechanisms for failed requests

API Endpoint:

POST /crawl_page
Content-Type: application/json

{
    "urls": ["https://example.com/page1", "https://example.com/page2"],
    "task": "Summarize the main points",
    "chunk_size": 8192
}

๐Ÿ“Š Output Format

O-Researcher generates structured research reports with:

  1. Introduction: Context and problem statement
  2. Body: Organized findings with in-text citations
  3. Conclusion: Summary of key findings
  4. References: Numbered list of sources with URLs

Example Output:

## Research Report

### Introduction
This report examines the latest developments in AI...

### Findings
According to recent studies [1], the adoption of AI has increased by 40% in 2024...

### Conclusion
The research indicates that...

### References
[1]. https://example.com/ai-study - AI Adoption Report 2024
[2]. https://example.org/research - Latest AI Developments

๐Ÿ› Troubleshooting

Common Issues

1. Port already in use

# Check what's using the port
lsof -i :20001

# Force stop all servers
bash server/start_servers.sh stop

2. API Key errors

# Verify environment variables
echo $SERPER_API_KEY
echo $SERPAPI_BASE_URL

# Make sure .env is sourced
source .env

3. Model deployment timeout

# Increase timeout in .env
export DEPLOY_WAIT_TIMEOUT=600

# Check deployment logs
tail -f deploy/logs/*.log

Related Work

Listed below are friendly links to relevant agents works from OPPO PersonalAI Lab:

  • Flash-Searcher: Fast and Effective Web Agents via DAG-Based Parallel Execution
  • Agent Foundation Models: Chain-of-Agents: End-to-End Agent Foundation Models via Multi-Agent Distillation and Agentic RL
  • TaskCraft: Automated Generation of Agentic Tasks
  • OAgents: An Empirical Study of Building Effective Agents
  • Agent-KB: Leveraging Cross-Domain Experience for Agentic Problem Solving
  • MiCoTA: Bridging the Learnability Gap with Intermediate CoT and Teacher Assistants

Star

Star History Chart