Sviluppo di un Chatbot personalizzato con OpenAI

Chatbot personalizzato con OpenAI

Introduzione

I chatbot, che offrono supporto automatizzato ed esperienze personalizzate, hanno rivoluzionato il modo in cui le aziende si connettono con i loro clienti. Gli sviluppi recenti nell’intelligenza artificiale (IA) hanno alzato l’asticella per la funzionalità dei chatbot. In questo dettagliato libro vengono fornite istruzioni approfondite su come creare un chatbot personalizzato utilizzando OpenAI, una piattaforma leader nell’IA rinomata per i suoi potenti modelli di linguaggio.

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Cosa sono i Chatbot?

I chatbot sono programmi informatici che simulano conversazioni umane. Utilizzano tecniche di elaborazione del linguaggio naturale (NLP) per comprendere ciò che gli utenti dicono e rispondere in modo pertinente e utile.

Grazie alla disponibilità di enormi set di dati ed eccellenti algoritmi di apprendimento automatico, i chatbot sono diventati sempre più intelligenti negli ultimi anni. Queste capacità consentono ai chatbot di comprendere meglio l’intento dell’utente e fornire risposte che suonano più genuine.

Ecco alcuni esempi concreti di come vengono utilizzati i chatbot:

  • I chatbot nel servizio clienti possono rispondere a domande frequenti e fornire assistenza ai consumatori 24 ore su 24.
  • I chatbot nel marketing possono aiutare le aziende a qualificare i potenziali clienti, generare lead e rispondere a domande su prodotti o servizi.
  • I chatbot nell’istruzione possono fornire formazione personalizzata e consentire agli studenti di studiare al proprio ritmo.
  • I chatbot nel settore sanitario possono fornire informazioni su problemi di salute, rispondere a domande sui farmaci e mettere in contatto i pazienti con medici o altri professionisti sanitari.

Introduzione a OpenAI

OpenAI è all’avanguardia nella ricerca e nello sviluppo dell’intelligenza artificiale. Ha aperto la strada nella creazione di modelli di linguaggio all’avanguardia che eccellono nell’interpretazione e nella creazione di linguaggio naturale.

OpenAI fornisce sofisticati modelli di linguaggio come GPT-4, GPT-3, Text-davinci che vengono ampiamente utilizzati per attività di NLP come la creazione di chatbot e molto altro.

Vantaggi dell’utilizzo dei chatbot

Prima di passare al codice e all’implementazione, cerchiamo di comprendere alcuni vantaggi dell’utilizzo dei chatbot:

  1. Disponibilità 24/7: I chatbot possono offrire assistenza agli utenti in qualsiasi momento, eliminando i limiti dei rappresentanti del servizio clienti umani e consentendo alle aziende di soddisfare le esigenze dei clienti quando si presentano.
  2. Miglior servizio clienti: I chatbot possono rispondere rapidamente alle domande frequenti fornendo risposte accurate e rapide. Ciò migliora la qualità complessiva del servizio clienti.
  3. Risparmio di costi: Le aziende possono risparmiare molti soldi nel tempo automatizzando i compiti di supporto clienti e riducendo la necessità di un grande staff di supporto.
  4. Aumento dell’efficienza: I chatbot possono gestire più conversazioni contemporaneamente, garantendo risposte rapide e riducendo i tempi di attesa degli utenti.
  5. Raccolta e analisi dei dati: I chatbot possono raccogliere informazioni utili dalle interazioni degli utenti, fornendo alle aziende una comprensione delle preferenze, dei desideri e dei punti critici dei clienti. Utilizzando questi dati, è possibile migliorare i prodotti e i servizi.

Ora che conosciamo i vantaggi dei chatbot, passiamo alla scomposizione passo-passo del codice necessario per creare un chatbot personalizzato utilizzando OpenAI.

Passaggi

Passaggio 1: Importazione delle librerie necessarie

Dobbiamo importare le librerie necessarie. Nel codice fornito, possiamo vedere le seguenti istruzioni di importazione:

!pip install langchain
!pip install faiss-cpu
!pip install openai
!pip install llama_index

