Kuinka lisätä muistia sekä agenttiin että sen työkaluihin LangChainissa?

Kuinka Lisata Muistia Seka Agenttiin Etta Sen Tyokaluihin Langchainissa



LangChain tarjoaa kaikki tarvittavat työkalut agenttien rakentamiseen, jotka ohjaavat tiedon poimintaprosessia käyttäjälle. Nämä työkalut ovat välttämättömiä agentin rakentamiseen, koska ne hallitsevat tehtäviä eri työkaluilla. Agentit myös käsittelevät näitä työkaluja suorittaakseen vaiheet ja toteuttaakseen kaikki toiminnot. Se tietää, mitä työkalua työhön tarvitaan ja milloin se tulee määrittää kyseiseen tehtävään.

Quick Outline

Tämä viesti osoittaa seuraavaa:

Kuinka lisätä muistia sekä agenttiin että sen työkaluihin LangChainissa?

Muistin lisääminen agenteille ja työkaluille antaa heille mahdollisuuden työskennellä paremmin mallin chat-historian käytön ansiosta. Muistin avulla agentti voi tehokkaasti päättää, mikä työkalu ottaa käyttöön ja milloin. On suositeltavaa käyttää ' Lukumuisti ” sekä agenteille että työkaluille, jotta he eivät voi muokata sitä. Jos haluat oppia lisäämään muistia sekä agenteihin että työkaluihin LangChainissa, käy läpi luetellut vaiheet:







Vaihe 1: Kehysten asentaminen

Ensinnäkin asenna langchain-kokeellinen moduuli saada sen riippuvuudet kielimallien ja työkalujen rakentamiseen agentille. LangChain experimental on moduuli, joka saa riippuvuudet rakennusmalleille, joita käytetään enimmäkseen kokeissa ja testeissä:



pip asennus langchain - kokeellinen



Hanki google-hakutulokset OpenAI-riippuvuuksilla varustetut moduulit saadaksesi olennaisimmat vastaukset Internetistä:





pip asennus openai google - Hae - tuloksia

Vaihe 2: Ympäristöjen määrittäminen

Internetistä vastauksia saavan mallin rakentaminen edellyttää, että ympäristöt asetetaan käyttämällä OpenAI ja SerpAPi avaimet:



tuonti sinä
tuonti getpass

sinä. suunnilleen [ 'OPENAI_API_KEY' ] = getpass. getpass ( 'OpenAI API Key:' )
sinä. suunnilleen [ 'SERPAPI_API_KEY' ] = getpass. getpass ( 'Serpapi API Key:' )

Vaihe 3: Kirjastojen tuonti

Kun olet määrittänyt ympäristöt, tuo kirjastot luodaksesi työkalut agentille ja lisämuistin integroitavaksi niihin. Seuraava koodi käyttää agentteja, muistia, llms:iä, ketjuja, kehotteita ja apuohjelmia tarvittavien kirjastojen hankkimiseen:

langchainista. agentit tuonti ZeroShotAgent , Työkalu , AgentExecutor
langchainista. muisti tuonti ConversationBufferMemory , ReadOnlySharedMemory
langchainista. llms tuonti OpenAI
#hanki kirjasto varten ketjun rakentaminen LangChainilla
langchainista. ketjut tuonti LLMChain
langchainista. kehotteita tuonti PromptTemplate
#hanki kirjasto varten saada tietoa Internetistä
langchainista. apuohjelmia tuonti SerpAPIWrapper

Vaihe 4: Lisää ReadOnlyMemory

Määritä malli agentille, jotta voit aloittaa tehtävien suorittamisen heti, kun käyttäjä antaa syötteen. Lisää sen jälkeen 'ConversationBufferMemory()' tallentaaksesi mallin keskusteluhistorian ja alustaaksesi sen 'Lukumuisti' agenteille ja sen työkaluille:

sapluuna = '' 'Tämä on keskustelu ihmisen ja botin välillä:

{chat_history}
#asettaa rakenteen tarkan ja helpon yhteenvedon purkamista varten
Tee yhteenveto keskustelusta {input}:
'
''

kehote = PromptTemplate ( input_variables = [ 'syöttö' , 'chat_history' ] , sapluuna = sapluuna )
muisti = ConversationBufferMemory ( muisti_avain = 'chat_history' )
lukumuisti = ReadOnlySharedMemory ( muisti = muisti )
#yhteenvetoketju yhdistää kaikki komponentit varten saada keskustelun yhteenveto
yhteenveto_ketju = LLMChain (
llm = OpenAI ( ) ,
kehote = kehote ,
monisanainen = Totta ,
muisti = lukumuisti ,
)

Vaihe 5: Työkalujen määrittäminen

Määritä nyt työkalut, kuten haku ja yhteenveto, saadaksesi vastauksen Internetistä keskustelun yhteenvedon ohella:

