Migliora il potenziale di più siti web con la soluzione di chatbot di Langchain

Potenzia il potenziale di più siti web con la soluzione di chatbot di Langchain

Introduzione

Nell’era rivoluzionaria dell’IA, gli agenti conversazionali o chatbot sono emersi come strumenti fondamentali per coinvolgere gli utenti, assistere e migliorare l’esperienza utente su diverse piattaforme digitali. I chatbot alimentati da avanzate tecniche di intelligenza artificiale consentono conversazioni automatizzate e interattive che assomigliano alle interazioni umane. Con il lancio di ChatGPT, la capacità di rispondere alle domande degli utenti ha raggiunto nuove vette. La costruzione di chatbot come ChatGPT su dati personalizzati può aiutare le aziende a ottenere un feedback e un’esperienza utente migliori. In questo articolo, costruiremo una soluzione di chatbot di Langchain, simile a ChatGPT, su più siti web personalizzati e utilizzando la tecnica di Generazione Arricchita da Recupero (RAG). Per iniziare il progetto, capiremo innanzitutto alcuni componenti critici per costruire un’applicazione del genere.

Obiettivi di Apprendimento

Ecco cosa imparerai da questo progetto: Modelli di Chat a Linguaggio Esteso

  • Costruzione di un chatbot simile a ChatGPT su dati personalizzati.
  • Necessità di RAG – Generazione Arricchita da Recupero.
  • Utilizzo di componenti principali come Loaders, Chunking e Embeddings per costruire un chatbot simile a ChatGPT.
  • Importanza dei Database Vettoriali In-Memory utilizzando Langchain.
  • Implementazione di una catena di Recupero delle domande e risposte utilizzando ChatOpenAI chat LLMs.

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

Cosa è Langchain e perché utilizzarlo?

Per costruire un chatbot simile a ChatGPT, viene in aiuto un framework come Langchain in questa fase. Definiamo il modello di linguaggio esteso che viene utilizzato per creare la risposta. Assicurati di utilizzare gpt-3.5-turbo-16k come modello durante il lavoro con più fonti di dati. Questo richiederà un numero maggiore di token. Utilizza questo nome di modello e evita l’errore InvalidRequestError in modo pratico. Langchain è un framework open-source progettato per guidare lo sviluppo di applicazioni basate su modelli di linguaggio esteso (LLMs). Al suo nucleo, LangChain facilita la creazione di applicazioni dotate di un attributo cruciale e di consapevolezza del contesto. Queste applicazioni collegano LLMs a fonti di dati personalizzate, tra cui istruzioni di avvio, esempi a breve termine e contenuti contestuali. Attraverso questa integrazione fondamentale, il modello di linguaggio può ancorare le sue risposte nel contesto fornito, risultando in un’interazione più sottile e informata con l’utente.

LangChain fornisce un’API di alto livello che semplifica il collegamento dei modelli di linguaggio ad altre fonti di dati e la creazione di applicazioni complesse. Con questo, è possibile creare applicazioni come motori di ricerca, sistemi di raccomandazione avanzati, sintesi di eBook in PDF, agenti di domande e risposte, chatbot assistenti di codice e molto altro.

Comprensione di RAG – Generazione Arricchita da Recupero

I modelli di linguaggio estesi sono ottimi quando si tratta di generare risposte come un’intelligenza artificiale convenzionale. Possono svolgere diverse attività come la generazione di codice, la scrittura di email, la generazione di articoli per blog e così via. Tuttavia, vi è un enorme svantaggio legato alla conoscenza specifica di dominio. I LLM tendono solitamente a creare illusioni quando si tratta di rispondere a domande specifiche di dominio. Per superare sfide come la riduzione delle illusioni e l’addestramento dei LLM preaddestrati con set di dati specifici di dominio, si utilizza un approccio chiamato Fine Tuning. Il Fine Tuning riduce le illusioni ed è il modo migliore per far apprendere al modello una conoscenza di dominio. Ma questo comporta rischi più elevati. Il Fine Tuning richiede tempo di addestramento e risorse di calcolo che sono un po’ costose.

