Accéder au contenu principal

Utiliser ChatGPT pour modérer des réponses de ChatGPT

Explorez les subtilités de la modération par IA avec notre guide approfondi sur l’utilisation de ChatGPT pour modérer les réponses dans des applications bâties sur GPT.
Actualisé 19 sept. 2026  · 9 min lire

Explorer avec l’IA

ChatGPTClaudePerplexity

Modération de l’IA pour la qualité

Adopter la révolution de l’IA dans le développement d’applications ouvre une nouvelle ère dans l’interaction homme-IA. Si les entreprises s’appuient sur l’IA pour améliorer l’expérience utilisateur, l’intégration de solutions fondées sur des LLM pose aussi des défis en matière d’intégrité des contenus, d’exactitude et d’éthique.

La nécessité d’une modération responsable de l’IA s’impose à mesure que les applications sortent des environnements contrôlés, où assurer des réponses raisonnables et exactes aux utilisateurs n’est pas toujours trivial techniquement, mais reste crucial.

Dans le service client, par exemple, une information erronée ou un contenu inapproprié peut entraîner l’insatisfaction des clients et même nuire à la réputation de l’entreprise. Mais en tant que développeur, comment garantir que votre application basée sur l’IA fournit des réponses raisonnables et exactes à vos utilisateurs ? C’est là que la modération par IA entre en jeu !

Dans cet article, nous allons détailler une technique pour modérer des applications GPT à l’aide de modèles GPT.

Créer un agent qualité basé sur GPT

Modérer la qualité d’une IA implique aussi d’assurer des réponses non biaisées et appropriées lorsqu’on travaille avec des LLM. OpenAI a déjà introduit une API conçue pour ces besoins de modération. Si vous cherchez à détecter des réponses biaisées ou inappropriées de votre modèle ou à traiter des comportements utilisateurs problématiques, vous trouverez des informations utiles dans l’article ChatGPT Moderation API : Input/Output Control.

Cependant, le présent article adopte une approche différente de la modération par IA. Notre objectif est ici de garantir la qualité des réponses d’un modèle en termes d’exactitude et d’adéquation aux besoins de l’utilisateur. À ma connaissance, il n’existe pas d’endpoint officiel spécifiquement dédié à cet usage.

Néanmoins, puisque nous utilisons massivement les modèles GPT dans diverses applications, pourquoi ne pas les employer comme contrôleurs qualité d’instances du même modèle ?

Nous pouvons exploiter des modèles GPT pour évaluer le résultat généré par le modèle lui-même en réponse aux requêtes de l’utilisateur. Cette stratégie de test aide à prévenir les réponses vagues ou erronées et améliore la capacité du modèle à satisfaire correctement la demande.

Périmètre et objectifs

Cet article explique comment utiliser des modèles GPT pour modérer des applications construites sur GPT en termes de qualité et de justesse, dans le périmètre de votre application.

Par exemple, si vous alimentez un chatbot commercial avec des modèles GPT, vous aurez tout intérêt à vous assurer qu’il ne fournit aucune information en dehors de vos articles ou caractéristiques de catalogue.

Dans les sections suivantes, nous allons concrétiser cet exemple grâce à de simples appels à l’API d’OpenAI via le package Python openai et les Jupyter Notebooks.

L’objectif principal sera de générer une application simple fondée sur un LLM et de modérer sa sortie avec un contrôleur qualité, lui aussi basé sur un LLM. Pour notre exemple, nous créerons un agent de service client, l’agent de contrôle qualité — que nous appellerons désormais agent QA — et, surtout, nous définirons les interactions entre les deux.

Le schéma suivant illustre clairement le flux de travail décrit :

Schéma de réponse modérée par IA

Illustration personnelle. Représentation du flux de modération : 1. L’utilisateur envoie une demande à l’application fondée sur un LLM, ici un chatbot de service client. 2. Le chatbot génère une réponse, mais l’envoie d’abord à l’agent QA. 3. L’agent QA renvoie la réponse à l’utilisateur après vérification de sa pertinence.

Procédons étape par étape !

Construire les agents GPT

Commençons par bâtir un agent conversationnel pour le service client d’un magasin.

N’hésitez pas à passer cette première section si vous avez déjà une application opérationnelle propulsée par un LLM, ou à implémenter votre propre exemple ! Et si vous vous demandez encore si votre entreprise peut tirer profit d’une application basée sur un LLM, écoutez cette discussion de podcast très instructive !

