LangChain è uno strumento robusto e all'avanguardia sviluppato per sfruttare la potenza dei Large Language Models (LLM).
Questi LLM possiedono notevoli capacità e possono affrontare in modo efficiente una vasta gamma di compiti. Tuttavia, è importante notare che la loro forza risiede nella loro natura generale piuttosto che in un'approfondita competenza del dominio. La sua popolarità è cresciuta rapidamente dall'introduzione di GPT-4.
Mentre gli LLM eccellono nella gestione di varie attività, potrebbero incontrare limitazioni quando si tratta di fornire risposte specifiche o affrontare attività che richiedono una profonda conoscenza del dominio. Prendi in considerazione, ad esempio, l'utilizzo di un LLM per rispondere a domande o svolgere compiti all'interno di campi specializzati come la medicina o la legge.
Sebbene l'LLM possa certamente rispondere a domande generali su questi campi, potrebbe avere difficoltà a offrire risposte più dettagliate o sfumate che richiedono conoscenze o competenze specializzate.
Questo perché gli LLM sono addestrati su grandi quantità di dati di testo provenienti da diverse fonti, consentendo loro di apprendere modelli, comprendere il contesto e generare risposte coerenti. Tuttavia, la loro formazione in genere non comporta l'acquisizione di conoscenze specifiche del dominio o specializzate nella stessa misura degli esperti umani in quei campi.
Pertanto, mentre LangChain, in combinazione con i LLM, può essere uno strumento inestimabile per un'ampia gamma di attività, è importante riconoscere che in determinate situazioni potrebbe essere ancora necessaria una profonda competenza nel dominio. Esperti umani con conoscenze specialistiche possono fornire la profondità necessaria, la comprensione sfumata e le intuizioni specifiche del contesto che potrebbero andare oltre le capacità dei soli LLM.
Consigliamo di guardare i documenti di LangChain o GitHub repository per una comprensione più approfondita dei suoi casi di utilizzo tipici. Si consiglia vivamente di ottenere un quadro più ampio di questo pacchetto.
Come funziona?
Per comprendere lo scopo e il lavoro di LangChain, consideriamo un esempio pratico. Siamo consapevoli del fatto che GPT-4 ha una conoscenza generale impressionante e può fornire risposte affidabili a un'ampia gamma di domande.
Tuttavia, cosa succede se desideriamo informazioni specifiche dai nostri dati, come un documento personale, un libro, un file PDF o un database proprietario?
LangChain ci permette di connettere un file grande modello linguistico come GPT-4 alle nostre fonti di dati. Va oltre il semplice incollare un frammento di testo in un'interfaccia di chat. Invece, possiamo fare riferimento a un intero database riempito con i nostri dati.
Una volta ottenute le informazioni desiderate, LangChain può assisterci nell'intraprendere azioni specifiche. Ad esempio, possiamo istruirlo a inviare un'e-mail contenente determinati dettagli.
Per raggiungere questo obiettivo, seguiamo un approccio alla pipeline utilizzando LangChain. Per prima cosa, prendiamo il documento che vogliamo modello linguistico per fare riferimento e dividerlo in blocchi più piccoli. Questi blocchi vengono quindi archiviati come incorporamenti, che sono rappresentazioni vettoriali del testo, in un Database Vettoriale.
Con questa configurazione, possiamo creare applicazioni del modello linguistico che seguono una pipeline standard: un utente pone una domanda iniziale, che viene quindi inviata al modello linguistico. La rappresentazione vettoriale della domanda viene utilizzata per eseguire una ricerca di similarità nel database vettoriale, recuperando i blocchi di informazioni pertinenti.
Questi blocchi vengono quindi restituiti al modello linguistico, consentendogli di fornire una risposta o intraprendere l'azione desiderata.
LangChain facilita lo sviluppo di applicazioni che riconoscono i dati, poiché possiamo fare riferimento ai nostri dati in un archivio vettoriale e autentiche, poiché possono intraprendere azioni oltre a rispondere alle domande. T
Questo apre una moltitudine di casi d'uso pratici, in particolare nell'assistenza personale, in cui un modello linguistico di grandi dimensioni può gestire attività come la prenotazione di voli, il trasferimento di denaro o l'assistenza in questioni fiscali.
Inoltre, le implicazioni per lo studio e l'apprendimento di nuove materie sono significative, poiché un modello linguistico può fare riferimento a un intero programma e accelerare il processo di apprendimento. Anche la codifica, l'analisi dei dati e la scienza dei dati dovrebbero essere fortemente influenzate da questi progressi.
Una delle prospettive più entusiasmanti è la connessione di modelli di linguaggio di grandi dimensioni ai dati aziendali esistenti, come le informazioni sui clienti o i dati di marketing. Questa integrazione con API avanzate come l'API di Meta o l'API di Google promette progressi esponenziali nell'analisi dei dati e nella scienza dei dati.
Come costruire una pagina web (demo)
Attualmente, Langchain è disponibile come pacchetti Python e JavaScript.
Possiamo creare un'app Web dimostrativa utilizzando Streamlit, LangChain e il modello OpenAI GPT-3 per implementare il concetto di LangChain.
Ma prima dobbiamo installare alcune dipendenze, tra cui Streamlit, LangChain e OpenAI.
Pre-requisiti
Semplificato: Un popolare pacchetto Python per la creazione di applicazioni Web relative alla scienza dei dati
OpenAI: È necessario l'accesso al modello linguistico GPT-3 di OpenAI.
Per installare queste dipendenze, utilizzare i seguenti comandi in cmd:
pip install streamlit
pip install langchain
pip install openai
Importa pacchetti
Iniziamo importando i pacchetti richiesti, come OpenAI, LangChain e Streamlit. Le nostre catene di modelli linguistici sono definite ed eseguite utilizzando tre classi di LangChain: LLMChain, SimpleSequentialChain e PromptTemplate.
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
Impostazione di base
La base strutturale del nostro progetto è stata quindi posta utilizzando la sintassi Streamlit. Abbiamo dato all'app il titolo "What's TRUE: Using Simple Sequential Chain" e abbiamo incluso un collegamento markdown al repository GitHub che è servito da ispirazione per l'app.
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
Widget front-end
Abbiamo configurato l'app con poche informazioni rilevanti, utilizzando la semplice sintassi di Streamlit:
# If an API key has been provided, create an OpenAI language model instance
if API:
llm = OpenAI(temperature=0.7, openai_api_key=API)
else:
# If an API key hasn't been provided, display a warning message
st.warning("Enter your OPENAI API-KEY. Get your OpenAI API key from [here](https://platform.openai.com/account/api-keys).\n")
Per aggiungere widget front-end
Inoltre, dobbiamo fornire un widget di input per consentire ai nostri utenti di inserire qualsiasi domanda.
# Add a text input box for the user's question
user_question = st.text_input(
"Enter Your Question : ",
placeholder = "Cyanobacteria can perform photosynthetsis , are they considered as plants?",
)
Tutto fatto! Le catene sono in funzione!
Impieghiamo varie catene di operazioni insieme a SimpleSequentialChain
per rispondere alla domanda dell'utente. Le catene vengono eseguite nella seguente sequenza quando l'utente seleziona il file "Tell me about it"
pulsante:
if st.button("Tell me about it", type="primary"):
# Chain 1: Generating a rephrased version of the user's question
template = """{question}\n\n"""
prompt_template = PromptTemplate(input_variables=["question"], template=template)
question_chain = LLMChain(llm=llm, prompt=prompt_template)
# Chain 2: Generating assumptions made in the statement
template = """Here is a statement:
{statement}
Make a bullet point list of the assumptions you made when producing the above statement.\n\n"""
prompt_template = PromptTemplate(input_variables=["statement"], template=template)
assumptions_chain = LLMChain(llm=llm, prompt=prompt_template)
assumptions_chain_seq = SimpleSequentialChain(
chains=[question_chain, assumptions_chain], verbose=True
)
# Chain 3: Fact checking the assumptions
template = """Here is a bullet point list of assertions:
{assertions}
For each assertion, determine whether it is true or false. If it is false, explain why.\n\n"""
prompt_template = PromptTemplate(input_variables=["assertions"], template=template)
fact_checker_chain = LLMChain(llm=llm, prompt=prompt_template)
fact_checker_chain_seq = SimpleSequentialChain(
chains=[question_chain, assumptions_chain, fact_checker_chain], verbose=True
)
# Final Chain: Generating the final answer to the user's question based on the facts and assumptions
template = """In light of the above facts, how would you answer the question '{}'""".format(
user_question
)
template = """{facts}\n""" + template
prompt_template = PromptTemplate(input_variables=["facts"], template=template)
answer_chain = LLMChain(llm=llm, prompt=prompt_template)
overall_chain = SimpleSequentialChain(
chains=[question_chain, assumptions_chain, fact_checker_chain, answer_chain],
verbose=True,
)
# Running all the chains on the user's question and displaying the final answer
st.success(overall_chain.run(user_question))
question_chain
: che è il primo passo nella nostra pipeline, riceve la domanda dell'utente come input e output. La query dell'utente funge da modello della catena.- Sulla base di una dichiarazione collegata alla domanda, il
assumptions_chain
genera un elenco puntato di ipotesi utilizzando l'output diquestion_chain
come ingresso. ILLLMChain
edOpenAI
modello di LangChain è stato utilizzato per costruire la dichiarazione. L'utente ha il compito di creare un elenco delle ipotesi fatte per produrre la dichiarazione utilizzando il modello per questa catena. - Sulla base delle uscite del
question_chain
edassumptions_chain
, lefact_checker_chain
genera un elenco di asserzioni sotto forma di elenchi puntati. Le affermazioni sono prodotte utilizzando ilOpenAI
modello eLLMChain
da LangChain. L'utente ha il compito di determinare se ogni affermazione è accurata o errata e di fornire una giustificazione per quelle che lo sono. - I
answer_chain
utilizza gli output diquestion_chain
,assumptions_chain
efact_checker_chain
come input per creare una risposta alla domanda dell'utente utilizzando i dati prodotti dalle catene precedenti. Il modello per questa catena richiede che l'utente risponda alla prima query utilizzando i fatti che sono stati creati. - Al fine di fornire la risposta definitiva alla domanda dell'utente sulla base delle informazioni prodotte dalle catene precedenti, integriamo queste catene nella catena globale. Dopo che le catene sono state completate, usiamo
st.success()
per mostrare all'utente la soluzione.
Conclusione
Possiamo semplicemente concatenare diverse azioni del modello di linguaggio per creare pipeline più complicate utilizzando il SimpleSequentialChain
modulo di LangChain. Per un'ampia varietà di applicazioni NLP, inclusi chatbot, sistemi di domande e risposte e strumenti di traduzione linguistica, questo può essere molto utile.
La genialità di LangChain si trova nella sua capacità di astrarre, che consente all'utente di concentrarsi sulla questione attuale piuttosto che sulle specifiche della modellazione del linguaggio.
LangChain rende il processo di creazione di modelli linguistici sofisticati più intuitivo offrendo modelli pre-addestrati e una selezione di modelli.
Ti dà la possibilità di mettere a punto i modelli linguistici utilizzando i propri dati, semplificando la personalizzazione dei modelli linguistici. Ciò consente lo sviluppo di modelli più precisi e specifici del dominio che, per un determinato lavoro, superano i modelli addestrati.
I SimpleSequentialChain
modulo e altre funzionalità di LangChain lo rendono uno strumento efficace per sviluppare e implementare rapidamente sofisticati sistemi di PNL.
Lascia un Commento