LangChain estas avangarda kaj fortika ilo evoluigita por utiligi la potencon de Grandaj Lingvaj Modeloj (LLM).
Ĉi tiuj LLM-oj posedas rimarkindajn kapablojn kaj povas efike trakti larĝan aron da taskoj. Tamen, estas grave noti, ke ilia forto kuŝas en sia ĝenerala naturo prefere ol en profunda domajna kompetenteco. Ĝia populareco kreskis rapide ekde la enkonduko de GPT-4.
Dum LLM-oj elstaras pri pritraktado de diversaj taskoj, ili eble renkontos limigojn kiam temas pri provizi specifajn respondojn aŭ pritrakti taskojn, kiuj postulas profundan domajnscion. Konsideru, ekzemple, uzi LLM por respondi demandojn aŭ plenumi taskojn ene de fakaj kampoj kiel medicino aŭ leĝo.
Dum la LLM certe povas respondi al ĝeneralaj demandoj pri ĉi tiuj kampoj, ĝi povas lukti por oferti pli detalajn aŭ nuancatajn respondojn, kiuj bezonas specialiĝintajn sciojn aŭ kompetentecon.
Ĉi tio estas ĉar LLM-oj estas trejnitaj sur vastaj kvantoj de tekstaj datumoj de diversaj fontoj, ebligante ilin lerni ŝablonojn, kompreni kuntekston kaj generi koherajn respondojn. Tamen, ilia trejnado ne kutime implikas domajn-specifan aŭ specialecan sciakiron laŭ la sama mezuro kiel homaj ekspertoj en tiuj kampoj.
Tial, dum LangChain, kune kun LLMs, povas esti valorega ilo por larĝa gamo de taskoj, estas grave rekoni, ke profunda domajna kompetenteco ankoraŭ povas esti necesa en certaj situacioj. Homaj fakuloj kun specialeca scio povas provizi la necesan profundon, nuancan komprenon, kaj kuntekst-specifajn komprenojn kiuj povus esti preter la kapabloj de LLMs sole.
Ni konsilus rigardi la dokumentojn de LangChain aŭ GitHub deponejo por pli ĝisfunda kompreno de ĝiaj tipaj uzkazoj. Estas forte konsilite akiri pli grandan bildon de ĉi tiu pakaĵo.
Kiel funkcias?
Por kompreni la celon kaj laboron de LangChain, ni konsideru praktikan ekzemplon. Ni konscias, ke GPT-4 havas imponan ĝeneralan scion kaj povas doni fidindajn respondojn al ampleksa gamo de demandoj.
Tamen, kio se ni volas specifajn informojn de niaj propraj datumoj, kiel persona dokumento, libro, PDF-dosiero aŭ proprieta datumbazo?
LangChain permesas al ni konekti al granda lingvomodelo kiel GPT-4 al niaj propraj fontoj de datumoj. Ĝi iras preter simple gluado de fragmento de teksto en babilejan interfacon. Anstataŭe, ni povas referenci tutan datumbazon plenan de niaj propraj datumoj.
Post kiam ni akiras la deziratajn informojn, LangChain povas helpi nin fari specifajn agojn. Ekzemple, ni povas instrukcii ĝin sendi retmesaĝon enhavantan iujn detalojn.
Por atingi ĉi tion, ni sekvas duktan aliron uzante LangChain. Unue, ni prenu la dokumenton, kiun ni volas lingvomodelo referenci kaj dividi ĝin en pli malgrandajn pecojn. Tiuj ĉi pecoj tiam estas stokitaj kiel enkonstruaĵoj, kiuj estas vektoraj reprezentadoj de la teksto, en Vektora Datumbazo.
Kun ĉi tiu aranĝo, ni povas konstrui lingvajn modelojn aplikaĵojn kiuj sekvas norman dukton: uzanto demandas komencan demandon, kiu tiam estas sendita al la lingvomodelo. La vektora reprezentado de la demando estas uzata por fari similecserĉon en la Vektora Datumaro, prenante la koncernajn pecojn de informoj.
Tiuj ĉi pecoj tiam estas retransportitaj al la lingvomodelo, ebligante ĝin doni respondon aŭ fari la deziratan agon.
LangChain faciligas la disvolviĝon de aplikoj kiuj estas datumoj-konsciaj, ĉar ni povas referenci niajn proprajn datumojn en vektora vendejo, kaj aŭtentaj, ĉar ili povas fari agojn preter respondi demandojn. T
lia malfermas amason da praktikaj uzkazoj, precipe en persona asistado, kie granda lingvomodelo povas pritrakti taskojn kiel rezervi flugojn, transloki monon, aŭ helpi pri impostaj aferoj.
Aldone, la implicoj por studado kaj lernado de novaj fakoj estas signifaj, ĉar lingvomodelo povas referenci tutan instruplanon kaj akceli la lernadon. Kodigado, datuma analizo kaj datumscienco ankaŭ estas atenditaj esti tre influitaj de ĉi tiuj progresoj.
Unu el la plej ekscitaj perspektivoj estas konekti grandajn lingvajn modelojn al ekzistantaj firmaaj datumoj, kiel klientaj informoj aŭ merkataj datumoj. Ĉi tiu integriĝo kun altnivelaj API kiel la API de Meta aŭ la API de Google promesas eksponencan progreson en datuma analizo kaj datumscienco.
Kiel Konstrui Retpaĝon (Demonstraĵo)
Nuntempe, Langchain disponeblas kiel Python kaj JavaScript-Pakoj.
Ni povas krei pruvan Retejan Apon uzante Streamlit, LangChain, kaj la OpenAI GPT-3-modelon por efektivigi la LangChain-koncepton.
Sed unue, ni devas instali kelkajn dependecojn, inkluzive de Streamlit, LangChain kaj OpenAI.
Pre-requisitoj
Fluelumigita: Populara Python-pakaĵo por krei datumscienco-rilatajn retprogramojn
OpenAI: Aliro al la lingvomodelo GPT-3 de OpenAI estas necesa.
Por instali ĉi tiujn dependecojn, uzu la jenajn komandojn en cmd:
pip install streamlit
pip install langchain
pip install openai
Importi Pakojn
Ni komencas importante la postulatajn pakaĵojn, kiel OpenAI, LangChain kaj Streamlit. Niaj lingvomodelaj ĉenoj estas difinitaj kaj ekzekutitaj uzante tri klasojn de LangChain: LLMChain, SimpleSequentialChain kaj PromptTemplate.
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
Baza Agordado
La struktura bazo de nia projekto tiam estis konstruita per Streamlit-sintakso. Ni donis al la apo la titolon "Kio estas VERA: Uzado de Simpla Sekvenca Ĉeno" kaj inkluzivis markdown-ligilon al la GitHub-deponejo, kiu funkciis kiel inspiro de la programo.
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
Front-End Widgets
Ni starigas la apon kun malmultaj koncernaj informoj, uzante simplan Streamlit-sintakso:
# 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")
Por aldoni antaŭfinajn fenestraĵojn
Plue, ni devas disponigi enigan fenestraĵon por permesi al niaj uzantoj enigi ajnajn demandojn.
# 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?",
)
Ĉio farita! La ĉenoj funkcias kaj funkcias!
Ni uzas diversajn ĉenojn de operacioj kune kun SimpleSequentialChain
por respondi al la demando de la uzanto. La ĉenoj estas efektivigitaj en la sekva sinsekvo kiam la uzanto elektas la "Tell me about it"
butono:
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
: kiu estas la unua paŝo en nia dukto, ricevas la demandon de la uzanto kiel enigo kaj eligo. La demando de la uzanto funkcias kiel la ŝablono de la ĉeno.- Surbaze de deklaro ligita al la demando, la
assumptions_chain
generas kuglon liston de supozoj uzante la produktaĵon de laquestion_chain
kiel enigo. LaLLMChain
kajOpenAI
modelo de LangChain estis uzata por konstrui la deklaron. La uzanto estas taskigita krei liston de la supozoj kiuj estis faritaj por produkti la deklaron uzante la ŝablonon por ĉi tiu ĉeno. - Surbaze de la eliroj de la
question_chain
kajassumptions_chain
, lafact_checker_chain
generas liston de asertoj en formo de kuglopunktoj. La asertoj estas produktitaj uzante laOpenAI
modelo kajLLMChain
de LangChain. La uzanto estas taskita determini ĉu ĉiu aserto estas preciza aŭ malĝusta kaj provizi pravigon por tiuj, kiuj estas. - la
answer_chain
uzas la eligojn de laquestion_chain
,assumptions_chain
Kajfact_checker_chain
kiel enigaĵoj por krei respondon al la demando de la uzanto uzante la datenojn produktitajn per la pli fruaj ĉenoj. La ŝablono por ĉi tiu ĉeno petas, ke la uzanto respondu al la unua demando uzante la faktojn kiuj estis kreitaj. - Por liveri la finfinan respondon al la enketo de la uzanto bazita sur la informoj produktitaj de la pli fruaj ĉenoj, ni integras ĉi tiujn ĉenojn en la ĝeneralan ĉenon. Post kiam la ĉenoj estas kompletigitaj, ni uzas
st.success()
por montri al la uzanto la solvon.
konkludo
Ni povas simple kunĉenigi malsamajn lingvajn modelajn agojn por krei pli komplikajn duktojn uzante la SimpleSequentialChain
modulo de LangChain. Por ampleksa vario de NLP-aplikoj, inkluzive de babilrotoj, demand-kaj-respondaj sistemoj kaj lingvotradukaj iloj, tio povas esti sufiĉe helpema.
La brileco de LangChain troviĝas en sia kapablo abstrakti, kio ebligas al la uzanto koncentriĝi pri la nuna afero prefere ol la specifaĵoj de lingvomodelado.
LangChain faras la procezon de kreado de altnivelaj lingvomodeloj pli afabla proponante antaŭtrejnitajn modelojn kaj elekton de ŝablonoj.
Ĝi donas al vi la eblon agordi la lingvomodelojn uzante siajn proprajn datumojn, faciligante personecigi la lingvomodelojn. Tio ebligas la evoluon de pli precizaj, domajno-specifaj modeloj kiuj, por antaŭfiksita tasko, superas la edukitajn modelojn.
la SimpleSequentialChain
modulo kaj aliaj trajtoj de LangChain faras ĝin efika ilo por rapide disvolvi kaj disfaldi kompleksajn NLP-sistemojn.
Lasi Respondon