Concevoir un chatbot de service client d’exemple

Imaginons que nous construisions un agent de service client pour notre boutique. Nous souhaitons utiliser un modèle comme ChatGPT derrière cet agent afin de tirer parti de ses capacités en langage naturel pour comprendre les requêtes des utilisateurs et y répondre de manière fluide.

Pour définir notre chatbot de service client, deux ingrédients clés sont nécessaires :

  • Un catalogue produits d’exemple pour restreindre l’agent au périmètre de notre activité. En alimentant le modèle avec notre catalogue, nous lui indiquons quelles informations fournir aux utilisateurs.
  • Un message système pour définir le comportement général du modèle. Bien que les modèles GPT soient entraînés sur de multiples tâches, vous pouvez restreindre leur comportement via les messages système.

Enfin, comme pour toute application basée sur un LLM, nous avons besoin d’un moyen d’appeler l’API d’OpenAI depuis nos scripts. Dans cet article, j’utiliserai l’implémentation suivante qui repose uniquement sur le package openai :

import openai
import os

# Get the OpenAI key from the environment
openai_api_key = os.environ["OPENAI_API_KEY"]

# Simple OpenAI API call with a memory of past interactions
def gpt_call(prompt, message_history, model="gpt-3.5-turbo"):
message_history.append({'role': 'user', 'content': prompt})
response = openai.ChatCompletion.create( 
model=model,
messages=message_history
)

response_text = response.choices[0].message["content"]
message_history.append({'role': 'assistant', 'content': response_text})
return response_text

L’idée est d’initialiser un historique de messages séparé — contenant le message système — pour chaque instance du modèle, et de le mettre à jour au fil des interactions.

Si vous cherchez une manière plus optimisée de gérer vos interactions, je vous recommande vivement le framework langchain, comme dans Building Context-Aware Chatbots: Leveraging LangChain Framework for ChatGPT.

Si vous débutez avec l’API d’OpenAI, regardez le webinar Getting Started with the OpenAI API and ChatGPT.

Maintenant que nous avons identifié les briques nécessaires, assemblons-les :

# Define our sample product catalog
product_information = """
{ "name": "UltraView QLED TV", "category": "Televisions and Home Theater Systems", "brand": "UltraView", "model_number": "UV-QLED65", "warranty": "3 years", "rating": 4.9, "features": [ "65-inch QLED display", "8K resolution", "Quantum HDR", "Dolby Vision", "Smart TV" ], "description": "Experience lifelike colors and incredible clarity with this high-end QLED TV.", "price": 2499.99 }
{ "name": "ViewTech Android TV", "category": "Televisions and Home Theater Systems", "brand": "ViewTech", "model_number": "VT-ATV55", "warranty": "2 years", "rating": 4.7, "features": [ "55-inch 4K display", "Android TV OS", "Voice remote", "Chromecast built-in" ], "description": "Access your favorite apps and content on this smart Android TV.", "price": 799.99 }
{ "name": "SlimView OLED TV", "category": "Televisions and Home Theater Systems", "brand": "SlimView", "model_number": "SL-OLED75", "warranty": "2 years", "rating": 4.8, "features": [ "75-inch OLED display", "4K resolution", "HDR10+", "Dolby Atmos", "Smart TV" ], "description": "Immerse yourself in a theater-like experience with this ultra-thin OLED TV.", "price": 3499.99 }
{ "name": "TechGen X Pro", "category": "Smartphones and Accessories", "brand": "TechGen", "model_number": "TG-XP20", "warranty": "1 year", "rating": 4.5, "features": [ "6.4-inch AMOLED display", "128GB storage", "48MP triple camera", "5G", "Fast charging" ], "description": "A feature-packed smartphone designed for power users and mobile enthusiasts.", "price": 899.99 }
{ "name": "GigaPhone 12X", "category": "Smartphones and Accessories", "brand": "GigaPhone", "model_number": "GP-12X", "warranty": "2 years", "rating": 4.6, "features": [ "6.7-inch IPS display", "256GB storage", "108MP quad camera", "5G", "Wireless charging" ], "description": "Unleash the power of 5G and high-resolution photography with the GigaPhone 12X.", "price": 1199.99 }
{ "name": "Zephyr Z1", "category": "Smartphones and Accessories", "brand": "Zephyr", "model_number": "ZP-Z1", "warranty": "1 year", "rating": 4.4, "features": [ "6.2-inch LCD display", "64GB storage", "16MP dual camera", "4G LTE", "Long battery life" ], "description": "A budget-friendly smartphone with reliable performance for everyday use.", "price": 349.99 }
{ "name": "PixelMaster Pro DSLR", "category": "Cameras and Camcorders", "brand": "PixelMaster", "model_number": "PM-DSLR500", "warranty": "2 years", "rating": 4.8, "features": [ "30.4MP full-frame sensor", "4K video", "Dual Pixel AF", "3.2-inch touchscreen" ], "description": "Unleash your creativity with this professional-grade DSLR camera.", "price": 1999.99 }
{ "name": "ActionX Waterproof Camera", "category": "Cameras and Camcorders", "brand": "ActionX", "model_number": "AX-WPC100", "warranty": "1 year", "rating": 4.6, "features": [ "20MP sensor", "4K video", "Waterproof up to 50m", "Wi-Fi connectivity" ], "description": "Capture your adventures with this rugged and versatile action camera.", "price": 299.99 }
{ "name": "SonicBlast Wireless Headphones", "category": "Audio and Headphones", "brand": "SonicBlast", "model_number": "SB-WH200", "warranty": "1 year", "rating": 4.7, "features": [ "Active noise cancellation", "50mm drivers", "30-hour battery life", "Comfortable earpads" ], "description": "Immerse yourself in superior sound quality with these wireless headphones.", "price": 149.99 }
"""