RAG viene in soccorso. La Generazione Arricchita da Recupero (RAG) garantisce che i contenuti dei dati di dominio vengano forniti al LLM, che può produrre risposte pertinenti e factualmente rilevanti. RAG non solo acquisisce la conoscenza, ma non richiede il riaddestramento del LLM. Questo approccio riduce i requisiti di calcolo e aiuta l’organizzazione a operare su un’infrastruttura di addestramento limitata. RAG utilizza i database vettoriali, che aiutano anche a scalare l’applicazione.

Workflow della Chat con più siti web

La figura illustra il Workflow del progetto Chat con più siti web.

Andiamo a esaminare il codice per capire i componenti utilizzati nel Workflow.

Installazione

Puoi installare LangChain utilizzando il comando pip. Possiamo anche installare OpenAI per configurare la chiave API.

pip install langchainpip install openaipip install chromadb tiktoken

Configuriamo la chiave API di OpenAI.

In questo progetto, useremo ChatOpenAI con il modello gpt-3.5-turbo-16k e OpenAI embeddings. Entrambi questi componenti richiedono una chiave API di OpenAI. Per ottenere la tua chiave API, accedi a platform.openai.com.

1. Dopo aver effettuato l’accesso al tuo account, fai clic sul tuo profilo e scegli “Visualizza chiavi API”.

2. Premi “Crea nuova chiave segreta” e copia la tua chiave API.

Crea una variabile di ambiente utilizzando la libreria os secondo la sintassi e incolla la tua chiave API.

import osos.environ['OPENAI_API_KEY'] = "sk-......zqBp" #sostituisci con la chiave

Sorgente dati – ETL (Estrazione, Trasformazione e Caricamento)

Per costruire un’applicazione Chatbot come ChatGPT, il requisito fondamentale è avere dati personalizzati. Per questo progetto, poiché vogliamo chattare con più siti web, è necessario definire gli URL dei siti web e caricare questa fonte dati tramite WebBaseLoader. Il loader di Langchain come WebBaseLoader recupera i contenuti dati dai rispettivi URL.

from langchain.document_loaders import WebBaseLoaderURLS = [    'https://medium.com/@jaintarun7/getting-started-with-camicroscope-4e343429825d',    'https://medium.com/@jaintarun7/multichannel-image-support-week2-92c17a918cd6',    'https://medium.com/@jaintarun7/multi-channel-support-week3-2d220b27b22a'    ]loader = WebBaseLoader(URLS)data = loader.load()

Segmentazione

La segmentazione si riferisce a un compito linguistico specifico che consiste nell’identificare e nel segmentare gruppi di parole (o token) contigui e non sovrapposti in una frase che svolgono una comune funzione grammaticale. In parole semplici, la segmentazione aiuta a suddividere il testo lungo in segmenti più piccoli. Langchain fornisce supporto alla suddivisione del testo con splitter come CharacterTextSplitter, che suddivide il testo in caratteri.

from langchain.text_splitter import CharacterTextSplittertext_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)websites_data = text_splitter.split_documents(data)

Embeddings

Per un modello di deep learning che gestisce il testo, è necessario passare il testo al layer di Embedding. In modo simile, per far imparare al modello il contesto, i dati segmentati devono essere convertiti in Embeddings. Gli Embeddings sono un modo per convertire parole o token in vettori numerici. Questa trasformazione è cruciale perché ci consente di rappresentare dati testuali, che sono intrinsecamente discreti e simbolici, in uno spazio vettoriale continuo. Ogni parola o token è rappresentato da un vettore univoco.

from langchain.embeddings import OpenAIEmbeddingsembeddings = OpenAIEmbeddings()

Database di vettori

I dati effettivi del sito web vengono estratti e convertiti in Embeddings, che sono in forma vettoriale. I Vector Databases sono un modo unico per archiviare gli embeddings in database come Chroma. Il vector database è un nuovo tipo di database che sta diventando popolare nel mondo dell’IA e del machine learning. Il vantaggio principale nell’utilizzare un Vector Database è dovuto alle tecniche di ricerca e ricerca di similarità. Dopo aver ottenuto la query dell’utente, il risultato della ricerca di similarità e il recupero è di solito una lista ordinata di vettori con i punteggi di similarità più alti rispetto al vettore di query. Utilizzando questa metrica, l’applicazione garantisce di restituire risposte basate sui fatti.

Alcuni dei database vettoriali Open Source comunemente utilizzati e popolari sono Chroma, Elastic Search, Milvus, Qdrant, Weaviate e FAISS.