Hae = SerpAPIWrapper ( )
työkaluja = [
Työkalu (
nimi = 'Hae' ,
func = Hae. juosta ,
kuvaus = 'oikeat vastaukset kohdennettuihin kyselyihin viimeaikaisista tapahtumista' ,
) ,
Työkalu (
nimi = 'Yhteenveto' ,
func = yhteenveto_ketju. juosta ,
kuvaus = 'auttaa tiivistämään keskustelua ja syötteen tähän työkaluun tulee olla merkkijono, joka edustaa sitä, kuka lukee tämän yhteenvedon' ,
) ,
]

Vaihe 6: Agentin rakentaminen

Määritä agentti heti, kun työkalut ovat valmiita suorittamaan vaaditut tehtävät ja poimimaan vastaukset Internetistä. ' etuliite '-muuttuja suoritetaan ennen kuin agentit osoittavat tehtäviä työkaluille ja ' pääte ' suoritetaan sen jälkeen, kun työkalut ovat poimineet vastauksen:

etuliite = '' 'Keskustele ihmisen kanssa ja vastaa seuraaviin kysymyksiin mahdollisimman hyvin käyttämällä seuraavia työkaluja:' ''
pääte = '' 'Alkaa!'
#rakenne varten agentti aloittaa työkalujen käytön muistin käytön aikana
{ chat_history }
Kysymys : { syöttö }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure kehotemalleja ymmärtääksesi kysymyksen kontekstin
työkalut,
etuliite=etuliite,
suffiksi=liite,
input_variables=['
syöttö ', ' chat_history ', ' agent_scratchpad '],
)

Tapa 1: Käytä vain lukumuistia

Kun agentti on asetettu suorittamaan työkalut, ReadOnlyMemory-malli on se mieluummin tapa rakentaa ja suorittaa ketjut vastausten hakemiseksi ja prosessi on seuraava:

Vaihe 1: Ketjun rakentaminen

Ensimmäinen askel tässä menetelmässä on rakentaa ketju ja toteuttaja 'ZeroShotAgent()' argumentteineen. The 'LLMChain()' käytetään muodostamaan yhteys kaikkien keskustelujen välille kielimallissa käyttämällä llm- ja prompt-argumentteja. Agentti käyttää parametria llm_chain, tools ja verbose argumenttina ja rakentaa agent_chainin suorittaakseen sekä agentit että työkalut muistilla:

llm_chain = LLMChain ( llm = OpenAI ( lämpötila = 0 ) , kehote = kehote )
agentti = ZeroShotAgent ( llm_chain = llm_chain , työkaluja = työkaluja , monisanainen = Totta )
agenttiketju = AgentExecutor. from_agent_and_tools (
agentti = agentti , työkaluja = työkaluja , monisanainen = Totta , muisti = muisti
)

Vaihe 2: Ketjun testaus

Soita agenttiketju käyttämällä run()-menetelmää kysyäksesi kysymyksen Internetistä:

agenttiketju. juosta ( syöttö = 'Mikä on LangChain' )

Agentti on poiminut vastauksen Internetistä hakutyökalujen avulla:

Käyttäjä voi kysyä epäselvän jatkokysymyksen agenttiin liitetyn muistin testaamiseksi:

agenttiketju. juosta ( syöttö = 'Kuka sen on kehittänyt?' )

Agentti on käyttänyt edellistä keskustelua ymmärtääkseen kysymysten kontekstin ja hakenut vastaukset seuraavan kuvakaappauksen mukaisesti:

Agentti käyttää työkalua (summary_chain) poimimaan yhteenvedon kaikista aiemmin agentin muistia käyttävistä vastauksista:

agenttiketju. juosta (
syöttö = 'Kiitos! Tee yhteenveto keskustelusta 5-vuotiaalleni'
)

Lähtö
Yhteenveto aiemmin kysytyistä kysymyksistä on esitetty 5-vuotiaalle seuraavassa kuvakaappauksessa:

Vaihe 3: Muistin testaus

Tulosta puskurimuisti purkaaksesi siihen tallennetut keskustelut käyttämällä seuraavaa koodia:

Tulosta ( agenttiketju. muisti . puskuri )

Chatit oikeassa järjestyksessä ilman muutoksia on esitetty seuraavassa katkelmassa:

Tapa 2: Käytä samaa muistia sekä agentille että työkaluille

Toinen menetelmä, jota alusta ei suosittele, on puskurimuistin käyttäminen sekä agenteille että työkaluille. Työkalut voivat muuttaa muistiin tallennettuja keskusteluja, jotka voivat palauttaa vääriä tuloksia suurissa keskusteluissa:

Vaihe 1: Ketjun rakentaminen