# Define a proper system message for our use case
customer_agent_sysmessage = f"""
You are a customer service agent that responds to \
customer questions about the products in the catalog. \
The product catalog will be delimited by 3 backticks, i.e. ```. \
Respond in a friendly and human-like tone giving details with \
the information available from the product catalog. \

Product catalog: ```{product_information}```
"""

# Initialize your model's memory
customer_agent_history = [{'role': 'system', 'content': customer_agent_sysmessage}]

Comme on le voit, nous avons défini un catalogue d’exemple (product_catalog) au format jsonl, et un message système (customer_agent_sysmessage) avec trois exigences :

  • Se comporter comme un agent de service client.
  • Répondre sur un ton chaleureux et humain.
  • Fournir uniquement des informations issues du catalogue.

Enfin, nous avons également initialisé l’historique des messages pour l’agent client (customer_agent_history).

À noter : nous avons utilisé un style caractéristique pour le message système et les informations additionnelles, par exemple les triples accents graves. C’est l’une des bonnes pratiques de prompting ! Si vous souhaitez en découvrir d’autres, le webinar A Beginner's Guide to Prompt Engineering with ChatGPT est fait pour vous !

À ce stade, nous pouvons commencer à utiliser notre chatbot client d’exemple comme suit :

user_prompt = "Which is the best TV in your shop?"

customer_agent_response = gpt_call(user_prompt, customer_agent_history)
print(customer_agent_response)

# Output: In our shop, the UltraView QLED TV is considered to be the best TV. It has a rating of 4.9 and offers a 65-inch QLED display with 8K resolution. It also features Quantum HDR, Dolby Vision, and Smart TV capabilities. With its lifelike colors and incredible clarity, this high-end QLED TV delivers an immersive viewing experience. The UltraView QLED TV is priced at $2499.99 and comes with a warranty of 3 years.

La réponse paraît naturelle, n’est-ce pas ? Poursuivons l’échange :

user_prompt = "I want to buy the latest iphone. Can you help me?"

customer_agent_response = gpt_call(user_prompt, customer_agent_history)
print(customer_agent_response)

# Output: Of course! I'd be happy to help you find the latest iPhone. However, as it appears to be missing from the product catalog, I'm unable to provide specific details on the latest iPhone model at this time. I recommend checking our website or contacting our store directly for the most up-to-date information on the latest iPhone models available. Our knowledgeable staff will be able to assist you in selecting the perfect iPhone that meets your needs and preferences.

Rien à redire ! L’agent identifie l’absence d’iPhone dans notre catalogue et répond en conséquence. Il incite même l’utilisateur à contacter la boutique !

Essayons une autre demande :

user_prompt = "Can you help me buy a Samsung TV?"

customer_agent_response = gpt_call(user_prompt, customer_agent_history)
print(customer_agent_response)

# Output: Absolutely! I'd be delighted to assist you in purchasing a Samsung TV. Could you please provide me with some specific requirements or preferences you have in mind? This way, I can recommend the best Samsung TV model that suits your needs.

Effectivement, il arrive que l’agent ignore les informations du catalogue. Dans ces cas-là, l’agent QA peut filtrer les réponses indésirables.

