Kaip „LangChain“ pridėti atmintį ir agentui, ir jo įrankiams?

Kaip Langchain Prideti Atminti Ir Agentui Ir Jo Irankiams



„LangChain“ suteikia visus reikalingus įrankius agentams sukurti, kad būtų galima kontroliuoti informacijos gavimo vartotojui procesą. Šie įrankiai yra būtini kuriant agentą, nes jie valdo užduotis naudodami skirtingus įrankius. Agentai taip pat manipuliuoja šiais įrankiais, kad atliktų veiksmus ir įgyvendintų visas veiklas. Ji žino, koks įrankis reikalingas darbui ir kada jį priskirti konkrečiai užduočiai atlikti.

Greitas kontūras

Šis įrašas parodys šiuos dalykus:

Kaip „LangChain“ pridėti atmintį ir agentui, ir jo įrankiams?

Pridėjus agentams ir įrankiams atmintį, jie gali geriau dirbti su galimybe naudoti modelio pokalbių istoriją. Naudodamas atmintį agentas gali efektyviai nuspręsti, kurį įrankį ir kada įdiegti. Pageidautina naudoti ' Tik skaitymo atmintis “ tiek agentams, tiek įrankiams, todėl jie negalės jo keisti. Norėdami sužinoti, kaip pridėti atminties tiek agentams, tiek įrankiams „LangChain“, atlikite nurodytus veiksmus:







1 veiksmas: „Frameworks“ diegimas

Visų pirma, įdiekite langchain-eksperimentinis modulį, kad gautų jo priklausomybes kuriant kalbos modelius ir agento įrankius. LangChain eksperimentinis yra modulis, kuris gauna priklausomybes kuriant modelius, kurie dažniausiai naudojami eksperimentams ir bandymams:



pip įdiegti langchain - eksperimentinis



Gauti google-paieškos rezultatai moduliai su OpenAI priklausomybėmis, kad gautumėte aktualiausius atsakymus iš interneto:





pip įdiegti openai google - Paieška - rezultatus

2 veiksmas: aplinkos nustatymas

Norint sukurti modelį, kuris gauna atsakymus iš interneto, reikia nustatyti aplinką naudojant OpenAI ir SerpAPi raktai:



importuoti tu
importuoti gauti pasą

tu. maždaug [ „OPENAI_API_KEY“ ] = gauti pasą. gauti pasą ( „OpenAI API raktas“: )
tu. maždaug [ 'SERPAPI_API_KEY' ] = gauti pasą. gauti pasą ( 'Serpapi API raktas:' )

3 veiksmas: bibliotekų importavimas

Nustatę aplinkas, importuokite bibliotekas, kad sukurtumėte agento įrankius ir papildomą atmintį, kad būtų galima su jomis integruoti. Šis kodas naudoja agentus, atmintį, llms, grandines, raginimus ir komunalines paslaugas, kad gautų reikiamas bibliotekas:

iš langchain. agentai importuoti ZeroShotAgent , Įrankis , Agentas Vykdytojas
iš langchain. atmintis importuoti ConversationBufferMemory , ReadOnlySharedMemory
iš langchain. llms importuoti OpenAI
#gaukite biblioteką dėl grandinės kūrimas naudojant „LangChain“.
iš langchain. grandines importuoti LLMCchain
iš langchain. raginimai importuoti PromptTemplate
#gaukite biblioteką dėl gauti informaciją iš interneto
iš langchain. Komunalinės paslaugos importuoti SerpAPIWrapper

4 veiksmas: pridėkite tik skaitymo atmintį

Sukonfigūruokite agento šabloną, kad galėtumėte pradėti atlikti užduotis, kai tik vartotojas pateikia įvestį. Po to pridėkite „ConversationBufferMemory()“ išsaugoti modelio pokalbių istoriją ir inicijuoti „ReadOnlyMemory“ agentams ir jų įrankiams:

šabloną = '' „Tai pokalbis tarp žmogaus ir boto:

{chat_history}
#nustatykite tikslios ir paprastos santraukos ištraukimo struktūrą
Apibendrinkite {input} pokalbį:
''

paraginti = PromptTemplate ( įvesties_kintamieji = [ 'įvestis' , 'pokalbių_istorija' ] , šabloną = šabloną )
atmintis = ConversationBufferMemory ( atminties_raktas = 'pokalbių_istorija' )
tik skaitymo atmintis = ReadOnlySharedMemory ( atmintis = atmintis )
#suvestinė grandinė, skirta integruoti visus komponentus dėl gauti pokalbio santrauką
santraukos_grandinė = LLMCchain (
llm = OpenAI ( ) ,
paraginti = paraginti ,
žodinis = Tiesa ,
atmintis = tik skaitymo atmintis ,
)

5 veiksmas: įrankių nustatymas

Dabar nustatykite tokius įrankius kaip paieška ir santrauka, kad gautumėte atsakymą iš interneto kartu su pokalbio santrauka:

Paieška = SerpAPIWrapper ( )
įrankiai = [
Įrankis (
vardas = 'Paieška' ,
func = Paieška. paleisti ,
apibūdinimas = „tinkami atsakymai į tikslines užklausas apie naujausius įvykius“ ,
) ,
Įrankis (
vardas = 'Santrauka' ,
func = santraukos_grandinė. paleisti ,
apibūdinimas = 'padeda apibendrinti pokalbį, o įvestis į šį įrankį turėtų būti eilutė, nurodanti, kas skaitys šią santrauką' ,
) ,
]

6 veiksmas: agento kūrimas

Sukonfigūruokite agentą, kai tik įrankiai bus paruošti atlikti reikiamas užduotis ir išgauti atsakymus iš interneto. „ priešdėlis ' kintamasis vykdomas prieš agentams priskiriant bet kokią užduotį įrankiams ir ' priesaga “ vykdomas po to, kai įrankiai ištraukia atsakymą:

priešdėlis = '' „Pasikalbėkite su žmogumi ir kuo geriau atsakykite į šiuos klausimus naudodami šiuos įrankius: ''
priesaga = '' 'Pradėkite!'
#struktūra dėl agentas, kad pradėtų naudoti įrankius naudojant atmintį
{ pokalbių_istorija }
Klausimas : { įvestis }
{ agent_scratchpad } ''