# oppure puoi usare

%pip install langchain
%pip install faiss-cpu
%pip install openai
%pip install llama_index

Assicurati di avere queste librerie installate prima di procedere.

Passaggio 2: Configurazione della chiave API

Per interagire con l’API di OpenAI, è necessaria una chiave API. Nel codice fornito, è presente un segnaposto che indica dove aggiungere la tua chiave API:

Per trovare la tua API Key, vai al sito web di OpenAI e crea una nuova chiave di Open AI.

import os 
os.environ["OPENAI_API_KEY"] = 'Inserisci qui la tua API Key'

Sostituisci ‘Inserisci qui la tua API Key’ con la tua API key effettiva ottenuta da OpenAI.

Step 3: Creazione e Indicizzazione della Knowledge Base

In questo passaggio, creeremo e indicheremo la knowledge base a cui il chatbot farà riferimento per rispondere alle domande degli utenti. Il codice fornito illustra due approcci: uno per il caricamento dei documenti da una directory e un altro per il caricamento di un indice esistente. Concentriamoci sul primo approccio.

from llama_index import GPTVectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader('/Percorso/alla/tua/cartella/contenente/i/documenti').load_data()
print(documents)

Utilizza la classe SimpleDirectoryReader per caricare i documenti da una directory specifica.

Sostituisci ‘/Percorso/alla/tua/cartella/contenente/i/documenti’ con il percorso della tua directory contenente i documenti della knowledge base. La funzione load_data() carica i documenti e li restituisce.

Dopo aver caricato i documenti, dobbiamo creare un indice utilizzando la classe GPTVectorStoreIndex:

index = GPTVectorStoreIndex.from_documents(documents)

Questo passaggio crea l’indice utilizzando i documenti caricati.

Step 4: Persistenza dell’Indice

Per evitare la necessità di ricostruire l’indice ogni volta che il codice viene eseguito, possiamo persistere l’indice su disco. Nel codice fornito, la seguente riga viene utilizzata per salvare l’indice:

# Salva l'indice
index.storage_context.persist('/Percorso/alla/tua/cartella')

Assicurati di sostituire ‘/Percorso/alla/tua/cartella’ con il percorso della directory desiderata in cui desideri salvare l’indice.

Per mezzo della persistenza dell’indice, possiamo caricarlo nelle esecuzioni successive senza incurring costi aggiuntivi di token.

Step 5: Caricamento dell’Indice

Nel caso in cui desideri caricare l’indice precedentemente salvato, puoi utilizzare il seguente codice:

from llama_index import StorageContext, load_index_from_storage

# ricostruisci il contesto di archiviazione
storage_context = StorageContext.from_defaults
                  (persist_dir='/Percorso/alla/tua/cartella/dell/indice')
# carica l'indice
index = load_index_from_storage(storage_context)

Assicurati di aggiornare ‘/Percorso/alla/tua/cartella/dell/indice’ con il percorso corretto della directory in cui hai salvato l’indice.

Step 6: Creazione della Classe Chatbot

Ora passiamo alla creazione della classe chatbot effettiva che interagisce con l’utente e genera risposte. Ecco il codice fornito:

# Chat Bot

import openai
import json

class Chatbot:
    def __init__(self, api_key, index):
        self.index = index
        openai.api_key = api_key
        self.chat_history = []

    def generate_response(self, user_input):
        prompt = "\n".join([f"{message['role']}: {message['content']}" 
                           for message in self.chat_history[-5:]])
        prompt += f"\nUser: {user_input}"
        query_engine = index.as_query_engine()
        response = query_engine.query(user_input)

        message = {"role": "assistant", "content": response.response}
        self.chat_history.append({"role": "user", "content": user_input})
        self.chat_history.append(message)
        return message

    def load_chat_history(self, filename):
        try:
            with open(filename, 'r') as f:
                self.chat_history = json.load(f)
        except FileNotFoundError:
            pass

    def save_chat_history(self, filename):
        with open(filename, 'w') as f:
            json.dump(self.chat_history, f)

La classe Chatbot ha un metodo __init__ per inizializzare l’istanza del chatbot con la chiave API e l’indice forniti.

