Skip to main content
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.
This page uses a plain Agent with a search tool — a flexible custom research recipe. For provider-native Deep Research (OpenAI / Gemini) with the DeepResearchAgent class, see the Deep Research page.

Quick Start

1

Simple Usage

Attach a search tool and pose a research question.
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")
2

With Configuration

Return a structured report with a Pydantic schema.
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

  1. Receive research topic
  2. Search web for relevant sources
  3. Analyze and synthesize findings
  4. 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-search

Model 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"
The intermediary consumes tool-call turns. Running it on your main model can raise cost on long research runs — pin it back to gpt-4o-mini by setting OPENAI_MODEL_NAME=gpt-4o-mini and leaving --model unset.

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 report
praisonai agents.yaml

Serve 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

  1. Initialize session for resumable research context
  2. Configure SQLite persistence for research history
  3. Execute multi-source search with structured output
  4. Store findings in memory for follow-up queries
  5. 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 --verbose

Run — 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: array
praisonai agents.yaml --verbose

Serve 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 --verbose

Cleanup

rm -f research.db

Features Demonstrated

FeatureImplementation
WorkflowMulti-step research synthesis
DB PersistenceSQLite via memory_config
Observability--verbose flag
ToolsDuckDuckGo search
ResumabilitySession with session_id
Structured OutputPydantic ResearchReport model

Best Practices

Instruct the agent to list the URLs it used. Research without provenance is hard to trust and impossible to verify.
Define a Pydantic schema with summary, key_findings, and sources so the report renders consistently and feeds downstream tools.
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.
For OpenAI or Gemini deep-research APIs with built-in browsing, use the DeepResearchAgent class rather than this search-tool recipe.

Provider-native deep research with the DeepResearchAgent class.

Analyze datasets to support data-driven research.