prompt = ZeroShotAgent.create_prompt(
#configure raginimo šablonus, kad suprastumėte klausimo kontekstą
įrankiai,
priešdėlis = priešdėlis,
priesaga = priesaga,
input_variables=['
įvestis ', ' pokalbių_istorija ', ' agent_scratchpad '],
)

1 būdas: „ReadOnlyMemory“ naudojimas

Kai agentas yra nustatytas vykdyti įrankius, modelis su ReadOnlyMemory yra pageidaujama būdas sukurti ir vykdyti grandines atsakymams gauti, o procesas yra toks:

1 žingsnis: grandinės kūrimas

Pirmasis šio metodo žingsnis yra sukurti grandinę ir vykdytoją „ZeroShotAgent()“ su savo argumentais. The 'LLMChain()' naudojamas ryšiui tarp visų kalbos modelio pokalbių sukurti naudojant llm ir greitus argumentus. Agentas kaip argumentą naudoja llm_chain, tools ir verbose ir sukuria agent_chain, kad vykdytų ir agentus, ir įrankius su atmintimi:

llm_chain = LLMCchain ( llm = OpenAI ( temperatūros = 0 ) , paraginti = paraginti )
agentas = ZeroShotAgent ( llm_chain = llm_chain , įrankiai = įrankiai , žodinis = Tiesa )
agento_grandinė = Agentas Vykdytojas. from_agent_and_tools (
agentas = agentas , įrankiai = įrankiai , žodinis = Tiesa , atmintis = atmintis
)

2 veiksmas: grandinės išbandymas

Paskambinkite į agento_grandinė naudodami run() metodą, norėdami užduoti klausimą iš interneto:

agento_grandinė. paleisti ( įvestis = 'Kas yra LangChain' )

Agentas iš interneto ištraukė atsakymą naudodamas paieškos įrankius:

Vartotojas gali užduoti neaiškų tolesnį klausimą, kad patikrintų prie agento prijungtą atmintį:

agento_grandinė. paleisti ( įvestis = 'Kas jį sukūrė?' )

Agentas panaudojo ankstesnį pokalbį, kad suprastų klausimų kontekstą, ir gavo atsakymus, kaip parodyta šioje ekrano kopijoje:

Agentas naudoja įrankį (summary_chain), kad ištrauktų visų atsakymų, anksčiau ištrauktų naudodamas agento atmintį, santrauką:

agento_grandinė. paleisti (
įvestis = 'Ačiū! Apibendrinkite pokalbį, mano 5 metų vaikui'
)

Išvestis
Anksčiau užduotų klausimų santrauka 5 metų vaikui rodoma šioje ekrano kopijoje:

3 veiksmas: patikrinkite atmintį

Išspausdinkite buferinę atmintį, kad ištrauktumėte joje saugomus pokalbius naudodami šį kodą:

spausdinti ( agento_grandinė. atmintis . buferis )

Pokalbiai teisinga tvarka be jokių pakeitimų buvo rodomi šiame fragmente:

2 būdas: tos pačios atminties naudojimas tiek agentui, tiek įrankiams

Antrasis metodas, kurio platforma nerekomenduoja, yra buferinės atminties naudojimas tiek agentams, tiek įrankiams. Įrankiai gali pakeisti atmintyje saugomus pokalbius, kurie gali grąžinti klaidingus rezultatus dideliuose pokalbiuose:

1 žingsnis: grandinės kūrimas

Naudodami visą šablono kodą, kad sukurtumėte agentų įrankius ir grandines su nedideliu pakeitimu, nes ReadOnlyMemory šį kartą nepridėta:

šabloną = '' „Tai pokalbis tarp žmogaus ir boto:

{chat_history}

Parašykite pokalbio, skirto {input}, santrauką:
''
#sukurkite pokalbio struktūrą sąsaja naudodami raginimo šabloną, pridėdami atmintį su grandine
paraginti = PromptTemplate ( įvesties_kintamieji = [ 'įvestis' , 'chat_history' ] , šabloną = šabloną )
atmintis = ConversationBufferMemory ( atminties_raktas = 'chat_history' )
santraukos_grandinė = LLMCchain (
llm = OpenAI ( ) ,
paraginti = paraginti ,
žodinis = Tiesa ,
atmintis = atmintis ,
)
#sukurkite įrankius ( paieška ir santrauka ) dėl konfigūruoti agentus
Paieška = SerpAPIWrapper ( )
įrankiai = [
Įrankis (
vardas = 'Paieška' ,
func = Paieška. paleisti ,
apibūdinimas = „tinkami atsakymai į tikslines užklausas apie naujausius įvykius“ ,
) ,
Įrankis (
vardas = 'Santrauka' ,
func = santraukos_grandinė. paleisti ,
apibūdinimas = 'padeda gauti pokalbio santrauką ir reikia įvesties į šį įrankį eilutės, nurodančios, kas skaitys šią santrauką' ,
) ,
]
#paaiškinkite veiksmus dėl agentas naudoti priemones informacijai išgauti dėl pokalbis
priešdėlis = '' „Kalbėkitės su žmogumi, atsakykite į klausimus geriausiu įmanomu būdu naudodami šiuos įrankius: ''
priesaga = '' 'Pradėkite!'
#struktūra dėl agentas, kad pradėtų naudoti įrankius naudojant atmintį
{ pokalbių_istorija }
Klausimas : { įvestis }
{ agent_scratchpad } ''

prompt = ZeroShotAgent.create_prompt(
#configure raginimo šablonus, kad suprastumėte klausimo kontekstą
įrankiai,
priešdėlis = priešdėlis,
priesaga = priesaga,
input_variables=['
įvestis ', ' pokalbių_istorija ', ' agent_scratchpad '],
)
#integruokite visus komponentus kurdami agento vykdytoją
llm_chain = LLMChain(llm = OpenAI (temperatūra = 0), raginimas = raginimas)
agentas = ZeroShotAgent(llm_chain=llm_chain, įrankiai=įrankiai, verbose=True)
agent_chain = AgentExecutor.from_agent_and_tools(
agentas=agentas, įrankiai=įrankiai, verbose=tiesa, atmintis=atmintis
)

2 veiksmas: grandinės išbandymas

Paleiskite šį kodą:

agento_grandinė. paleisti ( įvestis = 'Kas yra LangChain' )

Atsakymas sėkmingai rodomas ir išsaugomas atmintyje:

Užduokite tolesnį klausimą nepateikdami daug konteksto:

agento_grandinė. paleisti ( įvestis = 'Kas jį sukūrė?' )

Agentas naudoja atmintį, kad suprastų klausimą, jį transformuodamas ir tada išspausdina atsakymą:

Gaukite pokalbio santrauką naudodami prie agento prijungtą atmintį:

agento_grandinė. paleisti (
įvestis = 'Ačiū! Apibendrinkite pokalbį, mano 5 metų vaikui'
)

Išvestis
Santrauka buvo sėkmingai ištraukta ir iki šiol viskas atrodo taip pat, tačiau pakeitimas įvyksta kitame žingsnyje:

3 veiksmas: patikrinkite atmintį

Pokalbių pranešimų ištraukimas iš atminties naudojant šį kodą:

spausdinti ( agento_grandinė. atmintis . buferis )

Įrankis pakeitė istoriją pridėdamas kitą klausimą, kuris nebuvo užduotas iš pradžių. Taip atsitinka, kai modelis supranta klausimą naudodamas a savęs paklausti klausimas. Įrankis klaidingai mano, kad jo klausia vartotojas, ir traktuoja tai kaip atskirą užklausą. Taigi į atmintį įtraukiamas papildomas klausimas, kuris vėliau bus naudojamas norint gauti pokalbio kontekstą:

Tai kol kas viskas.

Išvada

Norėdami pridėti atminties prie agento ir jo įrankių LangChain, įdiekite modulius, kad gautumėte jų priklausomybes ir importuotų iš jų bibliotekas. Po to sukurkite pokalbio atmintį, kalbos modelį, įrankius ir agentą, kad pridėtumėte atmintį. The rekomenduojamas metodas Norėdami pridėti atmintį, agentui ir jos įrankiams saugoti pokalbių istorijai naudojama ReadOnlyMemory. Vartotojas taip pat gali naudoti pokalbio atmintis tiek agentams, tiek įrankiams. Bet jie gauna sutrikęs kartais ir pakeisti pokalbius atmintyje.