Fermer

janvier 10, 2024

Comment faire connaître à ChatGPT votre instance Sitecore / Blogs / Perficient

Comment faire connaître à ChatGPT votre instance Sitecore / Blogs / Perficient


ChatGPT est indéniablement un outil remarquable pour générer un texte cohérent et contextuellement pertinent, en particulier lorsqu’il s’agit de la vaste gamme d’informations disponibles jusqu’à sa dernière date limite de formation en janvier 2022. Sa compétence réside dans sa capacité à synthétiser les informations et à répondre aux invites. , démontrant une compréhension impressionnante de divers sujets. Cependant, il existe des limites lorsqu’il s’agit d’incorporer des données propriétaires ou dynamiques provenant des systèmes internes d’une entreprise. Un système comme Sitecore où sont stockés le contenu, la taxonomie, les définitions de page et de mise en page d’une organisation.

Les services Open AI et Open AI d’Azure permettent aux organisations de télécharger des données supplémentaires à référencer par le modèle de langage, mais cette approche ne fonctionne pas bien avec des ensembles de données volumineux et dynamiques. Le volume et la fluidité des informations rendent difficile la mise à jour du modèle et peuvent entraver sa capacité à fournir des réponses précises et actuelles. Ce ne serait pas une approche viable pour rendre les données Sitecore disponibles aux invites, car non seulement elles incluent une grande quantité de données, mais ces données changent aussi fréquemment que les auteurs de contenu mettent à jour et publient du nouveau contenu. Tenir GPT informé de ces données ne serait pas une bonne évolution.

Une approche pour résoudre ce problème consiste à fournir à l’invite des données contextuelles avant de lui demander de générer du contenu. Le modèle de langage serait alors capable de référencer ces données lors de la génération du résultat que vous recherchez. Avec cette idée en tête, j’ai décidé de construire une preuve de concept qui pourrait fournir un modèle ChatGPT avec des données contextuelles de Sitecore afin de nous permettre de nous poser des questions à ce sujet.

Création d’un contexte Sitecore pour ChatGPT

Le premier problème auquel vous êtes confronté lorsque vous envisagez de fournir des informations contextuelles à partir de Sitecore est de savoir quelles informations devez-vous fournir. Vous pouvez essayer de tout fournir, mais où vous arrêter. Vous pouvez fournir des détails sur un élément Sitecore, ses champs et ses valeurs. Vous pouvez consulter tous les éléments liés ainsi que leurs champs et valeurs. Vous pouvez regarder les rendus, leurs paramètres. Vous pouvez consulter les détails du modèle et les valeurs standard. Bien qu’il soit possible de fournir un vidage complet des données à chaque fois que vous ouvrez une nouvelle invite, la plupart de ces données ne seraient pas pertinentes par rapport à ce que vous leur demandez et vous finirez par gaspiller des jetons et augmenter vos factures d’API avec très peu d’avantages.

Les données que vous devez fournir dépendent vraiment de la question que vous souhaitez lui poser. Ainsi, au lieu d’envisager une approche unique pour fournir un contexte à ChatGPT, j’ai cherché à créer la possibilité de définir des invites qui dépendent d’un contexte personnalisé qui peut être ce dont vous avez besoin. Ce contexte doit être personnalisable et flexible afin que vous puissiez fournir uniquement les données dont vous avez besoin pour cette invite particulière.

Pour réaliser ce travail, j’ai utilisé mon modèle architectural préféré fourni par Sitecore : les pipelines. En définissant un pipeline personnalisé pour créer un contexte d’invite, nous pouvons créer des processeurs d’invite personnalisés réutilisables qui produisent du contenu de contexte pouvant être fourni à une session de discussion. Ces processeurs peuvent récupérer des détails sur un élément, parcourir l’arborescence Sitecore et même lire des fichiers hors du système de fichiers.

