AI / SoftwareRepositoryPythonCrewAIBeautifulSoup

EV Research

CrewAI multi-agent framework — two LLM agents produce structured EV shuttle research reports for Bogor, Indonesia. YAML-driven config with zero API cost.

github.com/sigitdanip/evresearch

The Problem

Electric vehicle adoption in developing cities like Bogor faces a research gap: transit planners need comprehensive, data-driven feasibility studies, but commissioning human consultants is expensive and slow. Meanwhile, LLMs have grown capable of web research, PDF analysis, and structured report generation — raising the question: can a small team of AI agents produce useful research autonomously?

EV Research answers this with CrewAI, an open-source multi-agent orchestration framework. Two agents — a Researcher that scrapes web sources and academic papers, and an Analyst that synthesizes findings into structured reports — operate sequentially through a YAML-defined task pipeline. The system runs on UV, Python's fast package manager, keeping dependency management clean and reproducible.

The entire pipeline costs $0 in LLM API fees by using locally-hosted models, making it practical for continuous research iteration. Focus areas include EV shuttle route optimization, charging infrastructure placement, passenger demand modeling, and environmental impact projections for Bogor's urban core.

The System

The system is configured through a single YAML file (`config/tasks.yaml`) that defines agent roles, task descriptions, and expected outputs. The CrewAI framework handles agent instantiation, tool assignment, sequential task execution, and result aggregation — no orchestration code needed beyond the configuration.

The Researcher agent is equipped with web scraping tools (BeautifulSoup for HTML, pdfplumber for academic PDFs) and a search tool. It gathers data on EV adoption rates, existing Bogor transit infrastructure, shuttle case studies from comparable cities, and regulatory frameworks. The Analyst agent receives the Researcher's collected knowledge base and synthesizes it into a structured markdown report with citations, data tables, and actionable recommendations.

State tracking enables resumability: if a task fails mid-execution, the system preserves completed agent outputs and resumes from the last successful checkpoint. This makes long research runs robust to transient failures without losing accumulated context.

The codebase is organized around a `CrewBase` class pattern from CrewAI, where `@agent` and `@task` decorators register components with the framework. New agents can be added by extending the YAML config — no code changes required.

Pipeline Architecture
1
YAML Config
Agent roles, task specs, tool assignments
2
Researcher Agent
Web scraping + PDF analysis + search
3
Analyst Agent
Synthesis + structured report generation
4
CrewAI Runtime
Sequential orchestration + state tracking
5
Output: report.md
Structured markdown with citations

Results

Each run produces a `report.md` file containing an executive summary, methodology section, findings organized by research question, data tables, citation list, and recommendations. The knowledge base directory grows over successive runs, allowing agents to build on prior research.

The two-agent architecture keeps complexity manageable while demonstrating the core multi-agent pattern: specialization (Researcher gathers, Analyst synthesizes), sequential handoff (Researcher output feeds Analyst input), and tool-augmented LLM reasoning (agents with real web access, not just model knowledge).

This project serves as both a practical research tool and a reference implementation of CrewAI patterns — the same multi-agent orchestration principles that power larger systems like the Crisis Monitor's nine-agent LLM pipeline.

System Stats
2
Agents
$0
LLM Cost
YAML
Config Format
Markdown
Output Format
UV-managed
Dependencies

The Code

The `crew.py` module defines the CrewBase class that ties together agent definitions, task specifications, and the execution crew. Each agent is declared with a `@agent` decorator specifying its role, goal, backstory, and tools. Each task uses a `@task` decorator linking it to an agent and describing the expected output.

Dependencies are managed through UV with a `pyproject.toml` specification. BeautifulSoup handles HTML parsing, pdfplumber extracts text from academic PDFs, and numpy/scipy support the Analyst's quantitative work. All dependencies are pinned for reproducibility.

Future directions include expanding to 3+ agents for specialized sub-domains (infrastructure analyst, policy analyst), integrating real-time data sources (GTFS transit feeds, OpenStreetMap), and adding a web dashboard for report browsing.

View source on GitHubsigitdanip/evresearch\u2192

Related

EV Research demonstrates multi-agent AI orchestration — the same pattern that powers Agent Office's 20-agent team and Crisis Monitor's nine-agent LLM pipeline. Together they span the research-to-operations spectrum of AI agent systems.

Related Projects