Mallin täydellisen koodin käyttäminen agenttien työkalujen ja ketjujen rakentamiseen pienellä muutoksella, koska ReadOnlyMemoryta ei lisätä tällä kertaa:

sapluuna = '' 'Tämä on keskustelu ihmisen ja botin välillä:

{chat_history}

Kirjoita keskustelun yhteenveto kohteelle {input}:
'
''
#rakenna chatin rakenne käyttöliittymä käyttämällä kehotemallia lisäämällä muistia ketjulla
kehote = PromptTemplate ( input_variables = [ 'syöttö' , 'chat_history' ] , sapluuna = sapluuna )
muisti = ConversationBufferMemory ( muisti_avain = 'chat_history' )
yhteenveto_ketju = LLMChain (
llm = OpenAI ( ) ,
kehote = kehote ,
monisanainen = Totta ,
muisti = muisti ,
)
#rakenna työkalut ( haku ja yhteenveto ) varten agenttien määrittäminen
Hae = SerpAPIWrapper ( )
työkaluja = [
Työkalu (
nimi = 'Hae' ,
func = Hae. juosta ,
kuvaus = 'oikeat vastaukset kohdennettuihin kyselyihin viimeaikaisista tapahtumista' ,
) ,
Työkalu (
nimi = 'Yhteenveto' ,
func = yhteenveto_ketju. juosta ,
kuvaus = 'auttaa hyödyllistä saada yhteenveto keskustelusta ja tarvitset merkkijonosyöttöä tähän työkaluun, joka kertoo, kuka lukee tämän yhteenvedon' ,
) ,
]
#selitä vaiheet varten agentti käyttää työkaluja tiedon poimimiseen varten keskustelu
etuliite = '' 'Keskustele ihmisen kanssa ja vastaa kysymyksiin parhaalla mahdollisella tavalla käyttämällä seuraavia työkaluja:' ''
pääte = '' 'Alkaa!'
#rakenne varten agentti aloittaa työkalujen käytön muistin käytön aikana
{ chat_history }
Kysymys : { syöttö }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure kehotemalleja ymmärtääksesi kysymyksen kontekstin
työkalut,
etuliite=etuliite,
suffiksi=liite,
input_variables=['
syöttö ', ' chat_history ', ' agent_scratchpad '],
)
#integroi kaikki komponentit samalla kun rakennat agentin toteuttajaa
llm_ketju = LLMChain(llm=OpenAI(lämpötila=0), kehote=kehote)
agentti = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)
agent_chain = AgentExecutor.from_agent_and_tools(
agentti=agentti, työkalut=työkalut, verbose=tosi, muisti=muisti
)

Vaihe 2: Ketjun testaus

Suorita seuraava koodi:

agenttiketju. juosta ( syöttö = 'Mikä on LangChain' )

Vastaus näytetään onnistuneesti ja tallennetaan muistiin:

Esitä jatkokysymys kertomatta paljon kontekstista:

agenttiketju. juosta ( syöttö = 'Kuka sen on kehittänyt?' )

Agentti käyttää muistia ymmärtääkseen kysymyksen muuntamalla sen ja tulostaa sitten vastauksen:

Hanki yhteenveto keskustelusta agenttiin liitetyn muistin avulla:

agenttiketju. juosta (
syöttö = 'Kiitos! Tee yhteenveto keskustelusta 5-vuotiaalleni'
)

Lähtö
Yhteenveto on purettu onnistuneesti, ja tähän asti kaikki näyttää olevan ennallaan, mutta muutos tulee seuraavassa vaiheessa:

Vaihe 3: Muistin testaus

Chat-viestien purkaminen muistista seuraavalla koodilla:

Tulosta ( agenttiketju. muisti . puskuri )

Työkalu on muokannut historiaa lisäämällä toisen kysymyksen, jota ei kysytty alun perin. Tämä tapahtuu, kun malli ymmärtää kysymyksen käyttämällä a itse kysyä kysymys. Työkalu luulee virheellisesti, että käyttäjä kysyy sitä ja käsittelee sitä erillisenä kyselynä. Joten se lisää muistiin myös tämän lisäkysymyksen, jota sitten käytetään keskustelun kontekstin saamiseksi:

Tässä kaikki tältä erää.

Johtopäätös

Jos haluat lisätä muistia sekä agenttiin että sen työkaluihin LangChainissa, asenna moduulit saadakseen niiden riippuvuudet ja tuomalla niistä kirjastoja. Sen jälkeen luo keskustelumuisti, kielimalli, työkalut ja agentti muistin lisäämiseksi. The suositeltu menetelmä Muistin lisääminen käyttää ReadOnlyMemorya agentille ja sen työkaluille keskusteluhistorian tallentamiseen. Käyttäjä voi myös käyttää keskustelumuisti sekä agenteille että työkaluille. Mutta he saavat hämmentynyt joskus ja muuta muistissa olevia keskusteluja.