Introduction
AutoGen, framework open-source de Microsoft, révolutionne le développement d'agents IA en permettant des conversations multi-LLM collaboratives. Contrairement aux chaînes linéaires comme LangChain, AutoGen excelle dans les interactions dynamiques où des agents spécialisés (coder, critique, utilisateur) négocient en temps réel pour résoudre des tâches complexes comme l'analyse de données ou la génération de code. En 2026, avec l'essor des modèles comme GPT-4o et Llama 3.1, AutoGen est indispensable pour des systèmes scalables et autonomes.
Ce tutoriel avancé vous guide pas à pas : du setup basique à un group chat avec outils personnalisés. Vous apprendrez à gérer les handoffs, la persistance des messages et l'optimisation des coûts LLM. À la fin, vous déployez un système capable de déboguer du code Python collaborativement, comme un mentor senior le ferait. Idéal pour des pros IA cherchant à bookmarker un guide référence (128 mots).
Prérequis
- Python 3.11+ installé
- Clé API OpenAI (ou équivalent pour Anthropic/Groq) :
export OPENAI_API_KEY=sk-... - pip et git
- Connaissances avancées en LLMs, async Python et outils fonctionnels
- IDE comme VS Code avec extension Python
Installation et configuration AutoGen
pip install pyautogen[retrievechat]~=0.4
pip install openai
# Vérification
python -c "import autogen; print(autogen.__version__)"
# Config OAI_CONFIG_LIST pour multi-modèles
cat > OAI_CONFIG_LIST.json << EOF
[
{
"model": "gpt-4o-mini",
"api_key": "votre_openai_key_ici"
},
{
"model": "gpt-4o",
"api_key": "votre_openai_key_ici"
}
]
EOFCette commande installe AutoGen avec support retrieval et OpenAI. Le fichier JSON OAI_CONFIG_LIST.json permet de router dynamiquement vers des modèles optimisés (mini pour rapidité, 4o pour complexité), évitant les surcoûts. Piège : oubliez ~=0.4 pour compatibilité 2026.
Premier duo : UserProxy et AssistantAgent
Commencez par un setup minimal : un UserProxyAgent simule l'humain (exécute code localement) et un AssistantAgent gère la logique LLM. Cette paire résout des tâches comme 'Écris un script Fibonacci récursif optimisé'. Le proxy exécute le code généré, itérant jusqu'à validation.
Duo agent basique pour génération de code
import autogen
config_list = autogen.config_list_from_json("OAI_CONFIG_LIST.json")
llm_config = {"config_list": config_list, "temperature": 0.7}
user_proxy = autogen.UserProxyAgent(
name="User",
human_input_mode="NEVER",
max_consecutive_auto_reply=10,
code_execution_config={"work_dir": "coding", "use_docker": False},
)
assistant = autogen.AssistantAgent(
name="Assistant",
llm_config=llm_config,
system_message="Tu es un expert Python. Écris du code concis et testé.",
)
user_proxy.initiate_chat(
assistant,
message="""Écris un script Python pour calculer la suite de Fibonacci jusqu'au 20e terme,
optimise pour récursion avec mémoïsation, et teste-le.""",
)Ce duo génère, exécute et valide du code itérativement. code_execution_config crée un dossier 'coding' pour isoler les exécutions. Température 0.7 équilibre créativité/précision ; max_consecutive_auto_reply=10 prévient les boucles infinies. Fonctionnel : copiez-collez pour tester immédiatement.
Évolution vers multi-agents : Ajout d'un CriticAgent
Passez à trois agents : ajoutez un CriticAgent pour revue pair. Le workflow : UserProxy → Assistant (génère) → Critic (valide) → handoff vers Assistant si besoin. Analogie : comme un code review en équipe DevOps, réduisant les bugs de 40% en production.
Multi-agents avec critique et handoff
import autogen
config_list = autogen.config_list_from_json("OAI_CONFIG_LIST.json")
llm_config = {"config_list": config_list}
user_proxy = autogen.UserProxyAgent(
name="User",
human_input_mode="NEVER",
max_consecutive_auto_reply=5,
code_execution_config={"work_dir": "coding"},
)
assistant = autogen.AssistantAgent(
name="Coder",
llm_config=llm_config,
system_message="Génère du code Python expert.",
)
critic = autogen.AssistantAgent(
name="Critic",
llm_config=llm_config,
system_message="""Critique le code : vérifie bugs, perf, style PEP8.
Si OK, dis 'APPROVED'. Sinon, explique et renvoie au Coder.""",
)
assistant.register_for_llm(name=critic, message="Critique ce code.")(critic)
user_proxy.initiate_chat(
assistant,
message="Écris une API FastAPI pour /fib/{n} avec cache Redis.",
clear_history=True,
)register_for_llm automatise le handoff Coder→Critic, simulant un pipeline CI/CD. clear_history=True reset les chats pour reproductibilité. Ce setup gère des tâches API complexes ; observez les logs pour tracer les itérations (typiquement 3-5 tours).
GroupChat : Orchestration collaborative
Pour des tâches holistiques, utilisez GroupChatManager. Agents : Engineer (code), Scientist (logique), Planner (stratégie). Le manager route dynamiquement via LLM, comme un scrum master IA. Exemple concret : optimiser un algo ML pour dataset Iris.
GroupChat avec routing dynamique
import autogen
from autogen import GroupChat, GroupChatManager
config_list = autogen.config_list_from_json("OAI_CONFIG_LIST.json")
llm_config = {"config_list": config_list}
# Agents spécialisés
planner = autogen.AssistantAgent(name="Planner", llm_config=llm_config, system_message="Planifie étapes haute niveau.")
engineer = autogen.AssistantAgent(name="Engineer", llm_config=llm_config, system_message="Implémente code ML scikit-learn.")
scientist = autogen.AssistantAgent(name="Scientist", llm_config=llm_config, system_message="Valide science data.")
user_proxy = autogen.UserProxyAgent(name="User", code_execution_config={"work_dir": "ml_workspace"})
groupchat = GroupChat(agents=[user_proxy, planner, engineer, scientist], messages=[], max_round=20)
manager = GroupChatManager(groupchat=groupchat, llm_config=llm_config)
user_proxy.initiate_chat(manager, message="Optimise un classifieur Iris sklearn >95% accuracy, avec gridsearch.")GroupChat route via LLM du manager, priorisant pertinence (ex: Planner start). max_round=20 cap les tours pour coûts. Crée 'ml_workspace' pour exécuter scikit-learn ; résultat : code ML validé et testé, prêt production.
Outils personnalisés et exécution sécurisée
Intégrez des fonctions outils pour agents proactifs. Ex: outil 'query_db' pour SQL sur SQLite. Sécurisez avec function_map et validation inputs, évitant injections comme en prod.
Agents avec outils custom (SQL + calc)
import autogen
import sqlite3
import json
config_list = autogen.config_list_from_json("OAI_CONFIG_LIST.json")
llm_config = {"config_list": config_list, "tools": [{"type": "function", "function": {"name": "query_db", "description": "Exécute SQL SELECT safe sur DB users.", "parameters": {"type": "object", "properties": {"query": {"type": "string"}}, "required": ["query"]}}]}
def query_db(query: str) -> str:
conn = sqlite3.connect(':memory:')
conn.execute("CREATE TABLE users (id INT, name TEXT)")
conn.execute("INSERT INTO users VALUES (1, 'Alice'), (2, 'Bob')")
cursor = conn.execute(query)
return json.dumps([dict(row) for row in cursor.fetchall()])
def calculator(expression: str) -> float:
return eval(expression, {"__builtins__": {}})
function_map = {
"query_db": query_db,
"calculator": calculator,
}
analyst = autogen.AssistantAgent(
name="Analyst",
llm_config=llm_config,
function_map=function_map,
)
user_proxy = autogen.UserProxyAgent("User")
user_proxy.initiate_chat(analyst, message="""DB users: id=1 Alice, id=2 Bob.
Calcule moyenne âges si age=25,30. Query nb users >id=1.""", )llm_config["tools"] expose schémas OpenAI tools ; function_map mappe aux funcs Python. DB in-memory pour démo safe ; eval restreint évite RCE. Agents appellent outils proactivement, fusionnant calc/DB en réponses intelligentes.
Persistance et scaling avec RetrieveChat
Pour prod, activez RetrieveChat avec RAG (FAISS/VectorDB). Persistez chats en JSONL pour audit. Scalez async avec register_for_execution.
Chat persistant avec RAG
import autogen
config_list = autogen.config_list_from_json("OAI_CONFIG_LIST.json")
# Docs pour RAG
DOCS = [
"AutoGen supporte multi-LLM depuis 0.2.",
"GroupChat route via GPT-4.",
"Outils via function calling.",
]
# RetrieveChat setup
user_proxy = autogen.UserProxyAgent(name="User")
assistant = autogen.AssistantAgent(name="Expert", llm_config={"config_list": config_list})
ragent = autogen.retrievechat.RetrieveUserProxyAgent(
name="RAG",
retrieve_config={
"task": "AutoGen",
"docs_path": "DOCS",
"chunk_token_size": 1000,
"model": config_list[0]["model"],
"client": autogen.retrievechat.OpenAIClient(),
},
)
chat = autogen.retrievechat.RetrieveChat(
agents=[user_proxy, ragent, assistant],
retrieve_agent=ragent,
max_turns=10,
)
chat.initiate_chat(user_proxy, message="Explique GroupChat en AutoGen ?")RetrieveChat indexe DOCS en FAISS pour RAG contextualisé, réduisant hallucinations. chunk_token_size=1000 optimise retrieval. Persistance auto en logs ; idéal pour chatbots support scalables avec mémoire externe.
Bonnes pratiques
- Routez modèles dynamiquement : mini pour drafts, 4o pour finals (économisez 70% coûts).
- Limitez rounds/tours :
max_round=12,cache_seed=42pour reproductibilité. - Sécurisez exécution : Docker=True en prod, validez tool inputs avec Pydantic.
- Loggez tout :
autogen.ChatResult.save("chat.jsonl")pour debug/audit. - Asyncifiez :
await agent.initiate_chat()pour >10 agents.
Erreurs courantes à éviter
- Boucles infinies : Sans
max_consecutive_auto_reply, agents divergent (fix: set=8). - Outils mal schématisés : Params JSON non-strict causent tool calls foireux (utilisez JSON Schema complet).
- Pas de clear_history : États pollués biaisent runs suivants (toujours reset en tests).
- Ignorez Docker : Code_execution sans isolement crash env local (activez en prod).
Pour aller plus loin
Plongez dans docs AutoGen officielles. Intégrez avec CrewAI pour hybridation. Découvrez nos formations Learni sur Agents IA avancés : ateliers pratiques multi-agents en entreprise.