introduzione
Nell’era rivoluzionaria dell’intelligenza artificiale, gli agenti conversazionali o chatbot sono emersi come strumenti fondamentali per coinvolgere gli utenti, assistere e migliorare l’esperienza dell’utente su varie piattaforme digitali. I chatbot basati su tecniche avanzate 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 livelli maggiori. Costruire chatbot come ChatGPT sui dati personalizzati può aiutare le aziende con un feedback e un’esperienza migliori da parte degli utenti. In questo articolo, creeremo la soluzione Chatbot di Langchain, come ChatGPT, su più siti Web personalizzati e Recupero generazione aumentata (RAG) tecnica. Per iniziare con il progetto, comprenderemo innanzitutto alcuni componenti critici per creare un’applicazione di questo tipo.
obiettivi formativi
Ecco cosa imparerai da questo progetto: Modelli di chat linguistica di grandi dimensioni
- Costruire un Chatbot come ChatGPT su dati personalizzati.
- Need of RAG – Retrieval Augmented Generation.
- Utilizzo di componenti principali come caricatori, Chunking e incorporamenti per creare ChatBot come ChatGPT.
- Importanza dei database vettoriali in memoria utilizzando Langchain.
- Implementazione della catena RetrievalQA utilizzando i LLM di chat ChatOpenAI.
Questo articolo è stato pubblicato come parte del Blogathon sulla scienza dei dati.
Cos’è Langchain e perché usarlo?
Per costruire un ChatBot come ChatGPT, in questo passaggio arriva un framework come Langchain. Definiamo il modello linguistico Large utilizzato per creare la risposta. Assicurati di utilizzare gpt-3.5-turbo-16k come modello mentre lavori con più origini dati. Questo occuperà più numero di token. Usa questo nome di modello ed evita InvalidRequestError a portata di mano. Langchain è un framework open source progettato per guidare lo sviluppo di applicazioni guidate da modelli linguistici di grandi dimensioni (LLM). Fondamentalmente, LangChain facilita la creazione di applicazioni che possiedono un attributo cruciale e una consapevolezza del contesto. Queste applicazioni collegano i LLM a origini dati personalizzate, incluse istruzioni rapide, esempi di poche riprese e contenuto contestuale. Attraverso questa integrazione vitale, il modello linguistico può radicare 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 la connessione di modelli linguistici ad altre origini dati e la creazione di applicazioni complesse. Con questo, puoi creare applicazioni come motore di ricerca, sistemi di consigli avanzati, riepilogo PDF di eBook, agenti di domande e risposte, chatbot di Assistente codice e molto altro.
Comprendere RAG: generazione aumentata di recupero
I modelli linguistici di grandi dimensioni sono ottimi quando si tratta di generare risposte come un’intelligenza artificiale convenzionale. Può svolgere varie attività come la generazione di codice, la scrittura di posta, la generazione di articoli di blog e così via. Ma un enorme svantaggio è la conoscenza specifica del dominio. Gli LLM di solito tendono ad avere allucinazioni quando si tratta di rispondere a domande specifiche del dominio. Per superare sfide come la riduzione delle allucinazioni e la formazione dei LLM pre-addestrati con set di dati specifici del dominio, utilizziamo un approccio chiamato Fine Tuning. La messa a punto fine riduce le allucinazioni e rappresenta il modo migliore per far apprendere a un modello la conoscenza del dominio. Ma questo comporta rischi più elevati. La messa a punto fine richiede tempo di addestramento e risorse di calcolo un po’ costose.
RAG viene in soccorso. Retrieval Augmented Generation (RAG) garantisce che il contenuto dei dati del dominio venga alimentato a LLM in grado di produrre risposte contestualmente rilevanti e fattuali. RAG non solo acquisisce le conoscenze, ma non richiede alcuna riqualificazione del LLM. Questo approccio riduce i requisiti di calcolo e aiuta l’organizzazione a operare su un’infrastruttura di formazione limitata. RAG utilizza database vettoriali che aiutano anche a ridimensionare l’applicazione.
Chatta con il flusso di lavoro di più siti Web
La figura mostra il flusso di lavoro del progetto Chat con più siti web.
Immergiamoci nel codice per comprendere i componenti utilizzati nel flusso di lavoro.
Installazione
Puoi installare LangChain usando il comando pip. Possiamo anche installare OpenAI per impostare la chiave API.
pip install langchain
pip install openai
pip install chromadb tiktoken
Impostiamo la chiave API OpenAI.
In questo progetto utilizzeremo ChatOpenAI con un gpt-3.5-turbo-16k modello e Incorporamenti OpenAI. Entrambi questi componenti richiedono una chiave API OpenAI. Per ottenere la chiave API, accedi a platform.openai.com.
1. Dopo aver effettuato l’accesso al tuo account, fai clic sul tuo profilo e scegli “Visualizza le chiavi API“.
2. Premi “Crea nuova chiave segreta” e copia la tua chiave API.
Crea una variabile di ambiente utilizzando la libreria del sistema operativo secondo la sintassi e incolla la chiave API.
import os
os.environ('OPENAI_API_KEY') = "sk-......zqBp" #replace the key
Origine dati: ETL (estrazione, trasformazione e caricamento)
Per creare un’applicazione Chatbot come ChatGPT, il requisito fondamentale sono i dati personalizzati. Per questo progetto, poiché vogliamo chattare con più siti Web, dobbiamo definire gli URL del sito Web e caricare questa origine dati tramite WebBaseLoader. Il caricatore Langchain come WebBaseLoader elimina il contenuto dei dati dai rispettivi URL.
from langchain.document_loaders import WebBaseLoader
URLS = (
'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()
Spezzatura
Il Chunking si riferisce a un compito linguistico specifico che prevede l’identificazione e la segmentazione di gruppi di parole (o token) contigui e non sovrapposti in una frase che svolgono una funzione grammaticale comune. In parole semplici, Chunking aiuta a suddividere il testo di grandi dimensioni in segmenti più piccoli. Langchain fornisce supporti per la suddivisione del testo come CharacterTextSplitter, che divide il testo in caratteri.
from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
websites_data = text_splitter.split_documents(data)
Incorporamenti
Per un modello di deep learning che tratta il testo, è necessario passare il testo al livello di incorporamento. In modo simile, affinché il modello impari il contesto, i dati suddivisi in blocchi devono essere convertiti in incorporamenti. Gli incorporamenti sono un modo per convertire parole o token in vettori numerici. Questa trasformazione è cruciale perché ci consente di rappresentare i 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 OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
Database vettoriali
I dati effettivi del sito Web vengono estratti e convertiti negli incorporamenti in formato vettoriale. I database vettoriali rappresentano un modo unico per archiviare gli incorporamenti in database come Chroma. Il database vettoriale è un nuovo tipo di database che sta diventando popolare nel mondo del ML e dell’intelligenza artificiale. Il vantaggio principale dell’utilizzo di un database vettoriale è dovuto alle tecniche di ricerca e alla ricerca di somiglianze. Dopo aver ottenuto la query dell’utente, il risultato della ricerca e del recupero della somiglianza è solitamente un elenco classificato di vettori che hanno i punteggi di somiglianza più alti con il vettore della query. Utilizzando questa metrica, l’applicazione garantisce la restituzione di risposte basate sui fatti.
Alcuni dei database vettoriali Open Source comunemente usati e popolari sono Chroma, Elastic Search, Milvus, Qdrant, Weaviate e FAIISS.
from langchain.vectorstores import Chroma
websearch = Chroma.from_documents(websites_data, embeddings)
Modelli di chat linguistica di grandi dimensioni
In questo passaggio definiamo il modello di linguaggio Large, utilizzato per creare la risposta. Assicurati di utilizzare gpt-3.5-turbo-16k come modello mentre lavori con più origini dati. Questo occuperà più numero di token. Utilizza questo nome modello ed evita InvalidRequestError.
from langchain.chat_models import ChatOpenAI
model = ChatOpenAI(model="gpt-3.5-turbo-16k",temperature=0.7)
Prompt e recupero dell’utente
Siamo arrivati alla parte finale del progetto, dove otteniamo il prompt di input e utilizziamo un database vettoriale per recuperare il contesto rilevante per il prompt immesso. RetrievalQA raggruppa sia modelli linguistici di grandi dimensioni che database vettoriali in una catena che aiuta a fornire una risposta migliore.
from langchain.chains import RetrievalQA
rag = RetrievalQA.from_chain_type(llm=model, chain_type="stuff", retriever=websearch.as_retriever())
prompt = "Write code implementation for Multiple Tif image conversion into RGB"
response = rag.run(prompt)
print(response)
Produzione
Mettere tutti insieme
#installation
!pip install langchain openai tiktoken chromadb
#import required libraries
import os
from getpass import getpass
from langchain.document_loaders import WebBaseLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
#set up OpenAI API Key
api_key = getpass()
os.environ('OPENAI_API_KEY') = api_key
#ETL=> load the data
URLS = (
'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 into smaller tokens
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
websites_data = text_splitter.split_documents(data)
#create embeddings
embeddings = OpenAIEmbeddings()
#store embeddings and the data inside Chroma - vector database
websearch = Chroma.from_documents(websites_data, embeddings)
#define chat large language model-> 16K token size
model = ChatOpenAI(model="gpt-3.5-turbo-16k",temperature=0.7)
Is LangChain a library or framework?
#retrieval chain
rag = RetrievalQA.from_chain_type(llm=model, chain_type="stuff", retriever=websearch.as_retriever())
#retrieve relevant output
prompt = "Write code implementation for Multiple Tif image conversion into RGB"
#run your query
response = rag.run(prompt)
print(response)
Conclusione
Per concludere con l’articolo, abbiamo creato con successo un Chatbot per più siti Web utilizzando Langchain. Questo non è solo un semplice Chatbot. Piuttosto è un Chatbot che risponde come ChatGPT ma sui tuoi dati. Il punto chiave di questo articolo è:
- Langchain è il framework open source Large Language Model più potente che aiuta a creare ChatBot come ChatGPT su dati personalizzati.
- Abbiamo discusso delle diverse sfide con modelli pre-addestrati e di come l’approccio Retrieval Augmented Generation si adatta meglio del Fine Tuning. Inoltre, un disclaimer: la messa a punto fine è preferibile rispetto al RAG per ottenere risposte più concrete nella maggior parte dei casi.
- Per creare un ChatBot come ChatGPT, abbiamo preparato un flusso di lavoro del progetto con componenti fondamentali come caricatori, suddivisione, incorporamento, database vettoriali e modelli di linguaggio di chat.
- I database vettoriali rappresentano il vantaggio principale delle pipeline RAG. Questo articolo menziona anche un elenco di popolari database vettoriali open source.
Questo caso d’uso del progetto ti ha ispirato a esplorare il potenziale di Langchain e RAG.
Domande frequenti
R. Il Large Language Model (LLM) è un modello basato su trasformatore che genera dati di testo in base al prompt dell’utente, mentre LangChain è un framework che fornisce LLM come un componente insieme a vari altri componenti come memoria, vectorDB, incorporamenti e così via .
R. Langchain è un robusto framework open source utilizzato per creare ChatBot come ChatGPT sui tuoi dati. Con questo framework, puoi creare varie applicazioni come applicazioni di ricerca, bot di domande e risposte, assistenti per la generazione di codice e altro ancora.
R. Langchain è un framework open source progettato per guidare lo sviluppo di applicazioni guidate da modelli linguistici di grandi dimensioni (LLM). Fondamentalmente, LangChain facilita la creazione di applicazioni che possiedono attributi cruciali e consapevolezza del contesto.
A. Retrieval Augmented Generation (RAG) garantisce che il contenuto dei dati del dominio venga alimentato a LLM in grado di produrre risposte contestualmente rilevanti e fattuali.
R. RAG è una tecnica che combina il LLM e l’archivio della conoscenza delle informazioni per generare una risposta. L’idea centrale alla base di RAG è il trasferimento di conoscenza che non richiede l’addestramento del modello, mentre il Fine Tuning è una tecnica in cui imponiamo i dati al LLM e riqualificamo il modello per il recupero della conoscenza esterna.
I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e vengono utilizzati a discrezione dell’autore.
Imparentato
Fonte: www.analyticsvidhya.com