Il metodo generate_response prende in input l’input dell’utente, genera una risposta utilizzando l’indice e l’API di OpenAI e aggiorna la cronologia della chat.

I metodi load_chat_history e save_chat_history vengono utilizzati per caricare e salvare la cronologia della chat, rispettivamente.

Step 7: Interazione con il Chatbot

Il passo finale è interagire con il chatbot. Ecco il frammento di codice fornito che dimostra come utilizzare il chatbot:

bot = Chatbot("Inserisci qui la tua chiave API", index=index)
bot.load_chat_history("chat_history.json")

while True:
    user_input = input("Tu: ")
    if user_input.lower() in ["bye", "goodbye"]:
        print("Bot: Arrivederci!")
        bot.save_chat_history("chat_history.json")
        break
    response = bot.generate_response(user_input)
    print(f"Bot: {response['content']}")

Per utilizzare il chatbot, crea un’istanza della classe Chatbot passando la tua chiave API di OpenAI e l’indice caricato.

Sostituisci “Inserisci qui la tua chiave API” con la tua chiave API effettiva. Il metodo load_chat_history viene utilizzato per caricare la cronologia della chat da un file (sostituisci “chat_history.json” con il percorso effettivo del file).

Successivamente, viene utilizzato un ciclo while per ottenere ripetutamente l’input dell’utente e generare risposte fino a quando l’utente inserisce “bye” o “goodbye”.

Il metodo save_chat_history viene utilizzato per salvare la cronologia della chat su un file.

Passo 8: Creare un’applicazione web utilizzando Streamlit

Il codice fornito include anche un’applicazione web creata utilizzando Streamlit, che consente agli utenti di interagire con il chatbot tramite un’interfaccia utente. Ecco il codice fornito:

import streamlit as st
import json
import os

from llama_index import StorageContext, load_index_from_storage

os.environ["OPENAI_API_KEY"] = 'Inserisci qui la tua chiave API'

# ricostruisci il contesto di archiviazione
storage_context = StorageContext.from_defaults
                 (persist_dir='/Users/tarakram/Documents/Chatbot/index')
# carica l'indice
index = load_index_from_storage(storage_context)

# Crea il chatbot
# Chat Bot 

import openai
import json

class Chatbot:
    def __init__(self, api_key, index, user_id):
        self.index = index
        openai.api_key = api_key
        self.user_id = user_id
        self.chat_history = []
        self.filename = f"{self.user_id}_chat_history.json"

    def generate_response(self, user_input):
        prompt = "\n".join([f"{message['role']}: {message['content']}" 
                           for message in self.chat_history[-5:]])
        prompt += f"\nUser: {user_input}"
        query_engine = index.as_query_engine()
        response = query_engine.query(user_input)

        message = {"role": "assistant", "content": response.response}
        self.chat_history.append({"role": "user", "content": user_input})
        self.chat_history.append(message)
        return message
    
    def load_chat_history(self):
        try:
            with open(self.filename, 'r') as f:
                self.chat_history = json.load(f)
        except FileNotFoundError:
            pass

    def save_chat_history(self):
        with open(self.filename, 'w') as f:
            json.dump(self.chat_history, f)
            
# App Streamlit
def main():
    st.title("Chatbot")

    # ID utente
    user_id = st.text_input("Il tuo nome:")
    
    # Verifica se è stato fornito un ID utente
    if user_id:
        # Crea un'istanza del chatbot per l'utente
        bot = Chatbot("Inserisci qui la tua chiave API", index, user_id)

        # Carica la cronologia della chat
        bot.load_chat_history()

        # Visualizza la cronologia della chat
        for message in bot.chat_history[-6:]:
            st.write(f"{message['role']}: {message['content']}")

        # Input dell'utente
        user_input = st.text_input("Digita le tue domande qui :) - ")

        # Genera la risposta
        if user_input:
            if user_input.lower() in ["bye", "goodbye"]:
                bot_response = "Arrivederci!"
            else:
                bot_response = bot.generate_response(user_input)
                bot_response_content = bot_response['content']
                st.write(f"{user_id}: {user_input}")
                st.write(f"Bot: {bot_response_content}")
                bot.save_chat_history()
                bot.chat_history.append 
                         ({"role": "user", "content": user_input})
                bot.chat_history.append
                       ({"role": "assistant", "content": bot_response_content})

