Agent de Planification de Contenu basé sur A2A et ADK

Aperçu du Projet
L'Agent de Planification de Contenu est un agent intelligent de planification de contenu construit sur Google Agent Development Kit (ADK) et Python A2A SDK. Cet agent peut créer des plans de contenu détaillés basés sur des descriptions de contenu de haut niveau.
Qu'est-ce que le Protocole A2A
Le Protocole A2A (Agent2Agent Protocol) est un protocole standard ouvert spécialement conçu pour les agents IA. Son objectif principal est d'atteindre l'interopérabilité entre les agents sur différentes plateformes et piles technologiques, leur permettant de collaborer comme des "collègues" pour accomplir des tâches, indépendamment de la technologie sous-jacente.
Stack Technologique
- Python: 3.10+
- UV: Gestionnaire de paquets Python
- Google ADK: Google Agent Development Kit
- A2A SDK: Protocole de communication Agent-to-Agent
- Gemini 2.5 Flash: Modèle de langage large
- Google Search: Outil de recherche
- Uvicorn: Serveur ASGI
Prérequis
1. Configuration de l'Environnement
Assurez-vous que votre système dispose des logiciels suivants installés :
# Vérifier la version Python (3.10+ requis)
python --version
# Installer le gestionnaire de paquets UV (si pas déjà installé)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Ou utiliser pip
pip install uv
2. Clés API
Vous devez obtenir des clés API Google pour utiliser les modèles Gemini et la fonctionnalité Google Search :
- Visitez Google AI Studio
- Créez une nouvelle clé API
- Sauvegardez la clé pour une utilisation ultérieure
Structure du Projet
samples/python/agents/content_planner/
├── __init__.py # Fichier d'initialisation du paquet
├── __main__.py # Fichier d'entrée principal
├── agent_executor.py # Exécuteur d'agent
├── content_planner_agent.py # Définition de l'agent de planification de contenu
├── pyproject.toml # Fichier de configuration du projet
├── requirements.txt # Liste des dépendances
├── .env.example # Exemple de variables d'environnement
└── README.md # Documentation du projet
Démarrage Rapide
Étape 1 : Cloner le projet et naviguer vers le répertoire
# En supposant que vous avez déjà le projet a2a-samples
git clone https://github.com/a2aproject/a2a-samples.git
cd a2a-samples/samples/python/agents/content_planner
Étape 2 : Configurer les variables d'environnement
# Copier le fichier d'exemple des variables d'environnement
cp .env.example .env
# Éditer le fichier .env et ajouter votre clé API Google
echo "GOOGLE_API_KEY=your_actual_api_key_here" > .env
Étape 3 : Installer les dépendances et exécuter l'agent
# Utiliser UV pour installer les dépendances et exécuter le projet
uv run .
# Note :
"gradio>=5.30.0" n'est pas nécessaire dans l'agent actuel.
Par défaut, l'agent démarrera sur http://localhost:10001
.
Étape 4 : Tester l'agent (nouvelle fenêtre de terminal)
# Naviguer vers le répertoire du client CLI
cd samples/python/hosts/cli
# Se connecter à l'agent et envoyer un message
uv run . --agent http://localhost:10001
Étape 5 : Interagir avec l'agent
Dans le client CLI, vous pouvez envoyer des messages comme :
Create an outline for a short, upbeat, and encouraging X post about learning Java
Explication du Code
1. Fichier d'Entrée Principal (__main__.py
)
@click.command()
@click.option("--host", default="localhost")
@click.option("--port", default=10001)
def main(host, port):
# Carte d'agent (métadonnées)
agent_card = AgentCard(
name='Content Planner Agent',
description=content_planner_agent.description,
url=f'http://{host}:{port}',
version="1.0.0",
defaultInputModes=["text", "text/plain"],
defaultOutputModes=["text", "text/plain"],
capabilities=AgentCapabilities(streaming=True),
skills=[
AgentSkill(
id="content_planner",
name="Creates outlines for content",
description="Creates outlines for content given a high-level description of the content",
tags=["plan", "outline"],
examples=[
"Create an outline for a short, upbeat, and encouraging X post about learning Java",
],
)
],
)
Explication des Composants Clés :
- AgentCard : Carte de métadonnées d'agent contenant le nom, la description, l'URL, la version, etc.
- AgentSkill : Définition des compétences d'agent incluant l'ID, le nom, la description, les tags et les exemples
- AgentCapabilities : Configuration des capacités d'agent, comme le support du streaming
2. Définition de l'Agent (content_planner_agent.py
)
from google.adk.agents import Agent
from google.adk.tools import google_search
root_agent = Agent(
name="content_planner_agent",
model="gemini-2.5-flash",
description=("Planning agent that creates a detailed and logical outline for a piece of content,"
"given a high-level description."),
instruction=("You are an expert content planner. Your task is to create a detailed and logical outline for a piece"
"of content, given a high-level description."),
tools=[google_search],
)
Fonctionnalités Clés :
- Model : Utilise Gemini 2.5 Flash comme LLM de base
- Tools : Intègre l'outil Google Search pour la récupération d'informations pertinentes
- Instructions : Définit clairement le rôle et les tâches de l'agent
3. Exécuteur d'Agent (agent_executor.py
)
class ADKAgentExecutor(AgentExecutor):
def __init__(self, agent, status_message="Processing request...", artifact_name="response"):
self.agent = agent
self.status_message = status_message
self.artifact_name = artifact_name
self.runner = Runner(
app_name=agent.name,
agent=agent,
artifact_service=InMemoryArtifactService(),
session_service=InMemorySessionService(),
memory_service=InMemoryMemoryService(),
)
Fonctionnalité Principale :
- Runner : Runner ADK qui gère l'exécution de l'agent
- Composants de Service :
ArtifactService
: Gère les artefacts générésSessionService
: Gère l'état de sessionMemoryService
: Gère la mémoire de conversation
Diagramme de Flux de l'Architecture Système
graph TB
A[Demande Utilisateur] --> B[Client CLI A2A]
B --> C[Requête HTTP]
C --> D[Application Starlette A2A]
D --> E[DefaultRequestHandler]
E --> F[ADKAgentExecutor]
F --> G[ADK Runner]
G --> H[Agent de Planification de Contenu]
H --> I[Modèle Gemini 2.5 Flash]
H --> J[Outil Google Search]
I --> K[Génération de Plan de Contenu]
J --> K
K --> L[Artefact de Réponse]
L --> M[Achèvement de Tâche]
M --> N[Retourner le Résultat à l'Utilisateur]
subgraph "Composants ADK"
O[InMemoryArtifactService]
P[InMemorySessionService]
Q[InMemoryMemoryService]
end
G --> O
G --> P
G --> Q
Flux d'Exécution Détaillé
1. Phase d'Initialisation
sequenceDiagram
participant Main as __main__.py
participant Agent as content_planner_agent
participant Executor as ADKAgentExecutor
participant Server as A2AStarletteApplication
Main->>Agent: Charger la configuration de l'agent
Main->>Executor: Créer l'instance d'exécuteur
Main->>Server: Créer le serveur A2A
Server->>Server: Démarrer le serveur Uvicorn
2. Phase de Traitement des Requêtes
sequenceDiagram
participant Client as Client CLI
participant Server as Serveur A2A
participant Handler as DefaultRequestHandler
participant Executor as ADKAgentExecutor
participant Runner as ADK Runner
participant Model as Gemini 2.5 Flash
participant Search as Google Search
Client->>Server: Envoyer une demande de planification de contenu
Server->>Handler: Router la requête
Handler->>Executor: Exécuter la tâche d'agent
Executor->>Runner: Démarrer le runner ADK
Runner->>Model: Appeler le modèle Gemini
Runner->>Search: Exécuter la recherche Google
Model->>Runner: Retourner le contenu généré
Search->>Runner: Retourner les résultats de recherche
Runner->>Executor: Fusionner les résultats
Executor->>Handler: Retourner l'artefact
Handler->>Server: Terminer la tâche
Server->>Client: Retourner le plan de contenu
Configuration Avancée
Port Personnalisé
# Démarrer l'agent sur un port spécifié
uv run . --port=8080
Hôte Personnalisé
# Démarrer sur un hôte et port spécifiés
uv run . --host=0.0.0.0 --port=8080
Configuration des Variables d'Environnement
Vous pouvez configurer plus d'options dans le fichier .env
:
GOOGLE_API_KEY=your_api_key_here
# Vous pouvez ajouter d'autres éléments de configuration
LOG_LEVEL=INFO
Dépannage
Problèmes Courants
-
Erreur de Clé API
Erreur : Invalid API key Solution : Vérifiez si GOOGLE_API_KEY dans le fichier .env est correct
-
Port Déjà Utilisé
Erreur : Port 10001 is already in use Solution : Utilisez le paramètre --port pour spécifier un autre port
-
Échec d'Installation des Dépendances
Erreur : Failed to install dependencies Solution : Assurez-vous qu'UV est correctement installé, essayez uv sync
Extension et Personnalisation
Ajouter de Nouveaux Outils
Ajoutez de nouveaux outils dans content_planner_agent.py
:
from google.adk.tools import google_search, web_search
root_agent = Agent(
# ... autres configurations
tools=[google_search, web_search], # Ajouter plus d'outils
)
Modifier le Modèle
root_agent = Agent(
name="content_planner_agent",
model="gemini-1.5-pro", # Utiliser un modèle différent
# ... autres configurations
)
Instructions Personnalisées
root_agent = Agent(
# ... autres configurations
instruction=(
"Vous êtes un planificateur de contenu spécialisé dans la documentation technique. "
"Créez des plans détaillés qui incluent des exemples de code et les meilleures pratiques."
),
)
Meilleures Pratiques
-
Sécurité :
- Stockez toujours les clés API dans les variables d'environnement
- Ne commitez pas les fichiers
.env
dans le contrôle de version
-
Optimisation des Performances :
- Utilisez des tailles de modèle appropriées
- Configurez correctement les services de mémoire et de session
-
Gestion des Erreurs :
- Implémentez une gestion d'erreur et un logging appropriés
- Fournissez des messages d'erreur significatifs
-
Tests :
- Écrivez des tests unitaires et d'intégration
- Testez les réponses de l'agent avec différentes entrées
Résumé
L'Agent de Planification de Contenu démontre comment construire des agents intelligents en utilisant Google ADK et le Protocole A2A. À travers ce guide, vous devriez être capable de :
- Comprendre l'architecture globale du projet
- Exécuter et tester l'agent avec succès
- Personnaliser et étendre selon les besoins
- Résoudre les problèmes courants
Cet agent peut servir de base pour construire des systèmes multi-agents plus complexes, comme des workflows complets de création de contenu.
Plus d'Exemples du Protocole A2A
- Protocole A2A
- Exemple Multi-Agent A2A : Jeu de Devinette de Nombres
- Exemple d'Agent Intelligent A2A MCP AG2
- Tutoriel Agent de Génération de Graphiques A2A + CrewAI + OpenRouter
- Exemple JS A2A : Agent de Film
- Exemple Python A2A : Agent Github
- Exemple A2A : Planificateur de Voyage OpenRouter
- Exemple Java A2A
- Exemples A2A : Agent Hello World
- Méthodes d'Exemple A2A et Réponses JSON
- Workflow de Chat de Fichier LlamaIndex avec Protocole A2A