Research Agent
Learn how to create AI agents for conducting comprehensive research and analysis.
Research any topic end-to-end — search, analyse, and synthesise — with a single Agent using web search tools.
from praisonaiagents import Agent
from praisonaiagents.tools import duckduckgo
agent = Agent(
name="Researcher",
instructions="You are a research agent. Search, analyze, and synthesize information.",
tools=[duckduckgo],
)
agent.start("Research the current state of quantum computing in 2024")Research agent with web search for comprehensive topic analysis and report generation.
Quick Start
- Simple Usage
Attach a search tool and pose a research question.
python from praisonaiagents import Agent from praisonaiagents.tools import duckduckgo agent = Agent( name="Researcher", instructions="You are a research agent. Search, analyze, and synthesize information.", tools=[duckduckgo], ) agent.start("Research the current state of quantum computing in 2024") - With Configuration
Return a structured report with a Pydantic schema.
python from praisonaiagents import Agent, Task, AgentTeam from praisonaiagents.tools import duckduckgo from pydantic import BaseModel class ResearchReport(BaseModel): topic: str summary: str key_findings: list[str] sources: list[str] agent = Agent( name="Researcher", instructions="Research topics and return structured reports.", tools=[duckduckgo], ) task = Task( description="Research quantum computing in 2024", expected_output="Structured research report", agent=agent, output_pydantic=ResearchReport, ) AgentTeam(agents=[agent], tasks=[task]).start()
How It Works
Simple
Agents: 1 — Single agent handles search, analysis, and synthesis.
Workflow
- Receive research topic
- Search web for relevant sources
- Analyze and synthesize findings
- Generate structured report
Setup
pip install praisonaiagents praisonai duckduckgo-search
export OPENAI_API_KEY="your-key"Run — Python
from praisonaiagents import Agent
from praisonaiagents.tools import duckduckgo
agent = Agent(
name="Researcher",
instructions="You are a research agent. Search, analyze, and synthesize information.",
tools=[duckduckgo]
)
result = agent.start("Research the current state of quantum computing in 2024")
print(result)Run — CLI
praisonai "Research quantum computing advances" --research --web-searchModel used by the research-assistant intermediary
Deep research runs a primary researcher agent and a small “research-assistant” intermediary that gathers initial information using tools. The intermediary honours the same cascade as the rest of the CLI:
--model → MODEL_NAME → OPENAI_MODEL_NAME → gpt-4o-mini# Both agents use Claude
praisonai --research --model claude-3-5-sonnet-latest "Compare vector databases"Run — agents.yaml
framework: praisonai
topic: Research Project
roles:
researcher:
role: Research Specialist
goal: Conduct comprehensive research and analysis
backstory: You are an expert researcher
tools:
- duckduckgo
tasks:
research_task:
description: Research the current state of quantum computing in 2024
expected_output: A comprehensive research reportpraisonai agents.yamlServe API
from praisonaiagents import Agent
from praisonaiagents.tools import duckduckgo
agent = Agent(
name="Researcher",
instructions="You are a research agent.",
tools=[duckduckgo]
)
agent.launch(port=8080)curl -X POST http://localhost:8080/chat \
-H "Content-Type: application/json" \
-d '{"message": "Research electric vehicle market trends"}'Advanced Workflow (All Features)
Agents: 1 — Single agent with memory, persistence, structured output, and session resumability.
Workflow
- Initialize session for resumable research context
- Configure SQLite persistence for research history
- Execute multi-source search with structured output
- Store findings in memory for follow-up queries
- Resume session to continue research
Setup
pip install praisonaiagents praisonai duckduckgo-search pydantic
export OPENAI_API_KEY="your-key"Run — Python
from praisonaiagents import Agent, Task, AgentTeam, Session
from praisonaiagents.tools import duckduckgo
from pydantic import BaseModel
# Structured output schema
class ResearchReport(BaseModel):
topic: str
summary: str
key_findings: list[str]
sources: list[str]
recommendations: list[str]
# Create session for resumability
session = Session(session_id="research-001", user_id="user-1")
# Agent with memory and tools
agent = Agent(
name="Researcher",
instructions="Research topics thoroughly and return structured reports.",
tools=[duckduckgo],
memory=True
)
# Task with structured output
task = Task(
description="Research the current state of quantum computing in 2024",
expected_output="Structured research report",
agent=agent,
output_pydantic=ResearchReport
)
# Run with SQLite persistence
agents = AgentTeam(
agents=[agent],
tasks=[task],
memory=True
)
result = agents.start()
print(result)
# Resume later
session2 = Session(session_id="research-001", user_id="user-1")
history = session2.search_memory("quantum computing")Run — CLI
praisonai "Research quantum computing" --research --web-search --memory --verboseRun — agents.yaml
framework: praisonai
topic: Research Project
memory: true
memory_config:
provider: sqlite
db_path: research.db
roles:
researcher:
role: Research Specialist
goal: Conduct comprehensive research
backstory: You are an expert researcher
tools:
- duckduckgo
memory: true
tasks:
research_task:
description: Research the current state of quantum computing in 2024
expected_output: Structured research report
output_json:
topic: string
summary: string
key_findings: array
sources: array
recommendations: arraypraisonai agents.yaml --verboseServe API
from praisonaiagents import Agent
from praisonaiagents.tools import duckduckgo
agent = Agent(
name="Researcher",
instructions="Research topics and return structured reports.",
tools=[duckduckgo],
memory=True
)
agent.launch(port=8080)curl -X POST http://localhost:8080/chat \
-H "Content-Type: application/json" \
-d '{"message": "Research AI trends", "session_id": "research-001"}'Monitor / Verify
praisonai "test research" --research --web-search --verboseCleanup
rm -f research.dbFeatures Demonstrated
| Feature | Implementation |
|---|---|
| Workflow | Multi-step research synthesis |
| DB Persistence | SQLite via memory_config |
| Observability | --verbose flag |
| Tools | DuckDuckGo search |
| Resumability | Session with session_id |
| Structured Output | Pydantic ResearchReport model |
Best Practices
Ask for cited sources
Instruct the agent to list the URLs it used. Research without provenance is hard to trust and impossible to verify.
Use structured output for reports
Define a Pydantic schema with summary, key_findings, and sources so the report renders consistently and feeds downstream tools.
Pin the intermediary model to control cost
Deep research runs an assistant that consumes tool-call turns. Set OPENAI_MODEL_NAME=gpt-4o-mini for that helper to avoid inflating cost on long runs.
Escalate to Deep Research for provider-native depth
For OpenAI or Gemini deep-research APIs with built-in browsing, use the DeepResearchAgent class rather than this search-tool recipe.