Deep research agent using Vercel's AI SDK
Deep research agent which generates comprehensive PDF reports using Vercel’s AI SDK.
This feature is only available in the v4 beta. To upgrade to v4, see the upgrade to v4 docs.
Acknowledgements: This example project is derived from the brilliant deep research guide by Nico Albanese.
Overview
This full-stack project is an intelligent deep research agent that autonomously conducts multi-layered web research, generating comprehensive reports which are then converted to PDF and uploaded to storage.
Tech stack:
- Next.js for the web app
- Vercel’s AI SDK for AI model integration and structured generation
- Trigger.dev for task orchestration, execution and real-time progress updates
- OpenAI’s GPT-4o model for intelligent query generation, content analysis, and report creation
- Exa API for semantic web search with live crawling
- LibreOffice for PDF generation
- Cloudflare R2 to store the generated reports
Features:
- Recursive research: AI generates search queries, evaluates their relevance, asks follow-up questions and searches deeper based on initial findings.
- Real-time progress: Live updates are shown on the frontend using Trigger.dev Realtime as research progresses.
- Intelligent source evaluation: AI evaluates search result relevance before processing.
- Research report generation: The completed research is converted to a structured HTML report using a detailed system prompt.
- PDF creation and uploading to Cloud storage: The completed reports are then converted to PDF using LibreOffice and uploaded to Cloudflare R2.
GitHub repo
View the Vercel AI SDK deep research agent repo
Click here to view the full code for this project in our examples repository on GitHub. You can fork it and use it as a starting point for your own project.
How the deep research agent works
Trigger.dev orchestration
The research process is orchestrated through three connected Trigger.dev tasks:
deepResearchOrchestrator
- Main task that coordinates the entire research workflow.generateReport
- Processes research data into a structured HTML report using OpenAI’s GPT-4o modelgeneratePdfAndUpload
- Converts HTML to PDF using LibreOffice and uploads to R2 cloud storage
Each task uses triggerAndWait()
to create a dependency chain, ensuring proper sequencing while maintaining isolation and error handling.
The deep research recursive function
The core research logic uses a recursive depth-first search approach. A query is recursively expanded and the results are collected.
Key parameters:
depth
: Controls recursion levels (default: 2)breadth
: Number of queries per level (default: 2, halved each recursion)
Process flow:
- Query generation: OpenAI’s GPT-4o generates multiple search queries from the input
- Web search: Each query searches the web via the Exa API with live crawling
- Relevance evaluation: OpenAI’s GPT-4o evaluates if results help answer the query
- Learning extraction: Relevant results are analyzed for key insights and follow-up questions
- Recursive deepening: Follow-up questions become new queries for the next depth level
- Accumulation: All learnings, sources, and queries are accumulated across recursion levels
Using Trigger.dev Realtime to trigger and subscribe to the deep research task
We use the useRealtimeTaskTrigger
React hook to trigger the deep-research
task and subscribe to it’s updates.
Frontend (React Hook):
As the research progresses, the metadata is set within the tasks and the frontend is kept updated with every new status:
Task Metadata:
Relevant code
- Deep research task: Core logic in src/trigger/deepResearch.ts - orchestrates the recursive research process. Here you can change the model, the depth and the breadth of the research.
- Report generation: src/trigger/generateReport.ts - creates structured HTML reports from research data. The system prompt is defined in the code - this can be updated to be more or less detailed.
- PDF generation: src/trigger/generatePdfAndUpload.ts - converts reports to PDF and uploads to R2. This is a simple example of how to use LibreOffice to convert HTML to PDF.
- Research agent UI: src/components/DeepResearchAgent.tsx - handles form submission and real-time progress display using the
useRealtimeTaskTrigger
hook. - Progress component: src/components/progress-section.tsx - displays live research progress.
Learn more about Trigger.dev Realtime
To learn more, take a look at the following resources:
- Trigger.dev Realtime - learn more about how to subscribe to runs and get real-time updates
- Realtime streaming - learn more about streaming data from your tasks
- Batch Triggering - learn more about how to trigger tasks in batches
- React hooks - learn more about using React hooks to interact with the Trigger.dev API