if __name__ == "__main__":
    main()

Per eseguire l’applicazione web, assicurati di avere Streamlit installato (pip install streamlit).

Sostituisci “Aggiungi qui la tua chiave API” con la tua effettiva chiave API di OpenAI.

In seguito, puoi eseguire l’applicazione utilizzando il comando streamlit run app.py.

L’applicazione web si aprirà nel tuo browser e potrai interagire con il chatbot tramite l’interfaccia utente fornita.

Migliorare le Prestazioni dei Chatbot

Considera i seguenti modi per migliorare le prestazioni del chatbot:

  • Fine-tuning: Migliora continuamente la comprensione del modello del chatbot e le capacità di generazione delle risposte mediante il fine-tuning con ulteriori dati.
  • Integrazione dei Feedback degli Utenti: Integra cicli di feedback degli utenti per raccogliere informazioni e migliorare le prestazioni del chatbot basandosi sulle interazioni degli utenti reali.
  • Tecniche Ibride: Indaga sulle tecniche ibride che combinano sistemi basati su regole con modelli di intelligenza artificiale per gestire in modo più efficace circostanze complicate.
  • Informazioni Specifiche del Dominio: Includi informazioni e dati specifici del dominio per aumentare l’esperienza e l’accuratezza del chatbot in determinate aree tematiche.

Conclusione

Congratulazioni! Ora hai imparato come creare un chatbot personalizzato utilizzando OpenAI. In questa guida, abbiamo esaminato come utilizzare OpenAI per creare un chatbot su misura. Abbiamo coperto i passaggi necessari per configurare le librerie richieste, ottenere una chiave API, creare e indicizzare una base di conoscenza, creare la classe del chatbot e interagire con il chatbot.

Hai anche esplorato l’opzione di creare un’applicazione web utilizzando Streamlit per un’interfaccia utente amichevole. La creazione di un chatbot è un processo iterativo e il costante perfezionamento è essenziale per migliorarne la funzionalità. Puoi progettare chatbot che offrono un’esperienza utente eccezionale e un supporto significativo sfruttando il potere di OpenAI e rimanendo aggiornato sulle ultime novità nell’ambito dell’intelligenza artificiale. Sperimenta con diverse prompt, dati di addestramento e tecniche di fine-tuning per creare un chatbot personalizzato alle tue esigenze specifiche. Le possibilità sono infinite e OpenAI offre una potente piattaforma per esplorare e sfruttare il potenziale della tecnologia dei chatbot.

Punti Salienti

  • Configurare le librerie necessarie, ottenere una chiave API, generare e indicizzare una base di conoscenza, e implementare la classe del chatbot sono tutti passaggi nel processo di costruzione di un chatbot su misura utilizzando OpenAI.
  • I chatbot sono programmi informatici che simulano interazioni umane fornendo assistenza e rispondendo a domande in linguaggio naturale.
  • La raccolta dati è essenziale per addestrare un chatbot efficiente e comporta l’acquisizione di set di dati pertinenti e variati da fonti affidabili.
  • Le applicazioni di intelligenza artificiale conversazionale utilizzano il modello di linguaggio GPT-3.5 di OpenAI, uno strumento potente per l’elaborazione del linguaggio naturale.
  • L’utilizzo di strumenti come la libreria Llamas per indicizzare e cercare una base di conoscenza può migliorare notevolmente la capacità del chatbot di recuperare dati pertinenti.
  • Streamlit offre un framework pratico per la creazione di applicazioni web che consentono agli utenti di interagire con il chatbot tramite un’interfaccia utente intuitiva.

Puoi accedere al codice su Github – Link

Connettiti con me su Linkedin – Link

Domande Frequenti

Il materiale mostrato in questo articolo non è di proprietà di Analytics Vidhya ed è utilizzato a discrezione dell’autore.