Les processeurs reçoivent une classe d’arguments qui leur donne ce dont ils ont besoin pour traiter, ainsi qu’un moyen de renvoyer les instructions de contexte. Pour cela, j’ai créé ma propre classe PipelineArgs personnalisée, qui serait lancée avant d’appeler le pipeline en passant l’élément Sitecore à analyser et toute configuration nécessaire pour permettre au processeur de pipeline de fonctionner. Chaque processeur peut utiliser ces entrées, puis ajouter une ou plusieurs instructions à la collection de chaînes « ContextStatements », qui seront ensuite transmises sous forme de messages de discussion système.

Args du pipeline de contexte

Les processeurs peuvent être conçus pour être aussi spécifiques que nécessaire et peuvent être réutilisés dans différents pipelines qui créent différents contextes pour différentes invites. En voici une de base qui ajoute simplement des détails de base sur l’élément à la collection ContextStatements :

Processeur d'informations sur les articles de base

Une fois que vous disposez d’un ensemble de processeurs, vous pouvez configurer un pipeline en répertoriant chaque processeur dans l’ordre dans lequel vous souhaitez qu’ils s’exécutent. Voici la configuration pour deux pipelines de contexte différents, un pour les détails de contenu de base et un autre qui fournit des détails sur un rendu en supposant que l’élément sélectionné était une définition de rendu.

Configuration du pipeline

Comme vous pouvez le constater, les deux pipelines utilisent le même processeur d’informations sur les éléments de base, mais le pipeline WebPageContext ajoute également les processeurs ItemFieldValueProcessor et LinkedItemFieldValue pour inclure des détails sur les champs de la page Web et toutes les sources de données liées à cette page Web. ViewRenderingContext utilise des processeurs pour obtenir des détails sur les définitions de rendu du modèle de source de données et des paramètres de rendu et extraira même le fichier source d’un fichier cshtml MVC du disque.

Au fil du temps, vous pouvez imaginer un grand nombre de processeurs personnalisés qui fournissent des détails sur un contexte de discussion qui permettra à une invite de faire tout ce à quoi vous pouvez penser. Une chose à garder à l’esprit lorsque vous les créez est d’être aussi succinct que possible. Lorsque vous appelez des API GPT, vous êtes facturé par jeton, n’incluez donc les détails que s’ils sont vraiment nécessaires.

Configuration des pipelines et des invites

Maintenant que nous avons la possibilité de définir des invites qui fournissent un contexte Sitecore, nous avons besoin d’un mécanisme pour appeler ces pipelines et fournir une configuration à ces pipelines pour les processeurs qui en ont besoin. Pour prendre en charge cela, j’ai créé une zone de configuration sous « Système > Modules » pour mon nouveau module, que j’appelle « Sitecore Guru » (remarquez l’icône Albert Einstein que j’ai utilisée).

Configuration des modules

Ici, j’ai des dossiers pour les configurations de pipeline et les invites, que j’ai séparés, vous permettant de mélanger le même pipeline avec différentes invites en fonction de vos besoins. Voici la configuration du pipeline « Page Context » décrit précédemment :

Contexte de la page Web

Notez que le nom du pipeline doit correspondre à ce qui a été ajouté au fichier de configuration Sitecore. Dans cet exemple, la température est transmise en tant que paramètre. Ceci sera utilisé par l’API qui appelle ChatGPT car le paramètre de température indique à ChatGPT à quel point il doit être créatif dans ses réponses. L’échelle est de 0 à 2, 2 étant le plus créatif et 0 le moins créatif.

Donc, si vous essayez de générer du contenu créatif, rapprochez-le de 2, mais si vous essayez de générer du code, il serait préférable de se rapprocher de 0. Gardez à l’esprit que les réponses créatives augmentent également le risque d’hallucinations.

Les invites ne sont qu’un élément avec un champ d’invite de texte multiligne, nous permettant de définir le texte initial avec lequel ouvrir les conversations. Voici une invite que j’ai écrite pour travailler avec le contexte de la page Web afin d’obtenir une liste de mots-clés et de mots-clés associés en fonction des champs de contenu de la page Web.

Invite de suggestion de mots clés

Avec ces éléments configurables, j’ai pu créer une nouvelle API Web personnalisée qui prend les ID de l’élément, de l’invite et du pipeline, appelle ChatGPT et renvoie les résultats. Il ne me restait plus qu’à créer une interface utilisateur pour appeler l’API et fournir un moyen de l’appeler depuis l’éditeur de contenu.

