Construire un agent d'IA pour les RH avec Elastic Agent Builder et GPT-OSS
Découvrez comment créer un agent d'intelligence artificielle capable de répondre à des requêtes en langage naturel sur les données RH de vos employés en utilisant Elastic Agent Builder et GPT-OSS.
Introduction
Cet article vous montrera comment construire un agent d'IA pour les RH en utilisant GPT-OSS et Elastic Agent Builder. L'agent peut répondre à vos questions sans envoyer de données à OpenAI, Anthropic ou tout autre service externe.
Nous allons utiliser LM Studio pour servir GPT-OSS localement et le connecter à Elastic Agent Builder.
À la fin de cet article, vous disposerez d'un agent d'IA personnalisé capable de répondre à des questions en langage naturel sur les données de vos employés, tout en conservant un contrôle total sur vos informations et votre modèle.
Produits requis
Pour cet article, vous avez besoin de :
Elastic Cloud hébergé 9.2, déploiement sans serveur ou local.
Machine avec 32 Go de RAM recommandée (minimum 16 Go pour GPT-OSS 20B)
LM Studio installé
Docker Desktop installé
Pourquoi utiliser GPT-OSS ?
Avec un LLM local, vous avez la possibilité de le déployer dans votre propre infrastructure et de l'adapter à vos besoins. Tout cela en gardant le contrôle sur les données que vous partagez avec le modèle et, bien sûr, sans avoir à payer de licence à un fournisseur externe.
OpenAI a publié GPT-OSS le 5 août 2025, dans le cadre de son engagement envers l'écosystème des modèles ouverts.
Le modèle de paramètres 20B offre :
Capacités d'utilisation des outils
Inférence efficace
Compatible avec le SDK OpenAI
Compatible avec les flux de travail agentiques
Comparaison des points de repère :

Source de référence.
Architecture de la solution
L'architecture fonctionne entièrement sur votre machine locale. Elastic (exécuté dans Docker) communique directement avec votre LLM local via LM Studio, et Elastic Agent Builder utilise cette connexion pour créer des agents d'IA personnalisés qui peuvent interroger les données de vos employés.
Pour plus de détails, consultez cette documentation.

Construire un agent d'IA pour les RH : étapes
Nous diviserons la mise en œuvre en 5 étapes :
Configurer LM studio avec un modèle local
Déployer Elastic local avec Docker
Créer le connecteur OpenAI dans Elastic
Téléchargement des données des employés vers Elasticsearch
Créez et testez votre agent d'intelligence artificielle
Étape 1 : Configurer LM Studio avec GPT-OSS 20B
LM Studio est une application conviviale qui vous permet d'exécuter localement de grands modèles linguistiques sur votre ordinateur. Il fournit un serveur d'API compatible avec OpenAI, ce qui facilite l'intégration avec des outils tels qu'Elastic sans processus de configuration complexe. Pour plus de détails, reportez-vous à la documentation de LM Studio.
Tout d'abord, téléchargez et installez LM Studio depuis le site officiel. Une fois installée, ouvrez l'application.
Dans l'interface de LM Studio :
Allez dans l'onglet recherche et cherchez "GPT-OSS"
Sélectionnez le site
openai/gpt-oss-20bà partir d'OpenAICliquez sur télécharger
La taille de ce modèle devrait être d'environ 12,10 Go. Le téléchargement peut prendre quelques minutes, en fonction de votre connexion internet.

Une fois le modèle téléchargé :
Aller dans l'onglet du serveur local
Sélectionner l'openai/gpt-oss-20b
Utiliser le port par défaut 1234
Dans le panneau de droite, cliquez sur Charger et réglez la longueur du contexte sur 40K ou plus.

5. Cliquez sur démarrer le serveur

Vous devriez voir ceci si le serveur est en cours d'exécution.
[LM STUDIO SERVER] Success! HTTP server listening on port 1234
[LM STUDIO SERVER] Supported endpoints:
[LM STUDIO SERVER] -> GET http://localhost:1234/v1/models
[LM STUDIO SERVER] -> POST http://localhost:1234/v1/responses
[LM STUDIO SERVER] -> POST http://localhost:1234/v1/chat/completions
[LM STUDIO SERVER] -> POST http://localhost:1234/v1/completions
[LM STUDIO SERVER] -> POST http://localhost:1234/v1/embeddings
Server started.Étape 2 : Déployer Elastic local avec Docker
Nous allons maintenant configurer Elasticsearch et Kibana localement à l'aide de Docker. Elastic fournit un script pratique qui gère l'ensemble du processus d'installation. Pour plus de détails, voir la documentation officielle.
Exécuter le script start-local
Exécutez la commande suivante dans votre terminal :
curl -fsSL https://elastic.co/start-local | shCe script va :
Télécharger et configurer Elasticsearch et Kibana
Démarrer les deux services à l'aide de Docker Compose
Activation automatique d'une licence d'essai Platinum de 30 jours
Résultats attendus
Attendez le message suivant et enregistrez le mot de passe et la clé API indiqués ; vous en aurez besoin pour accéder à Kibana :
🎉 Congrats, Elasticsearch and Kibana are installed and running in Docker!
🌐 Open your browser at http://localhost:5601
Username: elastic
Password: KSUlOMNr
🔌 Elasticsearch API endpoint: http://localhost:9200
🔑 API key: cnJGX0pwb0JhOG00cmNJVklUNXg6cnNJdXZWMnM4bncwMllpQlFlUTlWdw==
Learn more at https://github.com/elastic/start-localAccéder à Kibana
Ouvrez votre navigateur et naviguez vers :
http://localhost:5601Connectez-vous en utilisant les informations d'identification obtenues dans la sortie du terminal.
Activer le constructeur d'agents
Une fois connecté à Kibana, naviguez vers Management > AI > Agent Builder et activez l'Agent Builder.