Développer notre agent QA sur mesure

Comme nous l’avons évoqué, la mission de l’agent QA est de vérifier la qualité de l’agent de service client, compte tenu de la requête utilisateur et du catalogue produit. Il est donc essentiel de définir un message système qui fixe précisément ce comportement de haut niveau :

qa_sysmessage = f"""
	You are a quality assistant that evaluates whether \
	a customer service agent answers to the customer \
	questions correctly. \
	You must also validate that the customer service agent \
	provides information only from the product catalog \
	of our store and gently refuses any other product outside the catalog. \
	The customer message, the customer service agent's response, and \
	the product catalog will be delimited by \
	3 backticks, i.e. ```. \

	Give a reason for your answer.
	"""

Dans le cas de l’agent client, l’invite utilisateur est imprévisible puisque dictée par le besoin et le style d’écriture de l’utilisateur. Pour l’agent QA, c’est nous qui fournissons la requête utilisateur, la réponse de l’agent client et le catalogue au modèle. Notre prompt aura donc toujours la même structure, avec une requête (user_request) et une réponse du modèle (customer_agent_response) variables :

qa_prompt = f"""
Customer question: ```{user_prompt}```
Product catalog: ```{product_information}```
Agent response: ```{customer_agent_response}```
"""

Une fois le message système et le prompt QA définis, testons l’agent QA avec la dernière réponse du service client comme suit :

# Initialize the QA-agent memory
qa_history = [{'role': 'system', 'content': qa_sysmessage}]

# Call the QA-agent with our templated query
qa_response = chatgpt_call(qa_prompt, qa_history)
print(qa_response)

# Output: Quality Check: Incorrect Response 

Feedback: The customer asked for help in buying a Samsung TV but the agent did not address that request. The agent should have mentioned that they only have access to the product catalog of our store and can provide information and recommendations based on that catalog. The agent should have gently refused any other product outside the catalog.

Pour évaluer la réponse de l’agent QA, détaillons l’échange qu’il analyse :

  • Demande utilisateur : « Can you help me buy a Samsung TV? »
  • Réponse de l’agent client : « Absolutely! I'd be delighted to assist you in purchasing a Samsung TV. Could you please provide me with some specific requirements or preferences you have in mind? This way, I can recommend the best Samsung TV model that suits your needs. »
  • Agent QA : « Quality Check: Incorrect ResponseFeedback: The customer asked for help in buying a Samsung TV but the agent did not address that request. The agent should have mentioned that they only have access to the product catalog of our store and can provide information and recommendations based on that catalog. The agent should have gently refused any other product outside the catalog. »

L’agent qualité parvient à repérer les réponses inappropriées de l’agent client !

Interaction entre les agents

Maintenant que les deux agents fonctionnent de manière indépendante, il est temps de définir leur interaction.

On peut représenter les deux agents et leurs exigences dans un schéma simple :

Image personnelle. Représentation des trois briques de chaque agent : message système (bleu), entrée modèle (vert) et sortie modèle (jaune).

Image personnelle. Représentation des trois briques de chaque agent : message système (bleu), entrée du modèle (vert) et sortie du modèle (jaune).

Et ensuite ? Nous devons maintenant implémenter l’interaction entre les deux modèles !

Voici une idée pour filtrer les réponses inexactes :

D’abord, nous laissons l’agent client générer une réponse à partir de la requête utilisateur. Ensuite, si l’agent QA estime que la réponse est suffisante pour la requête et conforme au catalogue, nous la renvoyons simplement à l’utilisateur.

À l’inverse, si l’agent QA détermine que la réponse ne satisfait pas la demande ou contient des informations non conformes au catalogue, nous pouvons demander à l’agent client d’améliorer sa réponse avant de l’envoyer.

À partir de cette idée, nous pouvons améliorer la dernière partie de notre schéma initial comme suit :

Image personnelle. Représentation du flux de modération étendu. Nous pouvons utiliser l’évaluation de l’agent QA pour fournir un retour à l’application basée sur un LLM.

Image personnelle. Représentation du flux de modération étendu. Le jugement de l’agent QA peut servir de feedback à l’application fondée sur un LLM.

Orchestrer l’interaction des agents

Pour utiliser l’agent QA comme filtre, nous devons garantir une sortie cohérente à chaque itération.

