Ang LangChain ay isang cutting-edge at matatag na tool na binuo upang gamitin ang kapangyarihan ng Large Language Models (LLMs).
Ang mga LLM na ito ay nagtataglay ng mga kahanga-hangang kakayahan at mahusay na kayang harapin ang isang malawak na hanay ng mga gawain. Gayunpaman, mahalagang tandaan na ang kanilang lakas ay nakasalalay sa kanilang pangkalahatang katangian kaysa sa malalim na kadalubhasaan sa domain. Ang katanyagan nito ay mabilis na lumago mula nang ipakilala ang GPT-4.
Bagama't mahusay ang mga LLM sa paghawak ng iba't ibang gawain, maaari silang makaharap ng mga limitasyon pagdating sa pagbibigay ng mga partikular na sagot o pagharap sa mga gawain na nangangailangan ng malalim na kaalaman sa domain. Isaalang-alang, halimbawa, ang paggamit ng LLM upang sagutin ang mga tanong o magsagawa ng mga gawain sa loob ng mga espesyal na larangan tulad ng medisina o batas.
Bagama't tiyak na makakasagot ang LLM sa mga pangkalahatang katanungan tungkol sa mga larangang ito, maaaring mahirapan itong mag-alok ng mas detalyado o nuanced na mga sagot na nangangailangan ng espesyal na kaalaman o kadalubhasaan.
Ito ay dahil ang mga LLM ay sinanay sa napakaraming data ng text mula sa magkakaibang pinagmulan, na nagbibigay-daan sa kanila na matuto ng mga pattern, maunawaan ang konteksto, at makabuo ng magkakaugnay na mga tugon. Gayunpaman, ang kanilang pagsasanay ay hindi karaniwang may kinalaman sa domain-specific o specialized na pagkuha ng kaalaman sa parehong lawak ng mga eksperto ng tao sa mga larangang iyon.
Samakatuwid, habang ang LangChain, kasabay ng mga LLM, ay maaaring maging isang napakahalagang tool para sa malawak na hanay ng mga gawain, mahalagang kilalanin na ang malalim na kadalubhasaan sa domain ay maaaring kailangan pa rin sa ilang partikular na sitwasyon. Ang mga dalubhasa ng tao na may espesyal na kaalaman ay makakapagbigay ng kinakailangang lalim, nuanced na pag-unawa, at mga insight na tukoy sa konteksto na maaaring higit pa sa mga kakayahan ng mga LLM lamang.
Ipapayo namin ang pagtingin sa LangChain's docs o GitHub repository para sa mas masusing pag-unawa sa mga karaniwang kaso ng paggamit nito. Lubos na ipinapayo na makakuha ng mas malaking larawan ng bundle na ito.
Paano ito Magtrabaho?
Upang maunawaan ang layunin at gawain ng LangChain, isaalang-alang natin ang isang praktikal na halimbawa. Alam namin na ang GPT-4 ay may kahanga-hangang pangkalahatang kaalaman at maaaring magbigay ng maaasahang mga sagot sa isang malawak na hanay ng mga tanong.
Gayunpaman, paano kung gusto namin ng partikular na impormasyon mula sa aming sariling data, gaya ng personal na dokumento, libro, PDF file, o pagmamay-ari na database?
Pinapayagan tayo ng LangChain na kumonekta a malaking modelo ng wika tulad ng GPT-4 sa aming sariling mga mapagkukunan ng data. Higit pa ito sa simpleng pag-paste ng snippet ng text sa isang chat interface. Sa halip, maaari kaming sumangguni sa isang buong database na puno ng aming sariling data.
Sa sandaling makuha namin ang nais na impormasyon, matutulungan kami ng LangChain sa pagsasagawa ng mga partikular na aksyon. Halimbawa, maaari naming turuan itong magpadala ng email na naglalaman ng ilang partikular na detalye.
Para makamit ito, sinusunod namin ang pipeline approach gamit ang LangChain. Una, kinukuha namin ang dokumentong gusto namin modelo ng wika upang sanggunian at hatiin ito sa mas maliliit na tipak. Ang mga tipak na ito ay iniimbak bilang mga embed, na vector representasyon ng teksto, sa isang Vector Database.
Sa setup na ito, maaari tayong bumuo ng mga application ng modelo ng wika na sumusunod sa isang karaniwang pipeline: nagtatanong ang isang user ng isang paunang tanong, na pagkatapos ay ipinadala sa modelo ng wika. Ang representasyon ng vector ng tanong ay ginagamit upang magsagawa ng paghahanap ng pagkakatulad sa Vector Database, na kumukuha ng mga nauugnay na piraso ng impormasyon.
Ang mga tipak na ito ay ibabalik sa modelo ng wika, na nagbibigay-daan dito upang magbigay ng sagot o gawin ang nais na aksyon.
Pinapadali ng LangChain ang pagbuo ng mga application na alam ang data, dahil maaari nating i-reference ang sarili nating data sa isang vector store, at authentic, dahil maaari silang gumawa ng mga aksyon na lampas sa pagsagot sa mga tanong. T
nagbubukas siya ng maraming praktikal na kaso ng paggamit, partikular sa personal na tulong, kung saan ang isang malaking modelo ng wika ay maaaring humawak ng mga gawain tulad ng pag-book ng mga flight, paglilipat ng pera, o pagtulong sa mga bagay na may kaugnayan sa buwis.
Bilang karagdagan, ang mga implikasyon para sa pag-aaral at pag-aaral ng mga bagong paksa ay makabuluhan, dahil ang isang modelo ng wika ay maaaring sumangguni sa isang buong syllabus at mapabilis ang proseso ng pagkatuto. Ang coding, pagsusuri ng data, at agham ng data ay inaasahan din na malaki ang impluwensya ng mga pagsulong na ito.
Isa sa mga pinakakapana-panabik na prospect ay ang pagkonekta ng malalaking modelo ng wika sa umiiral nang data ng kumpanya, gaya ng impormasyon ng customer o data ng marketing. Ang pagsasamang ito sa mga advanced na API tulad ng Meta's API o Google's API ay nangangako ng exponential progress sa data analytics at data science.
Paano Gumawa ng Webpage (Demo)
Sa kasalukuyan, ang Langchain ay magagamit bilang Python at JavaScript Packages.
Maaari kaming lumikha ng isang demonstration na Web App na gumagamit ng Streamlit, LangChain, at ang OpenAI GPT-3 na modelo upang ipatupad ang konsepto ng LangChain.
Ngunit una, dapat tayong mag-install ng ilang dependencies, kabilang ang Streamlit, LangChain, at OpenAI.
Mga pre-requisite
Streamlit: Isang sikat na Python package para sa paglikha ng mga web application na nauugnay sa data science
OpenAI: Kailangan ang access sa GPT-3 na modelo ng wika ng OpenAI.
Upang i-install ang mga dependency na ito, gamitin ang mga sumusunod na command sa cmd:
pip install streamlit
pip install langchain
pip install openai
Mag-import ng mga Package
Nagsisimula kami sa pamamagitan ng pag-import ng mga kinakailangang pakete, tulad ng OpenAI, LangChain, at Streamlit. Ang aming mga chain model ng wika ay tinukoy at isinasagawa gamit ang tatlong klase mula sa LangChain: LLMChain, SimpleSequentialChain, at PromptTemplate.
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
Pangunahing Pag-setup
Ang structural na batayan ng aming proyekto ay pagkatapos ay inilagay gamit ang Streamlit syntax. Binigyan namin ang app ng pamagat na "Ano ang TOTOO: Paggamit ng Simple Sequential Chain" at nagsama ng markdown link sa GitHub repository na nagsilbing inspirasyon ng app.
import streamlit as st
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
Mga Widget sa Front-End
Ise-set up namin ang app na may kaunting nauugnay na impormasyon, gamit ang simpleng Streamlit syntax:
# 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")
Upang magdagdag ng mga front-end na widget
Dagdag pa, kailangan naming magbigay ng input widget upang payagan ang aming mga user na magpasok ng anumang mga katanungan.
# 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?",
)
Tapos na! Nakatayo na ang mga kadena!
Gumagamit kami ng iba't ibang kadena ng mga operasyon kasama ng SimpleSequentialChain
upang tumugon sa query ng user. Isinasagawa ang mga kadena sa sumusunod na pagkakasunud-sunod kapag pinili ng user ang "Tell me about it"
button:
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
: na siyang unang hakbang sa aming pipeline, tumatanggap ng tanong ng user bilang input at output. Ang query ng user ay nagsisilbing template ng chain.- Batay sa isang pahayag na nauugnay sa tanong, ang
assumptions_chain
bumubuo ng bullet-point na listahan ng mga pagpapalagay gamit ang output mula saquestion_chain
bilang input. AngLLMChain
atOpenAI
modelo mula sa LangChain ay ginamit upang bumuo ng pahayag. Ang gumagamit ay nakatalaga sa paglikha ng isang listahan ng mga pagpapalagay na ginawa upang makagawa ng pahayag gamit ang template para sa chain na ito. - Batay sa mga output mula sa
question_chain
atassumptions_chain
, angfact_checker_chain
bumubuo ng isang listahan ng mga assertion sa anyo ng mga bullet point. Ang mga claim ay ginawa gamit angOpenAI
modelo atLLMChain
mula sa LangChain. Ang gumagamit ay may tungkulin sa pagtukoy kung ang bawat claim ay tumpak o hindi tama at magbigay ng katwiran para sa mga iyon. - Ang
answer_chain
gumagamit ng mga output mula saquestion_chain
,assumptions_chain
, atfact_checker_chain
bilang mga input upang lumikha ng tugon sa tanong ng user gamit ang data na ginawa ng mga naunang chain. Hinihiling ng template para sa chain na ito na tumugon ang user sa unang query gamit ang mga katotohanang nilikha. - Upang maibigay ang pinakahuling tugon sa pagtatanong ng user batay sa impormasyong ginawa ng mga naunang chain, isinasama namin ang mga chain na ito sa pangkalahatang chain. Matapos makumpleto ang mga kadena, ginagamit namin
st.success()
upang ipakita sa gumagamit ang solusyon.
Konklusyon
Maaari lang nating pagsama-samahin ang iba't ibang mga pagkilos ng modelo ng wika upang lumikha ng mas kumplikadong mga pipeline sa pamamagitan ng paggamit ng SimpleSequentialChain
module ng LangChain. Para sa iba't ibang uri ng NLP application, kabilang ang mga chatbot, question-and-answer system, at mga tool sa pagsasalin ng wika, maaaring ito ay lubos na nakakatulong.
Ang kinang ng LangChain ay makikita sa kapasidad nitong mag-abstract, na nagbibigay-daan sa gumagamit na tumutok sa kasalukuyang isyu kaysa sa mga detalye ng pagmomodelo ng wika.
Ginagawa ng LangChain ang proseso ng paglikha ng mga sopistikadong modelo ng wika na mas madaling gamitin sa pamamagitan ng pag-aalok ng mga pre-trained na modelo at isang seleksyon ng mga template.
Nagbibigay ito sa iyo ng opsyong i-fine-tune ang mga modelo ng wika gamit ang sarili nilang data, na ginagawang simple ang pag-customize ng mga modelo ng wika. Nagbibigay-daan ito sa pagbuo ng mas tumpak, mga modelong tukoy sa domain na, para sa isang partikular na trabaho, ay higit na mahusay ang pagganap ng mga sinanay na modelo.
Ang SimpleSequentialChain
module at iba pang mga tampok ng LangChain ay ginagawa itong isang epektibong tool para sa mabilis na pagbuo at pag-deploy ng mga sopistikadong NLP system.
Mag-iwan ng Sagot