Web Search Agent
Learn how to create AI agents for intelligent web searching and information gathering.
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
- Simple Usage
Attach the search tool and ask a question.
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], ) agent.start("What are the latest AI developments in 2024?") - With Configuration
Return structured search results with a Pydantic schema.
python 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
- Receive search query
- Execute web search via DuckDuckGo
- Filter and summarize results
- 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-searchRun — 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 sourcespraisonai agents.yamlServe 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
- Initialize session for resumable search context
- Configure SQLite persistence for search history
- Execute search with structured JSON output
- Store results 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 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-001Run — 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: arraypraisonai agents.yaml --verboseServe 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 --verboseCleanup
rm -f search.dbFeatures Demonstrated
| Feature | Implementation |
|---|---|
| Workflow | Single-step web search |
| DB Persistence | SQLite via memory_config |
| Observability | --verbose flag |
| Tools | DuckDuckGo search |
| Resumability | Session with session_id |
| Structured Output | Pydantic SearchResult model |
Best Practices
Ask the agent to cite sources
Instruct it to include the URLs it used. Search answers without provenance are hard to verify and easy to distrust.
Summarise, don't dump
Tell the agent to synthesise findings into a concise answer rather than pasting raw snippets. Users want the takeaway, not ten links.
Enable memory for follow-up searches
Set memory=True so the agent builds on earlier queries instead of re-searching the same ground on each turn.
Escalate to Research for depth
For multi-source synthesis and long reports, hand off to the Research or Deep Research agents rather than a single search pass.