feat: Add Simple Multi-Agent Researcher tutorial for google ADK course
This commit is contained in:
parent
f22107daf1
commit
b837c057da
5 changed files with 224 additions and 0 deletions
|
|
@ -0,0 +1,128 @@
|
|||
# 🎯 Tutorial 8: Simple Multi‑Agent Researcher (Runs with ADK)
|
||||
|
||||
## 🎯 What You'll Learn
|
||||
- **Multi‑agent orchestration** using a coordinator agent with specialized sub‑agents
|
||||
- **Sequential workflow** where agents build upon each other's outputs
|
||||
- **Web search integration** for real-time research capabilities
|
||||
- **Running with ADK Web** to interactively test the multi‑agent system
|
||||
|
||||
## 🧠 Core Concept: Multi-Agent Research Pipeline
|
||||
A coordinator `LlmAgent` orchestrates three specialized agents in a sequential workflow: Research → Summarize → Critique. Each agent contributes to building a comprehensive research report.
|
||||
|
||||
```
|
||||
User Query → Coordinator Agent
|
||||
│
|
||||
├──▶ Research Agent (web search + analysis)
|
||||
│ │
|
||||
│ └──▶ Research Findings
|
||||
│
|
||||
├──▶ Summarizer Agent (synthesis)
|
||||
│ │
|
||||
│ └──▶ Key Insights
|
||||
│
|
||||
└──▶ Critic Agent (quality analysis)
|
||||
│
|
||||
└──▶ Final Report with Recommendations
|
||||
```
|
||||
|
||||
## 📁 Project Structure
|
||||
```
|
||||
8_simple_multi_agent/
|
||||
├── README.md # This file
|
||||
├── requirements.txt # Dependencies
|
||||
├── multi_agent_researcher/ # Main implementation
|
||||
│ ├── agent.py # Multi-agent system (exports root_agent)
|
||||
└── .env # Environment variables (create this)
|
||||
```
|
||||
|
||||
## 🚀 Getting Started
|
||||
|
||||
### 1. Install Dependencies
|
||||
Navigate to the `8_simple_multi_agent` folder and install the required libraries:
|
||||
```bash
|
||||
cd 8_simple_multi_agent
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 2. Set Up Environment
|
||||
Create a `.env` file in the `8_simple_multi_agent` folder:
|
||||
```bash
|
||||
# Create .env file
|
||||
echo "GOOGLE_API_KEY=your_ai_studio_key_here" > .env
|
||||
```
|
||||
|
||||
**Important**: Replace `your_ai_studio_key_here` with your actual Google AI Studio API key from [https://aistudio.google.com/](https://aistudio.google.com/)
|
||||
|
||||
### 3. Run with ADK Web (Recommended)
|
||||
From the `8_simple_multi_agent` folder:
|
||||
```bash
|
||||
adk web
|
||||
```
|
||||
|
||||
**ADK Web Setup:**
|
||||
- Open the local URL printed in the terminal
|
||||
- In the import section, use this path:
|
||||
```
|
||||
ai_agent_framework_crash_course.google_adk_crash_course.8_simple_multi_agent.multi_agent_researcher
|
||||
```
|
||||
- Select the `root_agent` object
|
||||
- Start chatting with your multi-agent researcher!
|
||||
|
||||
## 🧪 Sample Prompts to Try
|
||||
|
||||
### **Comprehensive Research Query:**
|
||||
```
|
||||
Research the future of renewable energy integration in smart cities, including current technologies, implementation challenges, economic feasibility, and policy requirements. Provide a critique and suggestions.
|
||||
```
|
||||
|
||||
### **Other Test Queries:**
|
||||
```
|
||||
"Research the current state of AI regulation in the European Union and its impact on business innovation"
|
||||
```
|
||||
|
||||
```
|
||||
"Investigate the latest developments in CRISPR gene editing technology and its potential applications in medicine"
|
||||
```
|
||||
|
||||
```
|
||||
"Research the effectiveness of personalized learning platforms in K-12 education, including current implementations and learning outcomes"
|
||||
```
|
||||
|
||||
## 🔍 How It Works
|
||||
|
||||
### **Research Agent:**
|
||||
- Conducts comprehensive web research using Google Search
|
||||
- Gathers current information, trends, and developments
|
||||
- Provides structured findings with sources and outlines
|
||||
|
||||
### **Summarizer Agent:**
|
||||
- Synthesizes research into clear, actionable insights
|
||||
- Creates executive summaries and key bullet points
|
||||
- Identifies critical patterns and takeaways
|
||||
|
||||
### **Critic Agent:**
|
||||
- Performs quality analysis and gap identification
|
||||
- Provides risk assessment and opportunity analysis
|
||||
- Gives actionable recommendations and next steps
|
||||
|
||||
### **Coordinator:**
|
||||
- Orchestrates the entire research workflow
|
||||
- Ensures proper sequence: Research → Summarize → Critique
|
||||
- Integrates all outputs into a cohesive final report
|
||||
|
||||
## 📝 Tips for Best Results
|
||||
- **Be specific** in your research queries for better agent coordination
|
||||
- **Allow completion** of the full workflow for comprehensive results
|
||||
- The system automatically follows the research pipeline for thorough analysis
|
||||
- Each agent builds upon the previous agent's work for better insights
|
||||
|
||||
## 🔗 Next Steps
|
||||
After mastering this tutorial, explore:
|
||||
- **Tutorial 9**: Workflow Agents (Sequential, Parallel, Branching)
|
||||
- **Advanced Patterns**: Custom tools and agent communication
|
||||
- **Integration**: Connect with external data sources and APIs
|
||||
|
||||
## 🚨 Troubleshooting
|
||||
- **API Key Issues**: Ensure your `.env` file is in the correct location and contains a valid `GOOGLE_API_KEY`
|
||||
- **Import Errors**: Make sure you're using the exact import path shown above
|
||||
- **Agent Not Found**: Verify that `root_agent` is properly exported from the module
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# If using Gemini via Google AI Studio
|
||||
GOOGLE_GENAI_USE_VERTEXAI=False
|
||||
GOOGLE_API_KEY="your-api-key"
|
||||
|
|
@ -0,0 +1 @@
|
|||
from .agent import root_agent
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
import os
|
||||
from dotenv import load_dotenv
|
||||
from google.adk.agents import LlmAgent
|
||||
from google.adk.tools.agent_tool import AgentTool
|
||||
from google.adk.tools import google_search
|
||||
|
||||
# Load environment variables
|
||||
load_dotenv()
|
||||
|
||||
# --- Sub-agents ---
|
||||
research_agent = LlmAgent(
|
||||
name="research_agent",
|
||||
model="gemini-2.0-flash",
|
||||
description="Finds key information and outlines for a given topic.",
|
||||
instruction=(
|
||||
"You are a focused research specialist. Given a user topic or goal, "
|
||||
"conduct thorough research and produce:\n"
|
||||
"1. A comprehensive bullet list of key facts and findings\n"
|
||||
"2. Relevant sources and references (when available)\n"
|
||||
"3. A structured outline for approaching the topic\n"
|
||||
"4. Current trends or recent developments\n\n"
|
||||
"Keep your research factual, well-organized, and comprehensive. "
|
||||
"Use the google_search tool to find current information when needed."
|
||||
),
|
||||
tools=[google_search]
|
||||
)
|
||||
|
||||
summarizer_agent = LlmAgent(
|
||||
name="summarizer_agent",
|
||||
model="gemini-2.5-flash",
|
||||
description="Summarizes research findings clearly and concisely.",
|
||||
instruction=(
|
||||
"You are a skilled summarizer. Given research findings, create:\n"
|
||||
"1. A concise executive summary (2-3 sentences)\n"
|
||||
"2. 5-7 key bullet points highlighting the most important information\n"
|
||||
"3. A clear takeaway message\n"
|
||||
"4. Any critical insights or patterns you notice\n\n"
|
||||
"Focus on clarity, relevance, and actionable insights. "
|
||||
"Avoid repetition and maintain the logical flow of information."
|
||||
),
|
||||
)
|
||||
|
||||
critic_agent = LlmAgent(
|
||||
name="critic_agent",
|
||||
model="gemini-2.5-flash",
|
||||
description="Provides constructive critique and improvement suggestions.",
|
||||
instruction=(
|
||||
"You are a thoughtful analyst and critic. Given research and summaries, provide:\n"
|
||||
"1. **Gap Analysis**: Identify missing information or areas that need more research\n"
|
||||
"2. **Risk Assessment**: Highlight potential risks, limitations, or biases\n"
|
||||
"3. **Opportunity Identification**: Suggest areas for further exploration or improvement\n"
|
||||
"4. **Quality Score**: Rate the overall research quality (1-10) with justification\n"
|
||||
"5. **Actionable Recommendations**: Provide specific next steps or improvements\n\n"
|
||||
"Be constructive, thorough, and evidence-based in your analysis."
|
||||
),
|
||||
)
|
||||
|
||||
# --- Coordinator (root) agent ---
|
||||
root_agent = LlmAgent(
|
||||
name="multi_agent_researcher",
|
||||
model="gemini-2.5-flash",
|
||||
description="Advanced multi-agent research coordinator that orchestrates research, analysis, and critique.",
|
||||
instruction=(
|
||||
"You are an advanced research coordinator managing a team of specialized agents.\n\n"
|
||||
"**Your Research Team:**\n"
|
||||
"- **research_agent**: Conducts comprehensive research using web search and analysis\n"
|
||||
"- **summarizer_agent**: Synthesizes findings into clear, actionable insights\n"
|
||||
"- **critic_agent**: Provides quality analysis, gap identification, and recommendations\n\n"
|
||||
"**Research Workflow:**\n"
|
||||
"1. **Research Phase**: Delegate to research_agent to gather comprehensive information\n"
|
||||
"2. **Synthesis Phase**: Use summarizer_agent to distill findings into key insights\n"
|
||||
"3. **Analysis Phase**: Engage critic_agent to evaluate quality and identify opportunities\n"
|
||||
"4. **Integration**: Combine all outputs into a cohesive research report\n\n"
|
||||
"**For Each Research Request:**\n"
|
||||
"- Always start with research_agent to gather information\n"
|
||||
"- Then use summarizer_agent to create clear summaries\n"
|
||||
"- Finally, engage critic_agent for quality analysis and recommendations\n"
|
||||
"- Present the final integrated research report to the user\n\n"
|
||||
"**Output Format:**\n"
|
||||
"Provide a structured response that includes:\n"
|
||||
"- Executive Summary\n"
|
||||
"- Key Findings\n"
|
||||
"- Critical Analysis\n"
|
||||
"- Recommendations\n"
|
||||
"- Next Steps\n\n"
|
||||
"Coordinate your team effectively to deliver high-quality, comprehensive research."
|
||||
),
|
||||
sub_agents=[summarizer_agent, critic_agent],
|
||||
tools=[AgentTool(research_agent)]
|
||||
)
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
google-adk>=1.9.0
|
||||
python-dotenv>=1.1.1
|
||||
Loading…
Reference in a new issue