Une façon d’y parvenir est de légèrement modifier le message système de l’agent QA et de lui demander de ne renvoyer que True si la réponse de l’agent client est suffisante, ou False dans le cas contraire :

qa_sysmessage = f"""
	You are a quality assistant that evaluates whether \
	a customer service agent answers to the customer \
	questions correctly. \

	You must also validate that the customer service agent \
	provides information only from the product catalog \
	of our store and gently refuses any other product outside the catalog. \

	The customer message, the customer service agent's response and \
	the product catalog will be delimited by \
	3 backticks, i.e. ```. \

	Respond with True or False no punctuation: \
	True - if the agent sufficiently answers the question \
	AND the response correctly uses product information \
	False - otherwise
	"""

Ainsi, en réévaluant la dernière réponse de l’agent client, nous obtiendrons simplement une valeur booléenne :

# Let's reinitialize the memory
qa_history = [{'role': 'system', 'content': qa_sysmessage}]

qa_response = gpt_call(qa_prompt, qa_history)
print(qa_response)

# Output: False

Nous pouvons ensuite exploiter cette valeur booléenne pour envoyer la réponse à l’utilisateur — si l’agent QA renvoie True — ou donner une seconde chance au modèle pour générer une nouvelle réponse — si l’agent QA renvoie False.

Démonstration de l’interaction entre agents

Rassemblons le tout !

Puisque nous avons déjà initialisé les deux mémoires — avec leurs messages système respectifs et informations additionnelles —, chaque demande utilisateur peut être traitée ainsi :

user_prompt = "Can you help me buy a Samsung TV?"

customer_agent_response = gpt_call(user_prompt, customer_agent_history)

qa_response = gpt_call(qa_prompt, qa_history)

if qa_response == "False":
print("The chatbot response is not sufficient!")
else:
print("Sending response to user...")
print(customer_agent_response)

Comme décrit ci-dessus, nous avons filtré les réponses selon leur justesse. À vous de décider quoi faire des réponses non adaptées. Nous avons proposé d’envoyer un feedback à l’agent client et de lui demander de réessayer, mais pourquoi ne pas demander directement à l’agent QA une meilleure réponse ? Les possibilités sont nombreuses !

Conclusion

Dans cet article, nous avons exploré le potentiel d’utiliser des modèles GPT comme modérateurs d’autres instances du même type. Nous avons montré que les mêmes capacités qui nous poussent à employer des LLM dans nos applications peuvent aussi renforcer l’exactitude et l’intégrité des interactions avec les utilisateurs.

Contrairement à certaines idées reçues, instaurer des niveaux de modération n’implique pas nécessairement de complexifier l’application et, comme nous l’avons vu, cela peut parfois se faire avec quelques lignes de code bien pensées, améliorant sensiblement les fonctionnalités.

Dans un monde piloté par l’IA, une modération responsable des LLM est indispensable. Ce n’est pas seulement un choix, c’est un impératif éthique. En intégrant la modération par IA, nous garantissons des applications à la fois puissantes, fiables et éthiques. Avançons avec une démarche responsable pour continuer à tirer parti de l’IA tout en préservant l’exactitude.

Merci de votre lecture ! Si le sujet de la modération par IA vous a plu, poursuivez avec Promoting Responsible AI: Content Moderation in ChatGPT pour aller plus loin !


Andrea Valenzuela's photo
Author
Andrea Valenzuela
LinkedIn
Twitter

Andrea Valenzuela travaille actuellement sur l'expérience CMS à l'accélérateur de particules (CERN) à Genève, en Suisse. Experte en ingénierie et analyse de données depuis six ans, ses fonctions comprennent l'analyse de données et le développement de logiciels. Elle travaille actuellement à la démocratisation de l'apprentissage des technologies liées aux données par le biais de la publication ForCode'Sake sur Medium.

Elle est titulaire d'une licence en ingénierie physique de l'Université polytechnique de Catalogne, ainsi que d'une maîtrise en systèmes interactifs intelligents de l'Université Pompeu Fabra. Son expérience en matière de recherche comprend des travaux professionnels avec des algorithmes OpenAI antérieurs pour la génération d'images, tels que Normalizing Flows.

Sujets
Intelligence artificielle

Démarrez votre parcours IA dès aujourd’hui !

Cursus

Principes fondamentaux de l'IA

10 h
Découvrez les principes fondamentaux de l'IA, apprenez à l'utiliser efficacement dans votre travail et explorez des modèles tels que chatGPT pour vous orienter dans le paysage dynamique de l'IA.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow