Salut tout le monde, Emma ici d’agent101.net !
Nous sommes en mars 2026, et si vous êtes comme moi, vous avez probablement entendu les nouvelles concernant les agents IA qui deviennent plus intelligents, plus capables, et franchement, un peu plus intimidants à utiliser. Il y a juste quelques années, nous étions tous fascinés par des LLM écrivant des poèmes ; maintenant, ils semblent presque gérer de petites entreprises pour nous. Le rythme est fou, non ?
Aujourd’hui, je veux aborder quelque chose qui me préoccupe et, d’après ma boîte de réception, qui vous préoccupe aussi : comment aller au-delà du simple fait de *parler* à une IA et la faire réellement *agir* pour vous, de manière répétée, sans avoir à la surveiller. Plus précisément, nous allons explorer comment configurer un agent IA personnel super simple en utilisant un outil que vous avez peut-être déjà sur votre machine : un script Python et un peu d’aide de l’API Assistant d’OpenAI. Pensez-y comme à donner à votre IA un petit travail ciblé, comme être votre résumeur d’articles personnel sur un sujet spécifique.
Pourquoi cet angle précis ? Parce que les aperçus génériques de « ce qu’est un agent IA » sont omniprésents. Ce qui est plus difficile à trouver est un guide pratique, sans chichis, qui vous amène de zéro à un agent fonctionnel sans avoir besoin d’un doctorat en informatique. Je me souviens de mes propres frustrations à essayer de rassembler tout cela, ayant l’impression de devoir comprendre chaque nuance de l’ingénierie des prompts et des appels d’API avant même de pouvoir faire en sorte qu’un bot m’envoie une mise à jour météo. Spoiler : vous n’avez pas besoin de le faire. Nous allons construire quelque chose de petit, utile, et surtout, *compréhensible*, afin que vous puissiez vous y appuyer.
Mon Moment Aha! Personnel avec les Résumés Assistés par Agent
Laissez-moi vous raconter une petite histoire. Depuis un certain temps, j’essaie de suivre l’incroyable flux d’informations et de recherches sur la sécurité et l’éthique de l’IA. C’est crucial pour mon travail ici, mais aussi, franchement, juste pour comprendre l’avenir que nous construisons. Je passerais des heures à trier des articles, des documents de recherche et des billets de blog. Mon cerveau était en ébullition d’ici le déjeuner.
J’ai essayé les flux RSS, des applications de lecture ultérieure, j’ai même embauché une assistante virtuelle pendant un moment. Rien n’était vraiment à la hauteur. L’assistante virtuelle était chère, et les applications étaient juste des agrégateurs ; je devais encore faire tout le boulot de lecture et de digestion. Puis, c’est là que j’ai eu une idée : que se passerait-il si je pouvais entraîner un petit agent IA à faire *juste une seule chose* ? Trouver des articles sur la sécurité de l’IA, les lire et résumer les points clés pour moi, chaque jour ?
C’est là que j’ai commencé à jouer avec l’API Assistant d’OpenAI. Elle est conçue précisément pour ce type de comportement « agentique » : donner à une IA un ensemble d’instructions, des outils et une mémoire, puis la laisser agir. Ma première tentative était un désordre, honnêtement. J’ai essayé de le rendre trop complexe, en lui donnant trop de responsabilités. C’était comme essayer d’apprendre à un enfant à voler un avion avant qu’il ne sache marcher. Mais ensuite, j’ai simplifié. J’ai réduit son champ d’action à *juste* résumer des articles à partir d’une liste que je fournis, en me concentrant sur les arguments clés et les biais potentiels.
La différence était incroyable. Soudain, je recevais des résumés concis et pertinents livrés. Ce n’était pas parfait – parfois, il manquait des subtilités, parfois il se concentrait sur quelque chose qui ne m’intéressait pas – mais c’était une amélioration massive par rapport à ma méthode précédente. Et le meilleur ? Je comprenais *comment* ça fonctionnait, ce qui me donnait la confiance nécessaire pour l’ajuster et élargir lentement ses capacités. C’est ce sentiment que je veux que vous ressentiez aujourd’hui.
Pourquoi l’API Assistant d’OpenAI pour les Débutants ?
Il existe des tonnes de frameworks pour construire des agents IA – LangChain, AutoGen, CrewAI, pour en nommer quelques-uns. Ils sont puissants, sans aucun doute. Mais pour un vrai débutant, ils peuvent donner l’impression d’essayer de boire à un tuyau d’incendie. L’API Assistant d’OpenAI, en revanche, abstrait beaucoup de complexité. Vous définissez un « Assistant » avec un but, un modèle et quelques « outils », puis vous interagissez avec lui via des « Threads » et des « Messages ». Il gère l’historique des conversations, les appels d’outils, et même un peu de raisonnement de base pour vous.
C’est comme mettre en place un petit travailleur IA spécialisé. Vous lui donnez une description de poste (ses instructions), quelques manuels de référence (fichiers de connaissance), et une boîte à outils (fonctions qu’il peut appeler). Ensuite, il vous suffit de lui donner des tâches.
Notre Mission Aujourd’hui : Un Agent Résumeur d’Articles Web Simple
Nous allons construire un script Python qui :
- Crée un Assistant OpenAI.
- Leur donne une instruction spécifique : articles web.
- Leur fournit un « outil » pour récupérer le contenu d’une page web.
- Prend une URL de votre part, la renvoie à l’agent et récupère un résumé.
Cet agent ne « naviguera » pas sur le web de son propre chef ni ne décidera quoi que ce soit. Vous lui fournirez le lien. Cela garde les choses simples et contrôlables, parfait pour comprendre les mécanismes fondamentaux.
Prérequis (Ne les Ignorez Pas !)
- Python 3.8+ installé : Si vous ne l’avez pas, une simple recherche Google pour « installer Python [votre OS] » vous y conduira.
- Une clé API OpenAI : Vous pouvez l’obtenir sur le site web de la plateforme OpenAI. Assurez-vous d’avoir des crédits !
- Une connaissance de base de la ligne de commande : Juste assez pour exécuter un script Python.
- Un éditeur de texte : VS Code, Sublime Text, même Notepad fera l’affaire.
Étape 1 : Préparer Votre Environnement
Tout d’abord, préparons notre environnement Python. Ouvrez votre terminal ou votre invite de commandes.
# Créer un nouveau répertoire pour notre projet
mkdir ai_summarizer_agent
cd ai_summarizer_agent
# Créer un environnement virtuel (bonne pratique !)
python -m venv venv
# Activer l'environnement virtuel
# Sur macOS/Linux :
source venv/bin/activate
# Sur Windows :
venv\Scripts\activate
# Installer les bibliothèques nécessaires
pip install openai beautifulsoup4 requests
Qu’avons-nous installé ?
openai: C’est la bibliothèque officielle pour interagir avec les API d’OpenAI.beautifulsoup4: Une bibliothèque fantastique pour analyser le HTML. Nous l’utiliserons pour extraire du texte des pages web.requests: Pour faire des requêtes HTTP, c’est-à-dire pour télécharger le contenu de la page web.
Ensuite, créez un fichier nommé .env dans votre répertoire ai_summarizer_agent et ajoutez votre clé API :
OPENAI_API_KEY="VOTRE_CLE_API_OPENAI_ICI"
Remplacez VOTRE_CLE_API_OPENAI_ICI par votre véritable clé. Cela permet de garder votre clé en dehors de votre code principal, ce qui est important pour la sécurité !
Étape 2 : Construire Notre Outil de Récupération Web
Notre agent IA a besoin d’un moyen de « lire » une page web. Étant donné que les LLM ne peuvent pas naviguer nativement sur Internet (à moins que vous n’utilisiez un modèle spécifique avec des capacités de navigation, ce qui ajoute de la complexité que nous voulons éviter pour l’instant), nous allons lui donner un outil personnalisé. Cet outil sera une simple fonction Python qui prend une URL, récupère son contenu et extrait le texte principal.
Créez un nouveau fichier nommé tools.py dans votre répertoire de projet :
import requests
from bs4 import BeautifulSoup
def fetch_web_article_content(url: str) -> str:
"""
Récupère le contenu principal d'un article web à partir d'une URL donnée.
"""
try:
response = requests.get(url, timeout=10)
response.raise_for_status() # Lève une exception pour les erreurs HTTP (4xx ou 5xx)
soup = BeautifulSoup(response.text, 'html.parser')
# Essaye de trouver des éléments de contenu d'article courants
article_body = soup.find('article') or soup.find('main') or soup.find('div', class_='content')
if article_body:
paragraphs = article_body.find_all('p')
article_text = '\n'.join([p.get_text() for p in paragraphs])
else:
# Fallback si des éléments d'article spécifiques ne sont pas trouvés
article_text = soup.get_text(separator='\n', strip=True)
# Nettoyage de base et troncature pour éviter des entrées trop longues
cleaned_text = ' '.join(article_text.split())
return cleaned_text[:30000] # Tronquer pour éviter de dépasser les limites de tokens
except requests.exceptions.RequestException as e:
return f"Erreur lors de la récupération de l'URL : {e}"
except Exception as e:
return f"Une erreur inattendue est survenue : {e}"
if __name__ == '__main__':
# Tester l'outil directement
test_url = "https://www.theverge.com/2024/3/20/24106575/nvidia-gputech-ai-chips-future-computing"
content = fetch_web_article_content(test_url)
print(f"--- Contenu Récupéré (premiers 500 caractères) ---")
print(content[:500])
print(f"--- Longueur totale : {len(content)} ---")
Cette fonction fait plusieurs choses :
- Utilise
requestspour télécharger le HTML de la page. - Utilise
BeautifulSouppour analyser le HTML. - Essaye de trouver des éléments d’article courants (comme
<article>,<main>) pour extraire le texte pertinent. Si elle ne peut pas les trouver, elle prend simplement tout le texte visible. - Nettoie un peu le texte et le tronque pour éviter d’envoyer des entrées trop longues à l’IA (ce qui coûte plus cher et peut atteindre les limites de tokens).
- Inclut une gestion des erreurs pour les problèmes de réseau ou les URLs incorrectes.
Exécutez python tools.py pour le tester avec l’URL d’exemple. Vous devriez voir une version tronquée du contenu d’un article affichée dans votre console.
Étape 3 : Créer et Interagir avec Notre Agent Résumeur
Maintenant, place à l’événement principal ! Nous allons écrire le script qui rassemble tout.
Créez un nouveau fichier nommé summarizer_agent.py :
“`html
import os
import time
import json
from openai import OpenAI
from dotenv import load_dotenv
from tools import fetch_web_article_content # Importer notre outil personnalisé
# Charger les variables d'environnement (comme votre clé API)
load_dotenv()
# Initialiser le client OpenAI
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# Définir notre schéma d'outil pour l'API Assistant
# Cela indique à l'API Assistant comment appeler notre fonction fetch_web_article_content
web_fetch_tool = {
"type": "function",
"function": {
"name": "fetch_web_article_content",
"description": "Récupère le contenu textuel principal d'une URL web donnée pour résumé.",
"parameters": {
"type": "object",
"properties": {
"url": {"type": "string", "description": "L'URL de l'article web."},
},
"required": ["url"],
},
},
}
def create_or_retrieve_assistant(name="Agent de résumé d'article", model="gpt-4o"):
"""
Vérifie si un assistant avec le nom donné existe déjà.
Si oui, le récupère. Si non, en crée un nouveau.
"""
assistants = client.beta.assistants.list(order="desc", limit="20")
for assistant in assistants.data:
if assistant.name == name:
print(f"Assistant existant trouvé : {assistant.id}")
return assistant
print(f"Création d'un nouvel assistant : {name}")
assistant = client.beta.assistants.create(
name=name,
instructions=(
"Vous êtes un expert en résumés d'articles. Votre tâche consiste à récupérer le contenu d'une URL web fournie "
"en utilisant l'outil 'fetch_web_article_content', puis à résumer l'article de manière concise. "
"Concentrez-vous sur les principaux arguments, les conclusions clés et les résultats. "
"Si le contenu est trop long ou qu'une erreur se produit, mentionnez-le dans votre résumé."
),
model=model,
tools=[web_fetch_tool],
)
print(f"Assistant créé avec l'ID : {assistant.id}")
return assistant
def run_assistant_and_get_response(assistant_id, user_message, thread_id=None):
"""
Envoie un message à l'assistant, fait fonctionner le fil, et gère les appels d'outils.
Retourne la réponse finale de l'assistant et l'ID du fil.
"""
if thread_id is None:
thread = client.beta.threads.create()
thread_id = thread.id
print(f"Nouveau fil créé : {thread_id}")
else:
print(f"Utilisation du fil existant : {thread_id}")
# Ajouter le message de l'utilisateur dans le fil
client.beta.threads.messages.create(
thread_id=thread_id,
role="user",
content=user_message,
)
# Exécuter l'assistant
run = client.beta.threads.runs.create(
thread_id=thread_id,
assistant_id=assistant_id,
)
# Vérifier le statut de l'exécution jusqu'à ce qu'il soit terminé ou nécessite une action
while run.status in ['queued', 'in_progress', 'cancelling']:
time.sleep(1)
run = client.beta.threads.runs.retrieve(
thread_id=thread_id,
run_id=run.id
)
if run.status == 'requires_action':
print("L'assistant nécessite une action d'outil...")
tool_outputs = []
for tool_call in run.required_action.submit_tool_outputs.tool_calls:
if tool_call.function.name == "fetch_web_article_content":
url_to_fetch = json.loads(tool_call.function.arguments)["url"]
print(f"Appel de l'outil : fetch_web_article_content avec l'URL : {url_to_fetch}")
# Exécuter notre fonction Python locale
article_content = fetch_web_article_content(url_to_fetch)
tool_outputs.append({
"tool_call_id": tool_call.id,
"output": article_content,
})
# Si nous avions d'autres outils, nous les traiterions ici
# Soumettre les sorties d'outils à l'assistant
run = client.beta.threads.runs.submit_tool_outputs(
thread_id=thread_id,
run_id=run.id,
tool_outputs=tool_outputs
)
# Vérifier à nouveau la réponse finale
while run.status in ['queued', 'in_progress', 'cancelling']:
time.sleep(1)
run = client.beta.threads.runs.retrieve(
thread_id=thread_id,
run_id=run.id
)
if run.status == 'completed':
messages = client.beta.threads.messages.list(
thread_id=thread_id,
order="asc" # Obtenir les messages dans l'ordre chronologique
)
assistant_responses = []
for message in messages.data:
if message.role == 'assistant':
for content_block in message.content:
if content_block.type == 'text':
assistant_responses.append(content_block.text.value)
return "\n".join(assistant_responses), thread_id
else:
return f"Exécution terminée avec le statut : {run.status}", thread_id
if __name__ == '__main__':
assistant = create_or_retrieve_assistant()
current_thread_id = None # Commencer sans fil, laisser la fonction en créer un
print("\n--- Agent de résumé d'article ---")
print("Tapez une URL ou 'exit' pour quitter.")
while True:
user_input = input("\nEntrez l'URL : ").strip()
if user_input.lower() == 'exit':
break
if not user_input.startswith("http"):
print("Veuillez entrer une URL valide commençant par http:// ou https://")
continue
try:
print("Résumé de l'article... Cela pourrait prendre un moment.")
response, current_thread_id = run_assistant_and_get_response(
assistant.id,
f"Veuillez résumer l'article trouvé à cette URL : {user_input}",
current_thread_id # Passer l'ID du fil pour maintenir le contexte de conversation
)
print("\n--- Résumé ---")
print(response)
print("-----------------")
except Exception as e:
print(f"Une erreur s'est produite : {e}")
# Réinitialiser thread_id en cas d'erreur si vous souhaitez recommencer à zéro la prochaine fois
# current_thread_id = None
print("Sortie de l'agent de résumé. Au revoir !")
Détaillons ce script :
web_fetch_tool
Ce dictionnaire décrit notre fonction fetch_web_article_content à l’API Assistant d’OpenAI. Il précise le name de la fonction, une description utile (cruciale pour que l’IA sache quand l’utiliser !), et ses parameters. L’IA utilisera ce schéma pour comprendre comment appeler notre fonction Python.
create_or_retrieve_assistant()
Cette fonction est astucieuse. Elle vérifie d’abord si vous avez déjà créé un assistant nommé « Agent de résumé d’article » sur votre compte OpenAI. Si c’est le cas, elle le réutilise, vous faisant économiser des appels API et gardant votre configuration propre. Sinon, elle en crée un nouveau. Éléments importants ici :
name: Un nom lisible par l’homme pour votre assistant.instructions: C’est la « description du poste » de votre agent. Plus vous êtes clair et précis ici, mieux votre agent fonctionnera. Je lui ai dit de se concentrer sur les points clés et de gérer les erreurs.model: J’utilisegpt-4oici pour ses capacités de raisonnement et d’appel d’outils. Vous pourriez essayergpt-3.5-turbopour une option moins chère et plus rapide, mais les résultats pourraient varier.tools=[web_fetch_tool]: C’est ici que nous indiquons à l’assistant notre outil de récupération web personnalisé.
run_assistant_and_get_response()
Ceci est la boucle d’interaction principale. Elle :
- Gère les fils : Elle crée soit un nouveau fil de conversation, soit continue un fil existant (
thread_id). Les fils sont comment l’API Assistant garde une trace de l’historique de la conversation. - Ajoute le message de l’utilisateur : Elle envoie votre demande d’URL à l’assistant dans le fil.
- Exécute l’assistant : Elle initie une « exécution », qui est le processus de réflexion de l’assistant.
- Vérifie le statut : L’API Assistant est asynchrone, donc nous devons continuer à vérifier le
run.statusjusqu’à ce qu’il soit terminé ou nécessite une entrée de notre part. - Gère
requires_action: C’est la partie magique ! Si l’assistant décide qu’il a besoin d’utiliser un outil (comme notrefetch_web_article_content), le statut de l’exécution deviendrarequires_action. Notre script analyse alors l’appel à l’outil, exécute notre fonction Python *locale* (fetch_web_article_content), et renvoie la sortie à l’assistant. - Récupère la réponse : Une fois l’exécution
completed, elle obtient tous les messages de l’assistant et retourne le dernier.
if __name__ == '__main__':
Ce bloc rend le script interactif. Il vous invite continuellement à entrer une URL, appelle notre agent et imprime le résumé. Il maintient également le current_thread_id afin que votre agent se souvienne des interactions précédentes (bien que pour cette tâche spécifique de résumé, ce ne soit pas strictement nécessaire, c’est une bonne pratique pour des agents plus complexes).
Étape 4 : Exécution de votre agent de résumé !
Maintenant, enregistrez les deux fichiers (tools.py et summarizer_agent.py) dans le même répertoire. Assurez-vous que votre environnement virtuel est activé.
# Assurez-vous d'être dans le répertoire ai_summarizer_agent
# et que votre venv est activé
python summarizer_agent.py
La première fois que vous l’exécutez, vous le verrez créer l’assistant. Cela peut prendre quelques secondes. Les exécutions suivantes seront plus rapides car il récupère l’assistant existant.
Ensuite, il vous demandera une URL. Essayez de coller un lien d’article, comme :
https://www.nytimes.com/2024/03/23/technology/ai-agents-google-openai.html
Ou tout autre article qui vous intéresse. Regardez-le traiter, appeler l’outil et finalement, produire un résumé !
Vous pourriez remarquer un délai pendant que l’assistant fonctionne et exécute ses appels d’outils. C’est normal. La boucle de vérification attend que les serveurs d’OpenAI traitent la demande, appellent l’outil, puis continuent à raisonner.
Leçons pratiques et prochaines étapes
Félicitations ! Vous venez de construire votre premier agent IA simple en utilisant l’API Assistant d’OpenAI et des outils personnalisés. Voici ce que vous devriez retenir de cela et comment vous pouvez l’étendre :
-
Commencez petit et ciblé :
C’est mon meilleur conseil. Plutôt que d’essayer de construire une IA polyvalente qui fait tout, choisissez une tâche spécifique et répétable. Notre résumé est un exemple parfait. Cela facilite le débogage et vous aide à comprendre les mécaniques fondamentales.
-
Les instructions sont clés :
“`
La qualité de la sortie de votre agent est directement proportionnelle à la clarté et à la spécificité de ses
instructions. Expérimentez avec différentes formulations. Dites-lui sur quoi se concentrer, quel ton utiliser et comment gérer les cas particuliers. -
Les outils permettent aux Agents :
Les agents IA sont puissants non seulement grâce à leur “cerveau” (le LLM) mais aussi grâce aux “mains” que vous leur fournissez (les outils). Notre outil
fetch_web_article_contenta étendu les capacités de l’IA au-delà de la simple génération de texte. Pensez à d’autres outils que vous pourriez créer : écrire dans un fichier, envoyer un e-mail, interroger une base de données, rechercher une base de connaissances spécifique. -
La gestion des erreurs est votre alliée :
Les données du monde réel sont désordonnées. Les sites Web tombent en panne, les API renvoient des erreurs. Remarquez comment nous avons ajouté des blocs
try-exceptdans notre fonctionfetch_web_article_content. Votre agent doit gérer ces situations avec grâce, sinon il va simplement planter. Indiquez à votre agent dans ses instructions quoi faire si un outil échoue. -
Explorez et expérimentez :
- Ajoutez plus d’outils : Votre agent pourrait-il également rechercher une base de données spécifique d’articles de recherche ? Pourrait-il enregistrer des résumés dans un fichier texte ?
- Affinez les instructions : Demandez-lui pour une audience spécifique (par exemple, “résumer pour un enfant de 10 ans,” ou “récapituler en se concentrant sur les implications économiques”).
- Ajoutez de la mémoire (au-delà du fil) : Notre configuration actuelle utilise le fil pour la mémoire. Pour des agents plus persistants, vous pourriez vouloir enregistrer l’historique des conversations ou des faits clés dans une base de données.
- Exécutions programmées : Au lieu de coller manuellement des URL, pourriez-vous connecter cela à un flux RSS et lui faire résumer de nouveaux articles chaque jour ?
Ceci n’est que le début de votre parcours vers la création d’agents IA. Les principes que nous avons utilisés aujourd’hui – définir un objectif clair, fournir des outils et itérer sur les instructions – s’appliquent à des systèmes d’agents beaucoup plus complexes. Vous avez maintenant un exemple tangible et fonctionnel que vous avez construit vous-même. Allez-y et créez !
Si vous construisez quelque chose de chouette avec cela, ou si vous rencontrez des difficultés, contactez-moi sur Twitter ou laissez un commentaire ci-dessous. J’aimerais beaucoup en entendre parler !
À la prochaine,
Emma Walsh
agent101.net
Articles Connexes
- Les agents IA peuvent-ils améliorer le service client
- Plateformes Low-Code pour la création d’agents IA
- Créer un agent de recherche OpenClaw
🕒 Published: