Dans un article précédent, on a vu comment utiliser les embeddings OpenAI pour ajouter des informations contextuelles aux méthodes de chat OpenAI.
Maintenant, nous allons voir comment utiliser le composant TsgcOpenAIEmbeddings du package sgcWebSockets pour construire des applications IA en utilisant nos propres données.
Dans un article précédent sur le ChatBot vocal Delphi, on a utilisé le composant TsgcAIOpenAIChatBot pour construire un ChatBot piloté par la voix, maintenant nous allons étendre le ChatBot en utilisant non seulement les données openAI entraînées jusqu'en 2021, mais nous ajouterons nos données personnalisées pour construire un système Questions & Réponses avec les données obtenues à partir du fichier d'aide et des interfaces du package.
Convertir tes propres données en vecteurs
La première étape consiste à prendre le manuel PDF de sgcWebSockets et à le convertir en texte. Nous utiliserons ce fichier pour créer des embeddings avec des informations utiles sur la façon de configurer le package, d'utiliser les composants... et ces informations seront utilisées lors des interrogations à OpenAI.
Une fois que nous avons le manuel PDF au format texte, nous pouvons utiliser le composant TsgcAIOpenAIEmbeddings pour obtenir d'OpenAI les vecteurs pour chaque section du fichier et dans ce cas nous les stockerons dans un fichier texte (pour la production, tu peux utiliser une base de données vectorielle comme Pinecone).
procedure ConvertFileToVector;
var
oDialog: TOpenDialog;
oEmbeddings: TsgcAIOpenAIEmbeddings;
oFile: TsgcAIDatabaseVectorFile;
begin
oDialog := TOpenDialog.Create(nil);
Try
oDialog.Filter := 'TXT Files|*.txt';
if oDialog.Execute then
begin
oEmbeddings := TsgcAIOpenAIEmbeddings.Create(nil);
Try
oFile := TsgcAIDatabaseVectorFile.Create(nil);
Try
oEmbeddings.Database := oFile;
oEmbeddings.OpenAIOptions.ApiKey := '<your api key>';
oEmbeddings.CreateEmbeddingsFromFile(oDialog.FileName);
Finally
oFile.Free;
End;
Finally
oEmbeddings.Free;
End;
end;
Finally
FreeAndNil(oDialog);
End;
end;
ChatBot & embeddings
Une fois que nous avons converti toutes nos données en vecteurs, nous pouvons commencer à construire notre propre modèle. L'idée derrière est très simple : à chaque fois que nous interrogeons le bot, nous convertissons d'abord la question en vecteur, puis nous recherchons dans notre base de données quel vecteur est le plus similaire à la question, et enfin nous utilisons les données les plus similaires à la question et nous les ajoutons comme contexte.
procedure AskToChatGPT(const aQuestion: string);
var
oChatBot: TsgcAIOpenAIChatBot;
oEmbeddings: TsgcAIOpenAIEmbeddings;
oFile: TsgcAIDatabaseVectorFile;
vContext: string;
begin
oChatBot := TsgcAIOpenAIChatBot.Create(nil);
Try
oChatBot.OpenAIOptions.ApiKey := '<your api key>';
oEmbeddings := TsgcAIOpenAIEmbeddings.Create(nil);
Try
oChatBot.Embeddings := oEmbeddings;
oFile := TsgcAIDatabaseVectorFile.Create(nil);
Try
oEmbeddings.Database := oFile;
vContext := oChatBot.GetEmbedding(aQuestion);
oChatBot.ChatAsUser('Answer the question based on the context below.\n\nContext:\n' +
vContext + '\nQuestion:' + aQuestion + '\nAnswer:');
Finally
oFile.Free;
End;
Finally
oEmbeddings.Free;
End;
Finally
FreeAndNil(oDialog);
End;
end;
Démo Delphi Windows
Voici un exemple Delphi utilisant le package IA sgcWebSockets qui montre comment construire une application Questions & Réponses en utilisant des données personnalisées. La démo contient 2 projets :
1. sgcCreateEmbeddings : ce projet charge un fichier texte, le découpe en morceaux et convertit chaque morceau en vecteur puis le stocke dans un fichier de base de données. La démo contient déjà la base de données vectorielle au format fichier texte pour faciliter l'utilisation.
2. sgcQuestionsAnswers : en utilisant les enregistrements précédemment stockés dans la base de données, chaque fois que l'utilisateur pose une question au chatbot, l'application recherche d'abord dans la base de données le contexte le plus similaire à la question et l'ajoute comme information contextuelle pour aider le ChatBot à fournir des réponses plus précises.