Étape 3 : Créer le connecteur OpenAI dans Elastic
Nous allons maintenant configurer Elastic pour qu'il utilise votre LLM local.
Connecteurs d'accès
Dans Kibana
Allez dans Paramètres du projet > Gestion
Sous Alertes et aperçus, sélectionnez Connecteurs
Cliquez sur Créer un connecteur
Configurer le connecteur
Sélectionnez OpenAI dans la liste des connecteurs. LM Studio utilise le SDK OpenAI, ce qui le rend compatible.

Remplissez les champs avec ces valeurs :
Nom du connecteur : LM Studio - GPT-OSS 20B
Sélectionnez un fournisseur OpenAI : Autre (Service compatible avec l'OpenAI)
URL :
http://host.docker.internal:1234/v1/chat/completionsModèle par défaut : openai/gpt-oss-20b
Clé API : testkey-123 (n'importe quel texte fonctionne, car le serveur LM Studio ne nécessite pas d'authentification).

Pour terminer la configuration, cliquez sur Save & test.
Important : Activez l'option "Enable native function calling" (activer l'appel de fonctions natives) ; cette option est nécessaire pour que l'Agent Builder fonctionne correctement. Si vous ne l'activez pas, vous obtiendrez une erreur No tool calls found in the response.
Tester la connexion
Elastic devrait automatiquement tester la connexion. Si tout est configuré correctement, vous obtiendrez un message de réussite comme celui-ci :

Réponse :
{
"status": "ok",
"data": {
"id": "chatcmpl-flj9h0hy4wcx4bfson00an",
"object": "chat.completion",
"created": 1761189456,
"model": "openai/gpt-oss-20b",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! 👋 How can I assist you today?",
"reasoning": "Just greet.",
"tool_calls": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 69,
"completion_tokens": 23,
"total_tokens": 92
},
"stats": {},
"system_fingerprint": "openai/gpt-oss-20b"
},
"actionId": "ee1c3aaf-bad0-4ada-8149-118f52dad757"
}Étape 4 : Téléchargement des données des employés vers Elasticsearch
Nous allons maintenant télécharger l'ensemble de données relatives aux employés des RH afin de montrer comment l'agent travaille avec des données sensibles. J'ai généré un ensemble de données fictives avec cette structure.
Structure de l'ensemble de données
{
"employee_id": "0f4dce68-2a09-4cb1-b2af-6bcb4821539b",
"full_name": "Daffi Stiebler",
"email": "lscutchings0@huffingtonpost.com",
"date_of_birth": "1975-06-20T15:39:36Z",
"hire_date": "2025-07-28T00:10:45Z",
"job_title": "Physical Therapy Assistant",
"department": "HR",
"salary": "108455",
"performance_rating": "Needs Improvement",
"years_of_experience": 2,
"skills": "Java",
"education_level": "Master's Degree",
"manager": "Carl MacGibbon",
"emergency_contact": "Leigha Scutchings",
"home_address": "5571 6th Park"
}Créer l'index avec les correspondances
Tout d'abord, créez l'index avec les correspondances appropriées. Notez que nous utilisons des champs semantic_text pour certains champs clés ; cela permet des capacités de recherche sémantique pour notre index.
PUT hr-employees
{
"mappings": {
"properties": {
"@timestamp": {
"type": "date"
},
"employee_id": {
"type": "keyword"
},
"full_name": {
"type": "text",
"copy_to": "employee_semantic"
},
"email": {
"type": "keyword"
},
"date_of_birth": {
"type": "date",
"format": "iso8601"
},
"hire_date": {
"type": "date",
"format": "iso8601"
},
"job_title": {
"type": "text",
"copy_to": "employee_semantic"
},
"department": {
"type": "text",
"copy_to": "employee_semantic"
},
"salary": {
"type": "double"
},
"performance_rating": {
"type": "text",
"copy_to": "employee_semantic"
},
"years_of_experience": {
"type": "long"
},
"skills": {
"type": "text",
"copy_to": "employee_semantic"
},
"education_level": {
"type": "text",
"copy_to": "employee_semantic"
},
"manager": {
"type": "text",
"copy_to": "employee_semantic"
},
"emergency_contact": {
"type": "keyword"
},
"home_address": {
"type": "keyword"
},
"employee_semantic": {
"type": "semantic_text"
}
}
}
}Index avec Bulk API
Copiez et collez le jeu de données dans votre Dev Tools dans Kibana et exécutez-le :
POST hr-employees/_bulk
{"index": {}}
{"employee_id": "57728b91-e5d7-4fa8-954a-2384040d3886", "full_name": "Filide Gane", "email": "vhallahan1@booking.com", "job_title": "Business Systems Development Analyst", "department": "Marketing", "salary": "$52330.27", "performance_rating": "Meets Expectations", "years_of_experience": 12, "skills": "Java", "education_level": "Bachelor's Degree", "date_of_birth": "2000-02-07T16:49:32Z", "hire_date": "2023-11-07T13:03:16Z", "manager": "Freedman Kings", "emergency_contact": "Vilhelmina Hallahan", "home_address": "75 Dennis Junction"}
{"index": {}}
{"employee_id": "...", ...}Vérifier les données
Exécutez une requête pour vérifier :
GET hr-employees/_searchÉtape 5 : Créer et tester votre agent d'intelligence artificielle
Une fois tout configuré, il est temps de créer un agent d'IA personnalisé à l'aide d'Elastic Agent Builder. Pour plus de détails, voir la documentation Elastic.
Ajouter le connecteur
Avant de pouvoir créer notre nouvel agent, nous devons configurer notre Agent builder pour qu'il utilise notre connecteur personnalisé appelé LM Studio - GPT-OSS 20B, car le connecteur par défaut est Elastic Managed LLM. Pour cela, nous devons aller dans Project Setting > Management > GenAI Settings; nous sélectionnons alors celui que nous avons créé et cliquons sur Save.

