Vous n'avez (probablement) pas besoin d'un LLM
Récemment via mes flux RSS, je suis tombé sur cet article qui nous propose de construire un agent intelligent pour surveiller les performances de nos chers sites web. Il s’agit là d’un bel exemple d’over-engineering. Voyons ça de plus prêt.
Depuis que j’ai suffisamment d’expérience pour m’en sentir légitime, je n’arrête pas de mettre en avant mon pragmatisme, cette capacité à utiliser une approche adaptée et mesurée au problème qu’on cherche à résoudre.
Alors quand j’ai un exemple parfait du contraire et qui en plus essaie de nous vendre l’utilisation inutile d’un LLM, je me dois de sauter sur l’occasion pour préciser le fond de ma pensée.
L’article en question
L’article est publié sur Codrops que je suis depuis longtemps pour sa partie “The Collective” publiée chaque semaine.
Il nous fait part des bienfaits de monitorer les performances d’un site web et d’être prévenu par email lorsque les performances (FCP, LCP et CLS en l’occurrence) passent sous certains seuils et nous propose un petit tutoriel pour créer notre propre agent autonome.
Jusqu’ici, à priori, le but est louable, le tout avec un plan qui ressemble à ceci :
- Récupérer les métriques grâce à l’API Lighthouse de Google
- Traiter et extraire les métriques pertinentes
- Mettre en forme ces données et inclure des actions correctives à mener en cas d’anomalies
- Envoyer l’email avec le HTML ainsi constitué
Vous voyez en quoi un LLM va pouvoir nous être utile ici ? Moi non plus.
Et pourtant, directement, on nous dirige vers un lien affilié vers Agent.ai pour commencer ce petit tutoriel.
Laissons de côté la création de l’agent, c’est du détail et passons au vif du sujet.
Les étapes
Récupérer les métriques
Ici pas de mystère, un appel à l’API Lighthouse et on récupère toutes les informations qui nous intéressent.
L’auteur enchaîne avec un petit truncate
du retour de l’API qui est plutôt bavarde (bah oui, sinon on risque d’atteindre la limite de contexte du LLM, malin !).
Extraire les métriques pertinentes
C’est là que tout commence à partir en vrille. N’importe quel développeur serait en mesure de traiter le retour de l’API directement en parcourant les données contenues, détecter si les seuils sont dépassés et remettre en forme si nécessaire. Même avec un outil low-code, on pourrait facilement s’en sortir.
Mais non ! Ce serait bien trop facile, et pas suffisamment disruptif !
Donnons plutôt un prompt à ChatGPT et serrons les fesses pour qu’il comprenne notre demande :
You are an assistant that extracts relevant information from Lighthouse API results.
Given the following JSON input, extract the specified details and format them in JSON:
Input JSON:
{{sanitizedMetrics}}
### Extract the following details:
1. **Website URL**:
- The URL of the website being analyzed.
2. **Metrics**:
- `fcp`: First Contentful Paint (in seconds).
- `lcp`: Largest Contentful Paint (in seconds).
- `cls`: Cumulative Layout Shift value.
- `performanceScore`: Performance score (as a percentage).
3. **Anomalies**:
- For `fcp`: Return `true` if FCP > 2 seconds, otherwise `false`.
- For `lcp`: Return `true` if LCP > 2.5 seconds, otherwise `false`.
- For `cls`: Return `true` if CLS > 0.1, otherwise `false`.
4. **Suggested Actions**:
- Provide actionable recommendations based on detected anomalies.
### Expected JSON Output Example:
{
"url": "https://example.com",
"metrics": {
"fcp": "2.3",
"lcp": "1.8",
"cls": "0.12",
"performanceScore": "89"
},
"anomalies": {
"fcp": true,
"lcp": false,
"cls": true
},
"suggestedActions": [
"Optimize images to improve FCP",
"Reduce layout shifts by reserving space for ads or images"
]
}
Bon ok, je me moque et c’est pas très sympa de ma part. Sauf que quand on connaît un minimum le fonctionnement des LLMs (et au passage, les vidéos de 3Blue1Brown sont top), on voit tout de suite ce qui pourrait mal tourner là dedans et à quel point c’est sous-optimal en terme de resources et de performances.
Faire reposer ne serait-ce que la logique des seuils et le calcul du score de performance dans un prompt me semble personnellement très bancal.
Ici on pourrait me répondre que pour remplir la propriété suggestedActions
, cela pourrait effectivement être utile.
Si c’était vraiment le cas, on pourrait sortir les métriques de manière traditionnelle et n’utiliser le LLM que pour cette partie ci. Mais à dire vrai, l’API Lighthouse nous retourne déjà une liste d’actions à entreprendre dans le cas d’anomalies…
Mettre en forme ces données dans un email
Une fois encore, mettre en forme un email à partir d’un modèle et de données, même si ça peut s’avérer frustrant en terme de mise en page, c’est quelque chose qu’on sait faire efficacement dans n’importe quel langage depuis des lustres.
Et une fois encore, l’article repart sur un prompt !
You are an assistant that formats data into a professional and visually appealing HTML email body. Use the following JSON data to create a structured and concise email report in HTML format:
Input JSON:
{{processedMetrics}}
### Instructions:
1. **Greeting and Introduction**:
- Include a welcoming line and specify the purpose of the email.
- Mention the website URL as a clickable link.
2. **Metrics Summary**:
- Use a styled HTML table to display key metrics with two columns: Metric Name and Value.
- Ensure proper alignment, spacing, and readability.
3. **Highlighted Anomalies**:
- If anomalies are detected, list them as bullet points.
- Highlight critical issues using bold text or distinct color.
4. **Suggested Actions**:
- Present actionable recommendations in a numbered list.
5. **Closing Statement**:
- Conclude with a polite summary encouraging further action.
- Sign off with "Best regards" and a placeholder for the team name.
### Requirements:
- Use clean and modern HTML with inline styles for email compatibility.
- Focus on readability with a professional, minimalist design.
- Output **only** the email body in HTML format.
### Example Structure for Output:
<!DOCTYPE html>
<html>
<body style="font-family: Arial, sans-serif; line-height: 1.6; max-width: 600px; margin: 0 auto; color: #333;">
<!-- Introduction -->
<p>Hello,</p>
<p>Here is the Lighthouse metrics report for your website:
<a href="https://tympanus.net/codrops/" target="_blank" style="color: #4CAF50; text-decoration: none;">Codrops</a>.
</p>
<!-- Metrics Summary -->
<h2 style="color: #4CAF50; font-size: 20px;">Metrics Summary</h2>
<table style="border-collapse: collapse; width: 100%; margin-bottom: 20px; border: 1px solid #ddd;">
<tr style="background-color: #f9f9f9;">
<th style="text-align: left; border-bottom: 2px solid #ddd; padding: 8px;">Metric</th>
<th style="text-align: left; border-bottom: 2px solid #ddd; padding: 8px;">Value</th>
</tr>
<tr>
<td style="padding: 8px;">First Contentful Paint (FCP)</td>
<td style="padding: 8px;">1.804 seconds</td>
</tr>
<tr>
<td style="padding: 8px;">Largest Contentful Paint (LCP)</td>
<td style="padding: 8px;">2.045 seconds</td>
</tr>
<tr>
<td style="padding: 8px;">Cumulative Layout Shift (CLS)</td>
<td style="padding: 8px;">0.0006</td>
</tr>
<tr>
<td style="padding: 8px;">Performance Score</td>
<td style="padding: 8px;">AVERAGE</td>
</tr>
</table>
<!-- Anomalies -->
<h2 style="color: #FF5722; font-size: 20px;">Anomalies Detected</h2>
<ul style="padding-left: 20px; margin-bottom: 20px;">
<li>No anomalies detected for FCP (below 2 seconds).</li>
<li>No anomalies detected for LCP (below 2.5 seconds).</li>
<li>No anomalies detected for CLS (below 0.1).</li>
</ul>
<!-- Suggested Actions -->
<h2 style="color: #2196F3; font-size: 20px;">Suggested Actions</h2>
<p style="color: #555;">No suggested actions. Your website is performing well based on the current metrics!</p>
<!-- Closing -->
<p style="margin-top: 20px;">We recommend continuing to monitor these metrics to maintain a great user experience and optimize performance as needed.</p>
<p style="margin-top: 20px;">Best regards,<br><strong>Your Performance Watchdog</strong></p>
</body>
</html>
Apprécions qu’au final le template qui nous serait nécessaire pour faire un rendu comme on sait le faire fait lui même parti du prompt…
Rien à ajouter pour l’envoi de l’email, c’est du classique et on peut donc s’arrêter là.
Conclusion
Pour moi cet article reflète bien le soucis avec la hype autour des IA génératives. Ce n’est pas parce qu’on peut le faire avec ce nouvel outil qu’il faut forcément partir sur cette solution.
Sans trop m’avancer, je pense qu’il sera toujours plus efficace de partir sur une solution dite classique si c’est possible. En l’occurrence ici, reposer sur un LLM est un énorme gâchis de ressources et d’argent.
Alors oui, en mettant en place ce genre d’outil, le marketing pourra mettre en avant l’utilisation de l’IA, mais au final la valeur ajoutée sera nulle voire négative.
Il serait préférable de ne réserver ces outils qu’aux problèmes impossibles à résoudre avec des solutions éprouvées, surtout quand on prend en compte l’impact important de ces outils sur notre société.