An AI-powered multi-agent research assistant that turns a query into a structured, cited research report — with human-in-the-loop plan approval and real-time streaming.
2026-07-02.16-05-52.mp4
- User submits a research query with optional topic filters (News, Academic, Finance, Patents)
- A Planner Agent generates a Problem Statement + up to 5 independent research sub-tasks
- User reviews and approves the plan (or requests revisions in natural language)
- Up to 5 Parallel Research Workers search the web simultaneously via Tavily
- An Aggregator Agent synthesizes all findings into a structured markdown report
- User can download the report as a
.mdfile
| Layer | Technology |
|---|---|
| Agent Graph | LangGraph (HITL, Send() API, MemorySaver) |
| LLM | DeepSeek Pro (planner, aggregator) + Flash (approval, researchers) |
| Web Search | Tavily API |
| Backend | FastAPI + SSE streaming |
| Frontend | Vanilla JS + Nginx |
| Containerization | Docker + Docker Compose |
- Multi-agent graph — parallel researchers fan out via LangGraph's
Send()API - Human-in-the-Loop — review and revise the research plan before execution
- Real-time SSE streaming — live researcher progress updates in the UI
- Query validation — rejects vague queries before hitting the LLM
- Markdown export — download the final report as a
.mdfile - Session persistence — resume interrupted sessions via localStorage
- Dark/Light mode — theme toggle with persistent preference
research-bot/
├── backend/
│ ├── app/
│ │ ├── agents/ # planner, validator, approval, researcher, aggregator
│ │ ├── api/ # FastAPI routes + SSE
│ │ ├── graph/ # LangGraph state + builder
│ │ ├── tools/ # Tavily search tool
│ │ └── llm.py # DeepSeek LLM config
│ └── Dockerfile
├── frontend/
│ ├── index.html
│ ├── app.js
│ └── style.css
├── docker-compose.yml
├── requirements.txt
└── .env.example
- Docker + Docker Compose
- DeepSeek API key → platform.deepseek.com
- Tavily API key → tavily.com
git clone https://github.com/Aryan-Pardeshi/deep-research.git
cd deep-research/research-botcp .env.example .envEdit .env:
DEEPSEEK_API_KEY=your_key_here
DEEPSEEK_BASE_URL=https://api.deepseek.com
TAVILY_API_KEY=your_key_here
docker compose up -d --build- Frontend → http://localhost:80
- Backend → http://localhost:8000
cd research-bot
pip install -r requirements.txt
uvicorn backend.app.main:app --reload --port 8000Open frontend/index.html directly in your browser, or serve with any static file server:
npx serve frontendMake sure
API_BASE_URLinapp.jspoints tohttp://localhost:8000
| Method | Endpoint | Description |
|---|---|---|
POST |
/research/start |
Validate query, generate PS + plan |
POST |
/research/approve |
Resume graph, stream SSE events |
GET |
/research/result/{thread_id} |
Fetch final report by thread |
Built by Aryan Pardeshi — open to AI/ML internship opportunities.