X

J’ai construit une IA qui répond aux questions basées sur mes données de recherche d’utilisateurs | de Irina Nik | février 2023


Les produits modernes disposent souvent d’une grande quantité de données de recherche d’utilisateurs provenant de différentes sources : entretiens de recherche d’utilisateurs, conversations par interphone, e-mails de clients, enquêtes, avis de clients sur diverses plateformes, etc.

Donner un sens à toutes ces données est une tâche difficile. Une façon traditionnelle de le faire est de maintenir une base de données bien organisée avec diverses balises correspondantes.

Organisation des données de recherche d’utilisateurs dans Airtable

Mais que se passe-t-il si nous pouvons avoir notre chatbot IA personnel qui peut répondre à toute question sur nos données de recherche d’utilisateurs ?

En interrogeant une grande quantité de données de recherche d’utilisateurs historiques, le chatbot peut fournir des informations et des recommandations pour un nouveau projet, produit ou campagne marketing.

Eh bien, maintenant c’est possible avec seulement quelques lignes de code. Vous pouvez le faire même sans connaissances techniques. Dans cet article, je vais vous expliquer comment procéder étape par étape.

Vous connaissez probablement ChatGPT et, espérons-le, l’utilisez déjà dans votre processus de travail. Sinon, je vous recommande de lire d’abord mon article sur l’impact de l’IA sur la conception.

ChatGPT est conçu pour les utilisateurs finaux afin qu’ils puissent interagir avec lui de manière conversationnelle. Le format de dialogue permet à ChatGPT de répondre aux questions de suivi, d’admettre ses erreurs, de contester les prémisses incorrectes et de rejeter les demandes inappropriées.

J’aimerais pouvoir essayer cette version conviviale du chatbot dans notre expérience, mais elle n’est pas disponible via l’API. Au lieu de cela, nous allons utiliser GPT-3 – un autre grand modèle de langage d’OpenAI.

Nous pouvons interagir avec GPT-3 directement via une API sans aucune interface Web. Nous en avons besoin pour pouvoir envoyer le contexte pertinent au modèle.

Avant de commencer avec l’API, vous pouvez essayer d’interagir avec le modèle GPT-3 via une interface utilisateur dans GPT-3 Playground.

Terrain de jeu de l’API OpenAI

Nous voulons qu’il utilise les données de nos recherches et pas seulement les connaissances générales d’Internet. Comment pouvons-nous le faire?

Un réglage fin peut-il fonctionner ?

Lorsque j’ai abordé ce problème pour la première fois, j’ai pensé qu’il était possible d’affiner le modèle avec notre ensemble de données. Il s’est avéré que le réglage fin est utilisé pour former la réponse du modèle d’une certaine manière en fournissant des exemples de réponse rapide.

Un réglage fin peut être utile pour entraîner le modèle à reconnaître le sentiment, par exemple. Pour ce faire, vous devez fournir des paires de valeurs phrase-sentiment dans les données d’entraînement, comme dans cet exemple :

{"prompt":"Overjoyed with the new iPhone! ->", "completion":" positive"}
{"prompt":"@lakers disappoint for a third straight night ->", "completion":" negative"}

Mais dans notre cas, nous n’avons pas d’exemples de réponse rapide. Nous avons juste des données que nous voulons utiliser pour trouver une réponse. Donc, le réglage fin ne fonctionnera pas dans cette situation.

Envoi du contexte dans l’invite

Au lieu de cela, nous devons rendre le modèle conscient du contexte. Et nous pouvons le faire en fournissant simplement le contexte dans l’invite elle-même. Comme ça:


Context information is below.
---------------------
{context}
---------------------
Given the context information and not prior knowledge,
answer the question: {user_query}

Il y a cependant un hic. Nous ne pouvons pas simplement envoyer toutes nos données de recherche en une seule fois. C’est déraisonnable en termes de calcul et le modèle GPT-3 a une limite stricte de demande/réponse de 2049 “jetons”. Soit environ 8 000 caractères pour la requête et la réponse combinées.

Au lieu d’envoyer toutes les données de la demande, nous devons trouver un moyen d’envoyer uniquement les informations pertinentes qui aideraient notre chatbot à répondre à la question.

Il y a une bibliothèque pour ça

La bonne nouvelle est qu’il est facile de le faire avec une bibliothèque open source appelée GPT Index par Jerry Liu.

Voici comment cela fonctionne :

  1. Créer un index de morceaux de texte
  2. Trouvez les morceaux les plus pertinents
  3. Posez la question à GPT-3 en utilisant le morceau le plus pertinent