from langchain.vectorstores import Chromawebsearch = Chroma.from_documents(websites_data, embeddings)

Modelli di chat con linguaggio esteso

In questo passaggio, definiamo il modello di lingua estesa, che viene utilizzato per creare la risposta. Assicurarsi di utilizzare gpt-3.5-turbo-16k come modello durante il lavoro con più fonti di dati. Questo occuperà un numero maggiore di token. Utilizzare questo nome del modello e evitare InvalidRequestError.

from langchain.chat_models import ChatOpenAImodel = ChatOpenAI(model='gpt-3.5-turbo-16k',temperature=0.7)

Prompt dell’utente e recupero

Siamo arrivati alla parte finale del progetto, dove otteniamo l’input del prompt e utilizziamo un retriever di database vettoriali per recuperare il contesto rilevante per il prompt inserito. RetrievalQA impila sia modelli di lingua estesa che database vettoriali in una catena che aiuta a ottenere una migliore risposta.

from langchain.chains import RetrievalQArag = RetrievalQA.from_chain_type(llm=model, chain_type="stuff", retriever=websearch.as_retriever())prompt = "Scrivi l'implementazione del codice per la conversione di immagini Tif multiple in RGB"response = rag.run(prompt)print(response)

Output

Mettere tutto insieme

#installazione!pip install langchain openai tiktoken chromadb#importare le librerie richiesteimport osfrom getpass import getpassfrom langchain.document_loaders import WebBaseLoaderfrom langchain.text_splitter import CharacterTextSplitterfrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.vectorstores import Chromafrom langchain.chains import RetrievalQAfrom langchain.chat_models import ChatOpenAI#impostare la chiave API OpenAIapi_key = getpass()os.environ['OPENAI_API_KEY'] = api_key#ETL=> caricare i datiURLS = [    'https://medium.com/@jaintarun7/getting-started-with-camicroscope-4e343429825d',    'https://medium.com/@jaintarun7/multichannel-image-support-week2-92c17a918cd6',    'https://medium.com/@jaintarun7/multi-channel-support-week3-2d220b27b22a'    ]loader = WebBaseLoader(URLS)data = loader.load()#Chunking => Text Splitter in token più piccolitext_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)websites_data = text_splitter.split_documents(data)#creare embeddingsembeddings = OpenAIEmbeddings()#archiviare i dati e gli embedding all'interno di Chroma - database vettorialewebsearch = Chroma.from_documents(websites_data, embeddings)#definire un modello di chat di lingua estesa -> 16K token sizemodel = ChatOpenAI(model='gpt-3.5-turbo-16k',temperature=0.7)È LangChain una libreria o un framework?#catena di recupero rag = RetrievalQA.from_chain_type(llm=model, chain_type="stuff", retriever=websearch.as_retriever())#recuperare l'output rilevanteprompt = "Scrivi l'implementazione del codice per la conversione di immagini Tif multiple in RGB"#eseguire la queryresponse = rag.run(prompt)print(response)

Conclusione

Per concludere l’articolo, abbiamo costruito con successo un Chatbot per diversi siti web utilizzando Langchain. Questo non è solo un semplice Chatbot. Piuttosto, è un Chatbot che risponde come ChatGPT ma utilizzando i tuoi dati. Il punto chiave di questo articolo è:

  • Langchain è il framework open source più potente per modelli di linguaggio esteso che aiuta a costruire ChatBot come ChatGPT su dati personalizzati.
  • Abbiamo discusso delle diverse sfide con i modelli pre-addestrati e di come l’approccio di Generazione con Recupero Aumentato sia più adatto rispetto all’Accordatura Fina. Inoltre, una precisazione: l’Accordatura Fina è preferibile rispetto a RAG per ottenere risposte più factuali nella maggior parte dei casi.
  • Per costruire un ChatBot come ChatGPT, abbiamo preparato un flusso di lavoro con componenti principali come caricatori, chunking, embedding, database vettoriali e modelli di chat di linguaggio.
  • I database vettoriali sono il principale vantaggio delle pipeline RAG. Questo articolo ha anche menzionato un elenco dei database vettoriali open source più popolari.

Questo caso di utilizzo del progetto ti ha ispirato a esplorare il potenziale di Langchain e RAG.

Domande frequenti

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e vengono utilizzati a discrezione dell’autore.