Création d’une interface utilisateur rapide

Pour l’interface d’invite intégrée, j’ai pu trouver de nombreux exemples en ligne sur la façon de créer une interface de type ChatGPT. En fin de compte, j’ai pris la plupart du balisage, du CSS et du JavaScript d’un article de codage au Népal intitulé : « Comment créer votre propre ChatGPT en HTML CSS et JavaScript ». Avec cela comme base, j’ai modifié le JavaScript pour appeler mon API de contrôleur personnalisée, échangé les images avec des icônes liées à « Sitecore » et ajusté le code qui conservait l’historique des discussions entre les sessions.

J’ai mis le balisage principal dans une nouvelle page aspx appelée « Guru.aspx » et je l’ai inclus dans ma solution à déployer dans le dossier du site. Pour appeler cette page avec le bon contexte (l’ID de l’élément, l’ID du pipeline et l’ID de l’invite), j’ai utilisé les extensions Sitecore Powershell pour ajouter une nouvelle option de clic droit au menu « Scripts » de l’élément.

Option de clic droit

Avec cette approche, nous pouvons créer plusieurs options de menu pour chaque invite que nous souhaitons rendre disponible. La fonction Powershell, Show-ModalDialog charge notre page personnalisée dans un cadre juste au-dessus de l’éditeur de contenu. Voici l’UX après avoir appelé l’invite de mots-clés à l’aide du pipeline de contexte de page Web sur l’élément d’accueil Sitecore prêt à l’emploi :

Invite initiale

L’API elle-même maintient une session. Cela permet à la conversation de continuer au-delà de l’invite initiale. Vous pouvez ainsi continuer à poser des questions et obtenir des résultats qui tiennent compte de la session de chat. Voici un exemple de question de suivi après avoir obtenu la liste initiale de mots-clés :

Suivre l'invite

Applications de génération de code

En plus de prouver le contexte pour les applications liées au contenu/au marketing, l’autre cas d’utilisation majeur pour lequel je souhaitais créer cette intégration était de prendre en charge la génération de code. J’ai pensé que Sitecore avait généralement tout ce que vous devez savoir pour générer un composant : le nom du rendu, le modèle de source de données, les paramètres de rendu, et même la possibilité d’aller consulter les fichiers cshtml MVC existants ou de décompiler les classes de contrôleur.

Dans cet esprit, j’ai construit un pipeline pour fournir des détails de configuration de rendu et conçu une invite pour échafauder un composant Typescript.

Invite de génération de code

Bien que cela fonctionne techniquement, je ne suis pas satisfait de la qualité du résultat. Je vais continuer à affiner les détails de l’invite, mais je dois également commencer à travailler sur des exemples de données pour entraîner le modèle sur la structure du code que j’attends. La documentation que j’ai lue indique que je dois créer au moins 10 bons exemples, mais idéalement 50 pour obtenir de bons résultats. C’est quelque chose que je vais continuer à travailler et à régler pour voir si cela améliore le résultat de l’IA générative.

En fin de compte, si cela fonctionne, j’aimerais pouvoir définir une configuration par lots qui vous permet de sélectionner les rendus que vous souhaitez convertir, puis de lui faire fournir automatiquement un contexte pour chacun d’eux et de demander à ChatGPT d’aller générer du code et enfin fournir les résultats à utiliser. Je suis allé jusqu’à définir un modèle pour le configurer, mais j’ai besoin d’améliorer la qualité du code généré avant de travailler sur cette partie.

Lot d'échantillons

Vidéo de démonstration POC

Voici une vidéo pas à pas du POC que j’ai créé.

Conclusion et prochaines étapes

Il s’agit toujours d’une preuve de concept. J’espère qu’avec une génération de code améliorée, une meilleure ingénierie des invites et davantage de processeurs de contexte, cela pourrait être un complément très puissant à Sitecore. Tout retour sur cette approche est le bienvenu. Si vous souhaitez plus d’informations, contactez-moi. Vous pouvez me trouver sur LinkedIn, Twitter ou remplissez notre formulaire de contact.






Source link