La bibliothèque fait tout le gros du travail pour nous, nous avons juste besoin d’écrire quelques lignes de code. Faisons-le!

Le code n’a que 2 fonctions : la première construit un index à partir de nos données et la seconde envoie la requête à GPT-3. Voici un pseudo-code pour cela :

def construct_index:
1. set parameters for LLM that will be used
2. construct an index
3. save the index into the file

def ask_ai:
1. get user query
2. send the query with the relevant context
3. show the response

Construire un index

Premièrement, nous devons construire un index. Un index est comme une base de données qui stocke des morceaux de texte d’une manière qui les rend faciles à trouver.

Pour ce faire, nous devons collecter toutes nos données dans un dossier. Ensuite, nous demandons à GPT Index de prendre tous les fichiers du dossier et de diviser chaque fichier en petits morceaux séquentiels. Ensuite, nous stockons ces pièces dans un format consultable.

def construct_index(directory_path):
# set maximum input size
max_input_size = 4096
# set number of output tokens
num_outputs = 256
# set maximum chunk overlap
max_chunk_overlap = 20
# set chunk size limit
chunk_size_limit = 600

# define LLM
llm_predictor = LLMPredictor(llm=OpenAI(temperature=0, model_name="text-davinci-003", max_tokens=num_outputs))
prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit)

documents = SimpleDirectoryReader(directory_path).load_data()

index = GPTSimpleVectorIndex(
documents, llm_predictor=llm_predictor, prompt_helper=prompt_helper
)

index.save_to_disk('index.json')

return index

Lorsque nous exécutons cette fonction, elle crée un fichier appelé index.json qui contient des morceaux de nos données converties dans un format qui facilite la recherche.

Attention, l’exécution de ce code vous coûtera des crédits sur votre compte OpenAPI (0,02 $ pour 1 000 jetons, vous aurez 18 $ de crédits gratuits lorsque vous configurerez votre compte)

Poser la question

Maintenant, posons la question. Pour rechercher l’index que nous avons créé, il nous suffit de saisir une question dans l’index GPT.

  1. L’index GPT trouvera les parties de notre index qui sont les plus liées à la question
  2. Il les combinera avec la question et l’enverra à GPT-3.
  3. Ensuite, il imprimera la réponse.
def ask_ai():
index = GPTSimpleVectorIndex.load_from_disk('index.json')
while True:
query = input("What do you want to ask? ")
response = index.query(query, response_mode="compact")
display(Markdown(f"Response: <b>{response.response}</b>"))

Le tester

Je ne peux pas partager avec vous les données de recherche d’utilisateurs car elles sont confidentielles. Donc, pour tester le code, j’utiliserai des interviews générées automatiquement comme base de connaissances pour l’exemple.

J’ai demandé à ChatGPT de générer des questions d’entretien sur la cuisine à la maison et l’utilisation d’appareils électroménagers. Après cela, j’ai demandé à générer des scripts d’entretien basés sur ces questions. Les entretiens se sont avérés assez vides et peu perspicaces, mais c’est suffisant pour tester notre IA.

Après avoir téléchargé les fichiers et construit un index, je peux essayer de poser une question sur ces entretiens.

Par exemple, je peux demander à mon chatbot de “réfléchir à des idées de campagne de marketing pour une friteuse à air qui plairait aux personnes qui cuisinent à la maison”. Cela générera des idées basées sur les entretiens que j’ai fournis et non sur la base de connaissances générales sur Internet.

Le code source de cet article est ici.

Si vous êtes un apprenant visuel, vous pouvez regarder la vidéo où j’explique tout étape par étape.

Nous avons créé une IA avec une base de connaissances personnalisée avec seulement quelques lignes de code. Pensez un instant à quel point l’IA personnalisée devient accessible.

En quelques minutes seulement, nous avons réussi à créer une solution personnalisée pour rechercher les informations dans notre base de données de recherche. La même technique peut être utilisée dans des dizaines d’autres cas d’utilisation différents.

Imaginez un chatbot de soins de santé qui fournit des conseils médicaux basés sur les antécédents médicaux et les symptômes d’un utilisateur. Ou un conseiller juridique artificiel capable de fouiller dans les documents juridiques pour vous fournir des informations utiles. Ou un chatbot avec une base de connaissances sur les réglementations financières et les meilleures pratiques qui peuvent vous aider à planifier vos finances et vous aider à prendre des décisions éclairées.

Et ce n’est qu’une petite technique que nous avons explorée aujourd’hui. Grâce aux progrès des grands modèles de langage, il est désormais plus facile que jamais de créer une IA personnalisée pouvant répondre à vos besoins spécifiques.

Que voulez-vous créer ensuite ?