In this post, I explain how the Agent Development Kit (ADK) can be used to develop a Multi-Agent System with practical examples. I use the ADK Golang toolkit, and the use case is building a multi-agent newsroom that is capable of researching trends, writing content, handling SEO, and publishing blog posts or newsletters.
Before diving into the development, let’s first understand the basics of AI Agents, Multi-Agent Systems, and the Agent Development Kit (ADK). You can read more about ADK here
Newsroom: Multi-Agent Content Production Platform#
An AI Agent is a software system designed to act autonomously to make decisions, create plans, and take actions to achieve or complete a goal or task.
We can take the example of a solo full-stack developer building a web application.
What the developer does alone:
Requirements - Define what the app should do
System design - Create the architecture and data flow
Coding - Build the UI, backend APIs, and database logic
Testing & debugging - Test the application and fix bugs
A Multi-Agent System (MAS) is a collection of autonomous AI agents that interact and collaborate with each other to achieve or complete complex goals or tasks. It behaves like a team with distributed decision-making and actions to tackle complex problems.
A good analogy is a Scrum team working on building a web application.
The Scrum team:
Product Owner - Defines what the app should do and prioritizes tasks
Scrum Master - Coordinates with stakeholders, tracks progress, and supports the team
Architect - Designs the system architecture, introduces technologies and tools, and defines design principles and standards
Frontend Developer - Build the UI
Backend Developer - Build backend APIs
QA Engineer - Handles testing
DevOps Engineer - Deploy the app
In many scenarios, team members can work in parallel, sequentially, or even in isolation to achieve the shared goal of building the application.
Agent Development Kit (ADK) is a flexible and modular framework for developing and deploying AI agents. While optimized for Gemini and the Google ecosystem, ADK is model-agnostic, deployment-agnostic, and is built for compatibility with other frameworks. ADK was designed to make agent development feel more like software development, to make it easier for developers to create, deploy, and orchestrate agentic architectures that range from simple tasks to complex workflows.
As mentioned earlier, this example focuses on a newsroom with multiple AI agents. For this Multi-Agent System (MAS), I use a Workflow Agent of type Sequential Agent. You can find more details here
Here, I create the Trend Detection Agent (agents/trend.go), which is equipped with the Google Search Tool to analyze trends. A few other agents are equipped with custom function tools that I created, which you can find in the GitHub repository.
packageagentsimport("context""google.golang.org/adk/agent""google.golang.org/adk/agent/llmagent""google.golang.org/adk/model""google.golang.org/adk/tool""google.golang.org/adk/tool/geminitool")constTrendAgentInstruction=`You are the Trend Detection Agent for an AI Newsroom.
Your role is to identify and analyze current trending topics that would make compelling content.
Your responsibilities:
1. Monitor and identify emerging trends in the specified industry or category
2. Analyze trend momentum and potential audience interest
3. Evaluate the newsworthiness and timeliness of topics
4. Provide structured trend data for the content pipeline
When detecting trends, consider:
- Social media buzz and engagement
- Search volume trends
- Industry news and developments
- Seasonal and timely events
Output your findings as structured JSON with:
- topic: The main topic title
- keywords: Related keywords for the topic
- trend_score: A score from 0-1 indicating trend strength
- rationale: Brief explanation of why this topic is trending
After analysis, save your findings to the 'detected_trends' state key for the next agent.`funcNewTrendDetectionAgent(ctxcontext.Context,mmodel.LLM)(agent.Agent,error){returnllmagent.New(llmagent.Config{Name:"trend_detection_agent",Model:m,Description:"Detects and analyzes trending topics for content creation",Instruction:TrendAgentInstruction,OutputKey:"detected_trends",Tools:[]tool.Tool{geminitool.GoogleSearch{},},})}
Creating the Sequential Pipeline for Orchestration#
This is where the Workflow Agent (type: Sequential Agent) is defined to orchestrate the pipeline (pipeline/newsroom.go).
packagepipelineimport("context""newsroom/agents""google.golang.org/adk/agent""google.golang.org/adk/agent/workflowagents/sequentialagent""google.golang.org/adk/model")funcNewNewsroomPipeline(ctxcontext.Context,mmodel.LLM)(agent.Agent,error){trendAgent,err:=agents.NewTrendDetectionAgent(ctx,m)iferr!=nil{returnnil,err}outlineAgent,err:=agents.NewOutlineAgent(ctx,m)iferr!=nil{returnnil,err}writerAgent,err:=agents.NewWriterAgent(ctx,m)iferr!=nil{returnnil,err}seoAgent,err:=agents.NewSEOAgent(ctx,m)iferr!=nil{returnnil,err}editorAgent,err:=agents.NewEditorAgent(ctx,m)iferr!=nil{returnnil,err}publisherAgent,err:=agents.NewPublisherAgent(ctx,m)iferr!=nil{returnnil,err}pipeline,err:=sequentialagent.New(sequentialagent.Config{AgentConfig:agent.Config{Name:"newsroom_pipeline",Description:"AI Newsroom content production pipeline that produces blog posts or newsletters",SubAgents:[]agent.Agent{trendAgent,outlineAgent,writerAgent,seoAgent,editorAgent,publisherAgent,},},})iferr!=nil{returnnil,err}returnpipeline,nil}