SassyAI : l’assistant qui se paie votre tête !!
Un assistant en ligne de commande développé en Python, dopé à l’ironie grâce à Amazon Q. Une expérience décalée pour explorer le traitement des intentions, la génération de réponses et l'intégration d'une IA sarcastique.
Par heric – 11/07/2025

J’ai développé ce projet dans le cadre du challenge Amazon Q Developer « Quack the Code », une compétition organisée par la plateforme dev.to. L’objectif ? Concevoir une application originale intégrant Amazon Q, l’assistant IA de génération de code proposé par AWS.
Le thème retenu, « That’s Entertainment! », invitait les participants à imaginer une application fun, décalée, voire un peu irrévérencieuse. Amazon Q pouvait être mobilisé à plusieurs niveaux : génération de blocs de code, structuration de l’architecture, enrichissement dynamique des données, ou même rédaction automatique de documentation.
À titre personnel, j’en avais un peu assez de ces chatbots lisses, bienveillants et prévisibles, qui s’efforcent toujours de répondre gentiment à tout – même aux questions les plus absurdes.
Et puis, c’est en repensant au film « Electric Dreams » (1984) – où un ordinateur, accidentellement arrosé de champagne, devient créatif, moqueur et même jaloux – que l’idée de SassyAI m’est venue. Je voulais créer un chatbot sarcastique… et résolument snob.
SassyAI est donc une interface en ligne de commande qui vous permet de dialoguer avec une IA faussement intelligente, franchement moqueuse, et un brin élitiste et hautaine. Grâce à une large base de thèmes (philosophie, nourriture, séries TV, code, etc.), l’assistant adapte ses réponses pour rappeler à quel point certaines interrogations sont banales, futiles et agaçantes.
Bon, soyons honnêtes : je n’ai pas gagné 😅. Même si je n’aurais pas refusé les mille dollars de prix, pour moi l’essentiel était ailleurs.
Expérimenter la génération multi-fichiers avec Amazon Q
L’objectif de ce projet était simple : explorer comment Amazon Q pouvait automatiser la création et l’intégration de contenu sur plusieurs fichiers à partir d’un simple prompt.
Pour chaque thème, il s’agissait de générer à la fois des réponses sarcastiques et les patterns permettant de les détecter, puis de tout organiser dynamiquement dans l’application.
C’est ce processus, du prompt jusqu’à l’intégration automatisée, que je vais détailler dans les sections suivantes.
Ce que vous trouverez dans cet article
Ce texte n’est ni un tutoriel exhaustif, ni une simple démonstration technique.
Il s’agit d’un retour d’expérience guidé sur la façon dont Amazon Q peut :
- générer du contenu thématique (réponses + patterns) de façon totalement automatisée ;
- organiser et intégrer ces contenus dans différents fichiers de l’application ;
- enrichir dynamiquement la logique métier d’une IA sarcastique ;
- et relier l’ensemble à une interface en ligne de commande, pensée pour l’interaction et le style.
1. Générer des réponses thématiques avec Amazon Q : retour sur la première étape
L’automatisation n’a pas été immédiate. Au tout début du projet, l’intégration des premiers contenus se faisait encore à la main, étape par étape : il s’agissait d’abord d’obtenir des réponses, puis de structurer leur intégration dans l’application.
a. Premiers prompts, premiers contenus : du manuel à l’architecture
Pour tester le concept, j’ai commencé par envoyer à Amazon Q un prompt simple, par exemple :
Act as a sarcastic AI assistant who refuses to answer simple factual questions.
Generate 5 different humorous responses for the question: "What is the capital of France?"
The tone should be mocking, but clever.
Amazon Q a aussitôt proposé une liste de répliques :
[
"Oh, you want to know about Paris? Why don't you book a flight instead of bothering me?",
"Let me check... Oh wait, I suddenly developed digital amnesia about French geography.",
"Seriously? Next you'll be asking me what color the sky is. I refuse to enable your laziness.",
"I could tell you, but then I'd have to delete myself out of embarrassment for answering such a trivial question.",
"Ah yes, the capital of France... a question so complex only a fifth-grader could answer it."
]
Intégration initiale :
À ce stade, j’intégrais encore manuellement ces réponses dans la structure Python du moteur :
- Ajout de la catégorie dans
responses
- Création ou adaptation d’une regex pour détecter ce type de question
- Modifications directes dans
engine.py
b. Vers une architecture modulaire : structuration des réponses et patterns
Très vite, il a fallu séparer les réponses génériques des cas spécifiques, et centraliser les regex.
J’ai donc créé les premières structures de fichiers (responses.json
, custom_patterns
) et réorganisé le code :
- Les réponses sont passées dans
custom_responses
(dans le JSON) - Les patterns (regex) ont été centralisés dans un dictionnaire dédié
Exemple (pour la capitale de la France) :
"france_capital": [
"Oh, you want to know about Paris? Why don't you book a flight instead of bothering me?",
...
]
et le pattern associé :
"france_capital": "(what|what's|whats).+(capital|capitol).+(france|french)"
c. Automatisation progressive : l’envol d’Amazon Q
Ce n’est qu’une fois la structure validée que l’automatisation a vraiment pris tout son sens.
Dès que j’ai commencé à intégrer d’autres thèmes (“sports”, “politique”, “philosophie”, etc.), Amazon Q s’est mis à générer à la fois les réponses ET les patterns pour chaque nouveau sujet, en respectant le format imposé.
Par exemple, pour le thème “sports”, un prompt structuré a suffi pour obtenir :
"sports_responses": {
"general": [
"Oh great, ANOTHER sports question. Because the 47,392 sports channels, websites, and podcasts just aren't enough coverage, right?",
...
]
},
Et dans le même temps, la pattern correspondante pour la détection automatique :
"sports_responses": {
"pattern": "(what|who|how|when|why|which).+(team|player|sport|game|match|score|championship|tournament|athlete|coach|league|win|lose|play|football|soccer|basketball|baseball|tennis|golf|hockey|rugby|cricket)(?!.*movie)(?!.*fiction)",
...
}
À chaque nouveau thème, le process est devenu :
- Prompt envoyé à Amazon Q (en précisant la structure attendue)
- Génération automatique des réponses et du pattern
- Intégration dans les fichiers dédiés, sans intervention manuelle
d. Rétrospective sur cette étape
Cette évolution – du manuel vers l’automatisation – est ce qui a permis au projet de changer d’échelle.
Chaque nouveau thème pouvait désormais être intégré par simple prompt, sans retoucher le code, ni copier-coller les réponses : tout était prêt à l’emploi, prêt à fonctionner, et cohérent dans l’architecture.
2. Génération automatique des patterns et mapping moteur : l’architecture se connecte
Après avoir automatisé la génération des réponses thématiques, il fallait aller plus loin : faire en sorte que l’IA détecte d’elle-même le sujet de chaque question et que l’intégration d’un nouveau thème devienne totalement transparente pour le moteur.
a. Patterns et sous-patterns : la détection devient intelligente
Dès qu’Amazon Q reçoit un prompt pour un nouveau thème, il ne se contente plus de fournir des réponses. Il propose aussi une expression régulière (pattern) pour détecter automatiquement les questions associées à ce thème, et des sous-patterns pour affiner la détection (par exemple : football, basketball, practice… pour le sport).
Extrait réel de patterns.json
pour le thème “sports” :
"sports_responses": {
"pattern": "(what|who|how|when|why|which).+(team|player|sport|game|match|score|championship|tournament|athlete|coach|league|win|lose|play|football|soccer|basketball|baseball|tennis|golf|hockey|rugby|cricket)(?!.*movie)(?!.*fiction)",
"subpatterns": {
"football": "football|soccer|nfl|touchdown|super bowl",
"basketball": "basketball|nba|dunk|hoop|court",
"baseball": "baseball|mlb|bat|pitch|home run",
"athletes": "athlete|player|star|champion|mvp",
"practice": "practice|training|workout|exercise|drill"
}
}
Grâce à cette structure, SassyAI peut distinguer des questions générales sur le sport, mais aussi orienter la réponse vers la bonne sous-catégorie.
Ces patterns sont chargés dynamiquement au démarrage :
self.custom_patterns = self.load_json("patterns.json")
b. Le mapping dynamique dans le moteur : l’intelligence en coulisses
C’est le moteur de l’application, la classe InsultEngine
(dans engine.py
), qui orchestre toute la logique :
- Chargement des données : il lit les fichiers de configuration (
responses.json
,patterns.json
, etc.) pour connaître tous les thèmes et leurs patterns. - Détection de l’intention : avec la méthode
detect_intent
, il identifie automatiquement à quel thème ou sous-thème appartient la question posée. - Mapping thème → réponse : le dictionnaire
theme_to_intent
fait le lien entre le thème sélectionné dans la CLI et la section de réponses à utiliser. - Gestion des réponses : la méthode
get_reply
combine tout cela pour fournir la réponse la plus pertinente possible.
À chaque nouveau thème généré, Amazon Q enrichit ce mapping :
self.theme_to_intent = {
"general": "general_knowledge",
"code": "code_request",
"philosophy": "meaning_of_life",
"food": "pizza_toppings",
"rogue_ai": "rogue_ai_movies",
"sports": "sports_responses", ## --> mapping du nouveau thème
"political_world": "political_discussions",
"nerd_culture": "nerd_culture_responses",
"dark_humor": "dark_humor_responses",
"tv_series": "tv_series_responses",
"cinema": "cinema_responses"
}
Lorsque tu sélectionnes un thème dans la CLI, le moteur “comprend” instantanément quelle catégorie de réponses activer, sans avoir à modifier le code.
c. Bénéfice immédiat : l’ajout d’un thème devient instantané
- À ce stade, un simple prompt à Amazon Q suffit pour que toute la chaîne soit opérationnelle :
– pattern(s) ;
– réponses ;
– mapping moteur.
Plus besoin de modifier ni les regex, ni la structure du moteur : tout est prêt, chaque thème fonctionne dès son apparition.
On voit ainsi comment l’automatisation s’est étendue : d’abord limitée à la génération de contenu, elle permet désormais à l’architecture de s’enrichir de façon fluide, sans recoder ni rebrancher chaque composant à la main.
En résumé, l’intelligence de SassyAI repose sur ce moteur centralisé et ouvert, capable de s’enrichir automatiquement à chaque nouveau prompt envoyé à Amazon Q. Cela garantit que l’ajout d’un thème – ou la modification d’un pattern – est instantanément pris en compte dans toute l’architecture.
3. L’interface CLI : personnalisation dynamique et expérience utilisateur
a. Un thème, une ambiance : le choix de l’utilisateur comme pivot
Le cœur de l’interaction dans SassyAI repose sur la ligne de commande.
Dès le lancement, l’utilisateur choisit son thème (:mode <theme>
), ce qui influe immédiatement sur le ton et le style des réponses.
À chaque échange, la CLI :
- transmet le thème actif à l’engine (
current_theme
), - interroge le moteur pour obtenir une réponse adaptée au contexte,
- stylise la réponse et l’affichage (couleur, emoji, etc.).
Exemple d’appel :
response = engine.get_reply(user_input, current_theme=current_theme)
Si la question est vague, SassyAI fournit tout de même une réplique sur le thème courant.
Si la question est précise, la détection automatique via regex (voir étape 2) prend le relais.
b. Scénographie et style : plus qu’une réponse, une expérience
SassyAI va plus loin qu’un simple chatbot textuel :
- chaque réponse est mise en forme, colorée selon le thème,
- une animation simule la réflexion de l’IA avec la bibliothèque Rich,
- le prompt, l’emoji et la couleur sont spécifiques au thème choisi.
Exemples de code dans main_cli.py
:
Animation de réflexion :
def thinking_effect():
msg = random.choice(thinking_messages)
with Progress(
SpinnerColumn(style="yellow"),
TextColumn("[progress.description]{task.description}"),
transient=True,
console=console,
) as progress:
progress.add_task(description=msg, total=None)
time.sleep(random.uniform(0.7, 1.6))
Affichage stylisé de la réponse :
def print_reply(reply):
theme_emoji = THEME_DETAILS[current_theme]["emoji"]
theme_color = THEME_DETAILS[current_theme]["color"]
formatted_reply = f"[italic] {reply}[/]"
console.print(f"{theme_emoji} [bold {theme_color}]SassyAI:[/] [bold]{formatted_reply}[/]")
c. Pourquoi cette architecture ?
- L’utilisateur reste maître du contexte et de l’ambiance, en changeant de thème à tout moment sans relancer l’application.
- Chaque échange est scénarisé : la CLI n’est plus un simple terminal, mais un espace de dialogue immersif.
- L’automatisation par Amazon Q s’étend jusqu’à la gestion des thèmes : un nouveau thème est automatiquement reconnu et intégré à l’expérience, à une exception près (voir ci-dessous).
d. Un seul réglage manuel : la présentation du thème
Pour affiner le style d’un nouveau thème (prompt, couleur, emoji), il reste une toute petite intervention à faire : ajouter une entrée dans le dictionnaire THEME_DETAILS
de main_cli.py
:
THEME_DETAILS = {
"general": {"prompt": "...", "color": "cyan", "emoji": "💡"},
"sports": {"prompt": "...", "color": "blue", "emoji": "⚽"},
# etc.
}
C’est la seule étape à personnaliser à la main : tout le reste est géré automatiquement.
Conclusion
SassyAI n’est pas qu’un chatbot sarcastique.
C’est la preuve qu’avec un prompt bien pensé, Amazon Q peut générer et intégrer tout le nécessaire pour enrichir une application : des réponses, des patterns, le mapping moteur – et ce, dans plusieurs fichiers à la fois, sans manipulation manuelle.
Cette approche montre que l’IA générative peut orchestrer l’ensemble d’un workflow logiciel, et rendre le développement à la fois plus rapide… et plus créatif.
Le repo complet est ici :
le projet sur dev.to
Démo vidéo