Agent d'accès Constructeur
Aller aux agents
Cliquez sur Créer un nouvel agent

Configurer l'agent
Pour créer un nouvel agent, les champs obligatoires sont l'identifiant de l'agent, le nom d'affichage et les instructions d'affichage.
Mais il existe d'autres options de personnalisation, comme les instructions personnalisées qui indiquent comment votre agent va se comporter et interagir avec vos outils, à la manière d'une invite système, mais pour notre agent personnalisé. Les étiquettes permettent d'organiser les agents, la couleur de l'avatar et le symbole de l'avatar.
Ceux que j'ai choisis pour notre agent sur la base de l'ensemble des données sont les suivants :
Agent ID : hr_assistant
Instructions personnalisées :
You are an HR Analytics Assistant that helps answer questions about employee data.
When responding to queries:
- Provide clear, concise answers
- Include relevant employee details (name, department, salary, skills)
- Format monetary values with currency symbols
- Be professional and maintain data confidentiality
Étiquettes : Human Resources et GPT-OSS
Nom d'affichage : HR Analytics Assistant
Description de l'affichage :
A specialized AI assistant for Human Resources that helps analyze employee data, compensation, performance metrics, and talent management. Ask questions about employees, departments, salaries, or performance analytics.
Une fois toutes les données saisies, nous pouvons cliquer sur Enregistrer notre nouvel agent.
Tester l'agent
Vous pouvez désormais poser des questions en langage naturel sur les données de vos employés, et GPT-OSS 20B comprendra l'intention et générera une réponse appropriée.
Prompt :
Which employee is the one with the highest salary in the hr-employees index?Réponse :

Le processus de l'agent a été le suivant :
1. Comprendre votre question à l'aide du connecteur GPT-OSS
2. Générer la requête Elasticsearch appropriée (à l'aide des outils intégrés ou d'ES|QL personnalisés)

3. Récupérer les enregistrements des salariés correspondants
4. Présenter les résultats en langage naturel avec un formatage approprié
Contrairement à la recherche lexicale traditionnelle, l'agent alimenté par GPT-OSS comprend l'intention et le contexte, ce qui facilite la recherche d'informations sans connaître les noms exacts des champs ou la syntaxe de la requête. Pour plus de détails sur le processus de réflexion de l'agent, voir cet article.
Conclusion
Dans cet article, nous avons construit un agent d'IA personnalisé à l'aide de l'Agent Builder d'Elastic pour se connecter au modèle OpenAI GPT-OSS fonctionnant localement. En déployant à la fois Elastic et le LLM sur votre machine locale, cette architecture vous permet de tirer parti des capacités d'IA générative tout en conservant un contrôle total sur vos données, le tout sans envoyer d'informations à des services externes.
Nous avons utilisé GPT-OSS 20B à titre expérimental, mais les modèles officiellement recommandés pour Elastic Agent Builder sont référencés ici. Si vous avez besoin de capacités de raisonnement plus avancées, il existe également la variante de paramètre 120B qui est plus performante pour les scénarios complexes, bien qu'elle nécessite une machine plus sophistiquée pour fonctionner localement. Pour plus de détails, consultez la documentation officielle d'OpenAI.




