Skip to main content
Answer questions with real-time information by giving a single Agent a web search tool.
from praisonaiagents import Agent
from praisonaiagents.tools import duckduckgo

agent = Agent(
    name="WebSearcher",
    instructions="You are a web search agent. Search and summarize findings.",
    tools=[duckduckgo],
)

agent.start("What are the latest AI developments in 2024?")
Web search agent using DuckDuckGo for real-time information gathering.

Quick Start

1

Simple Usage

Attach the search tool and ask a question.
from praisonaiagents import Agent
from praisonaiagents.tools import duckduckgo

agent = Agent(
    name="WebSearcher",
    instructions="You are a web search agent. Search and summarize findings.",
    tools=[duckduckgo],
)

agent.start("What are the latest AI developments in 2024?")
2

With Configuration

Return structured search results with a Pydantic schema.
from praisonaiagents import Agent, Task, AgentTeam
from praisonaiagents.tools import duckduckgo
from pydantic import BaseModel

class SearchResult(BaseModel):
    summary: str
    sources: list[str]
    key_findings: list[str]

agent = Agent(
    name="WebSearcher",
    instructions="Search the web and return structured results.",
    tools=[duckduckgo],
)

task = Task(
    description="Search for the latest AI developments in 2024",
    expected_output="Structured search results",
    agent=agent,
    output_pydantic=SearchResult,
)

AgentTeam(agents=[agent], tasks=[task]).start()

How It Works


Simple

Agents: 1 — Single agent with search tool handles query and summarization.

Workflow

  1. Receive search query
  2. Execute web search via DuckDuckGo
  3. Filter and summarize results
  4. Return formatted response

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="WebSearcher",
    instructions="You are a web search agent. Search and summarize findings.",
    tools=[duckduckgo]
)

result = agent.start("What are the latest AI developments in 2024?")
print(result)

Run — CLI

praisonai "What are the latest AI developments?" --web-search

Run — agents.yaml

framework: praisonai
topic: Web Research
roles:
  web_searcher:
    role: Web Search Specialist
    goal: Find and summarize web information
    backstory: You are an expert at finding information online
    tools:
      - duckduckgo
    tasks:
      search_task:
        description: Search for the latest AI developments in 2024
        expected_output: A summary of key AI developments with sources
praisonai agents.yaml

Serve API

from praisonaiagents import Agent
from praisonaiagents.tools import duckduckgo

agent = Agent(
    name="WebSearcher",
    instructions="You are a web search agent.",
    tools=[duckduckgo]
)

agent.launch(port=8080)
curl -X POST http://localhost:8080/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "Search for Python 3.12 new features"}'

Advanced Workflow (All Features)

Agents: 1 — Single agent with memory, persistence, structured output, and session resumability.

Workflow

  1. Initialize session for resumable search context
  2. Configure SQLite persistence for search history
  3. Execute search with structured JSON output
  4. Store results 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 SearchResult(BaseModel):
    query: str
    summary: str
    sources: list[str]
    key_findings: list[str]

# Create session for resumability
session = Session(session_id="search-session-001", user_id="user-1")

# Agent with memory and tools
agent = Agent(
    name="WebSearcher",
    instructions="Search the web and return structured results.",
    tools=[duckduckgo],
    memory=True
)

# Task with structured output
task = Task(
    description="Search for the latest AI developments in 2024",
    expected_output="Structured search results",
    agent=agent,
    output_pydantic=SearchResult
)

# Run with SQLite persistence
agents = AgentTeam(
    agents=[agent],
    tasks=[task],
    memory=True
)

result = agents.start()
print(result)

# Resume later
session2 = Session(session_id="search-session-001", user_id="user-1")
history = session2.search_memory("AI developments")

Run — CLI

# With memory and verbose
praisonai "Search for AI news" --web-search --memory --verbose

# Resume session
praisonai "Find more details" --web-search --memory --session search-001

Run — agents.yaml

framework: praisonai
topic: Web Research
memory: true
memory_config:
  provider: sqlite
  db_path: search.db
roles:
  web_searcher:
    role: Web Search Specialist
    goal: Find and summarize web information
    backstory: You are an expert at finding information online
    tools:
      - duckduckgo
    memory: true
    tasks:
      search_task:
        description: Search for the latest AI developments in 2024
        expected_output: Structured search results
        output_json:
          query: string
          summary: string
          sources: array
          key_findings: array
praisonai agents.yaml --verbose

Serve API

from praisonaiagents import Agent
from praisonaiagents.tools import duckduckgo

agent = Agent(
    name="WebSearcher",
    instructions="Search the web and return results.",
    tools=[duckduckgo],
    memory=True
)

agent.launch(port=8080)
curl -X POST http://localhost:8080/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "Search for Python news", "session_id": "search-001"}'

Monitor / Verify

praisonai "test search" --web-search --verbose

Cleanup

rm -f search.db

Features Demonstrated

FeatureImplementation
WorkflowSingle-step web search
DB PersistenceSQLite via memory_config
Observability--verbose flag
ToolsDuckDuckGo search
ResumabilitySession with session_id
Structured OutputPydantic SearchResult model

Best Practices

Instruct it to include the URLs it used. Search answers without provenance are hard to verify and easy to distrust.
Tell the agent to synthesise findings into a concise answer rather than pasting raw snippets. Users want the takeaway, not ten links.
Set memory=True so the agent builds on earlier queries instead of re-searching the same ground on each turn.
For multi-source synthesis and long reports, hand off to the Research or Deep Research agents rather than a single search pass.

Synthesise multiple sources into a report.

Provider-native deep research for in-depth analysis.