Un agent GitHub intelligent construit avec le SDK A2A (Agent2Agent) qui peut interroger les dépôts GitHub, les mises à jour récentes, les commits et l'activité des projets en utilisant le langage naturel.
🏗️ Architecture
Ce projet implémente un serveur A2A qui utilise un agent basé sur OpenAI avec l'intégration de l'API GitHub. L'architecture se compose des composants clés suivants :
Aperçu des composants
- Serveur A2A (
__main__.py
) : L'application serveur principale qui gère les requêtes HTTP et gère le cycle de vie de l'agent - Exécuteur d'agent OpenAI (
openai_agent_executor.py
) : Exécute les tâches de l'agent avec l'intégration de l'API OpenRouter - Ensemble d'outils GitHub (
github_toolset.py
) : Fournit des outils API GitHub pour les opérations de dépôt - Définition de l'agent (
openai_agent.py
) : Définit les capacités de l'agent et l'invite système
Flux d'architecture
sequenceDiagram
participant Client as Client A2A
participant Server as Serveur A2A
participant Agent as Agent OpenAI
participant GitHub as API GitHub
participant OpenRouter as API OpenRouter
Note over Client,OpenRouter: Architecture de l'Agent GitHub A2A
Client->>Server: Requête HTTP<br/>(requête sur GitHub)
Server->>Agent: Traiter la requête<br/>(OpenAIAgentExecutor)
Agent->>OpenRouter: Envoyer la complétion de chat<br/>(avec outils définis)
OpenRouter-->>Agent: Réponse avec appels d'outils
loop Exécution d'outils
Agent->>GitHub: Appel API<br/>(GitHubToolset)
GitHub-->>Agent: Données de dépôt/commit
Agent->>OpenRouter: Envoyer les résultats des outils
OpenRouter-->>Agent: Réponse finale
end
Agent->>Server: Réponse en streaming<br/>(TaskUpdater)
Server->>Client: Réponse HTTP<br/>(résultats formatés)
Note over Client: L'utilisateur voit les données GitHub<br/>formatées par l'IA
🔧 Logique des modules clés
1. Serveur principal (__main__.py
)
- Initialise le serveur A2A avec le framework Starlette
- Crée une
AgentCard
qui définit les capacités et compétences de l'agent - Configure l'exécuteur d'agent OpenAI avec les outils GitHub
- Démarre le serveur HTTP sur l'hôte et le port spécifiés
2. Ensemble d'outils GitHub (github_toolset.py
)
Fournit trois fonctions principales de l'API GitHub :
get_user_repositories()
: Récupère les dépôts récents pour un utilisateurget_recent_commits()
: Récupère les commits récents pour un dépôt spécifiquesearch_repositories()
: Recherche des dépôts avec une activité récente
Toutes les fonctions incluent la gestion des erreurs et prennent en charge les paramètres optionnels pour le filtrage.
3. Exécuteur d'agent OpenAI (openai_agent_executor.py
)
- Gère le flux de conversation avec l'API OpenRouter
- Convertit les outils GitHub au format d'appel de fonction OpenAI
- Gère l'exécution des outils et le streaming des réponses
- Implémente une conversation itérative avec des appels d'outils
4. Définition de l'agent (openai_agent.py
)
- Crée l'agent avec l'invite système et les outils disponibles
- Définit le comportement de l'agent pour les requêtes liées à GitHub
- Configure l'agent pour fournir des informations utiles sur les dépôts
📋 Prérequis
- Python 3.10 ou supérieur
- UV - Gestionnaire de paquets Python
- Clé API OpenRouter - Pour les capacités IA
- Jeton d'accès personnel GitHub (optionnel, mais recommandé pour des limites de taux plus élevées)
🚀 Configuration et exécution étape par étape
Étape 1 : Cloner et configurer l'environnement
# Cloner le dépôt
git clone https://github.com/sing1ee/a2a-py-github-agent.git
cd a2a-py-github-agent
# Créer un environnement virtuel
uv venv
source .venv/bin/activate # Sur Windows : .venv\Scripts\activate
Étape 2 : Installer les dépendances
# Installer les dépendances en utilisant UV
uv sync
Étape 3 : Configurer les variables d'environnement
Créez un fichier .env
à la racine du projet :
# Clé API OpenRouter (obligatoire)
echo "OPENROUTER_API_KEY=your_openrouter_api_key_here" > .env
# Jeton d'accès personnel GitHub (optionnel mais recommandé)
echo "GITHUB_TOKEN=your_github_personal_access_token_here" >> .env
Note : Le jeton GitHub est optionnel. Sans lui, l'agent utilisera un accès non authentifié avec des limites de taux limitées (60 requêtes par heure vs 5000 avec jeton).
Étape 4 : Exécuter le serveur A2A
# Activer l'environnement virtuel
source .venv/bin/activate
# Exécuter le serveur
uv run .
Le serveur démarrera sur http://localhost:10007
par défaut.
🧪 Test du client
Option 1 : Utilisation du client A2A Movie Agent
Vous pouvez tester l'agent GitHub en utilisant le client A2A Movie Agent :
# Cloner le client A2A Movie Agent
git clone https://github.com/sing1ee/a2a-js-movie-agent.git
cd a2a-js-movie-agent
# Installer les dépendances
bun install
# Se connecter à votre agent GitHub
bun cli http://localhost:10007
Cela démarrera un CLI interactif qui se connecte à votre serveur d'agent GitHub.
Option 2 : Utilisation de requêtes HTTP directes
Vous pouvez également tester en utilisant curl ou tout client HTTP :
# Exemple : Test avec une requête simple
curl -X POST http://localhost:10007/ \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "message/send",
"params": {
"message": {
"role": "user",
"parts": [
{
"kind": "text",
"text": "Afficher les commits récents pour le dépôt 'facebook/react'"
}
],
"messageId": "9229e770-767c-417b-a0b0-f0741243c589"
},
"metadata": {}
}
}'
💡 Exemples de requêtes
L'agent GitHub peut gérer des requêtes comme :
- Commits récents : "Afficher les commits récents pour le dépôt 'facebook/react'"
- Recherche de dépôts : "Rechercher des dépôts Python populaires avec une activité récente"
- Activité de projet : "Quelles sont les dernières mises à jour dans les dépôts d'apprentissage automatique ?"
🔑 Configuration du jeton GitHub
Pour créer un jeton d'accès personnel GitHub pour de meilleures limites de taux :
- Allez dans Paramètres GitHub > Jetons
- Cliquez sur "Générer un nouveau jeton (classique)"
- Sélectionnez les portées suivantes :
repo
- Accès aux dépôtsuser
- Accès aux informations utilisateur
- Copiez le jeton et ajoutez-le à votre fichier
.env
🛠️ Options de configuration
Configuration du serveur
Vous pouvez personnaliser le serveur en utilisant les options de ligne de commande :
# Hôte et port personnalisés
uv run . --host=0.0.0.0 --port=10007
Variables d'environnement
OPENROUTER_API_KEY
: Votre clé API OpenRouter (obligatoire)GITHUB_TOKEN
: Jeton d'accès personnel GitHub (optionnel)
📖 Documentation de l'API
Outils disponibles
-
get_user_repositories
- Obtenir les dépôts de l'utilisateur avec des mises à jour récentes
- Paramètres :
username
(optionnel),days
(défaut : 30),limit
(défaut : 10)
-
get_recent_commits
- Obtenir les commits récents pour un dépôt
- Paramètres :
repo_name
(obligatoire),days
(défaut : 7),limit
(défaut : 10)
-
search_repositories
- Rechercher des dépôts avec une activité récente
- Paramètres :
query
(obligatoire),sort
(défaut : 'updated'),limit
(défaut : 10)
📄 Licence
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
🔗 Projets connexes
- A2A SDK - L'implémentation sous-jacente du protocole A2A
- A2A Movie Agent - Un agent d'information sur les films construit avec le protocole A2A