Prompt engineering
FrÃĨn noll till avancerad promptteknik med Langchain i Python

En viktig aspekt av stora sprÃĨkmodeller (LLM) ÃĪr antalet parametrar som dessa modeller anvÃĪnder fÃķr att lÃĪra sig. Ju fler parametrar en modell har, desto bÃĪttre kan den fÃķrstÃĨ relationen mellan ord och fraser. Detta innebÃĪr att modeller med miljarder parametrar har fÃķrmÃĨgan att generera olika kreativa textformat och besvara Ãķppna och utmanande frÃĨgor pÃĨ ett informativt sÃĪtt.
LLM-modeller som ChatGPT, som anvÃĪnder Transformer-modellen, ÃĪr skickliga pÃĨ att fÃķrstÃĨ och generera mÃĪnskligt sprÃĨk, vilket gÃķr dem anvÃĪndbara fÃķr tillÃĪmpningar som krÃĪver naturligt sprÃĨkfÃķrstÃĨelse. Men de ÃĪr inte utan begrÃĪnsningar, som inkluderar fÃķrÃĨldrad kunskap, ofÃķrmÃĨga att interagera med externa system, brist pÃĨ kontextfÃķrstÃĨelse och ibland genererar de trovÃĪrdiga men felaktiga eller meningslÃķsa svar, bland annat.
Att hantera dessa begrÃĪnsningar krÃĪver integration av LLM-modeller med externa datakÃĪllor och funktioner, vilket kan medfÃķra komplexitet och krÃĪva omfattande kodnings- och datahanteringsfÃĪrdigheter. Detta, i kombination med utmaningarna att fÃķrstÃĨ AI-koncept och komplexa algoritmer, bidrar till den inlÃĪrningskurva som ÃĪr fÃķrknippad med att utveckla tillÃĪmpningar med LLM-modeller.
Trots detta kan integrationen av LLM-modeller med andra verktyg fÃķr att forma LLM-baserade tillÃĪmpningar omdefiniera vÃĨr digitala landskap. Potentialen fÃķr sÃĨdana tillÃĪmpningar ÃĪr enorm, inklusive fÃķrbÃĪttring av effektivitet och produktivitet, fÃķrenkling av uppgifter, fÃķrbÃĪttring av beslutsfattande och tillhandahÃĨllande av personanpassade upplevelser.
I den hÃĪr artikeln kommer vi att dyka djupare in i dessa frÃĨgor, utforska avancerade tekniker fÃķr promptteknik med Langchain, erbjuda tydliga fÃķrklaringar, praktiska exempel och steg-fÃķr-steg-instruktioner om hur man implementerar dem.
Langchain, ett toppmodernt bibliotek, bringar bekvÃĪmlighet och flexibilitet till design, implementering och finjustering av promptrar. NÃĪr vi packar upp principerna och praktikerna fÃķr promptteknik kommer du att lÃĪra dig hur du kan utnyttja Langchains kraftfulla funktioner fÃķr att utnyttja styrkorna hos SOTA-generativa AI-modeller som GPT-4.
Att fÃķrstÃĨ promptrar
Innan vi dyker in i de tekniska aspekterna av promptteknik ÃĪr det viktigt att fÃķrstÃĨ begreppet promptrar och deras betydelse.
En âpromptâ ÃĪr en sekvens av token som anvÃĪnds som indata till en sprÃĨkmodell, som instruerar den att generera en viss typ av svar. Promptrar spelar en avgÃķrande roll i att styra modellens beteende. De kan pÃĨverka kvaliteten pÃĨ den genererade texten, och nÃĪr de ÃĪr korrekt utformade, kan de hjÃĪlpa modellen att tillhandahÃĨlla insiktsfulla, precisa och kontextspecifika resultat.
Promptteknik ÃĪr konsten och vetenskapen att designa effektiva promptrar. MÃĨlet ÃĪr att utvinna det Ãķnskade svaret frÃĨn en sprÃĨkmodell. Genom att noggrant vÃĪlja och strukturera promptrar kan man guida modellen mot att generera mer precisa och relevanta svar. I praktiken innebÃĪr detta att finjustera inmatningsfraser fÃķr att anpassa sig till modellens utbildning och strukturbias.
Sophistikeringen av promptteknik strÃĪcker sig frÃĨn enkla tekniker, som att mata modellen med relevanta nyckelord, till mer avancerade metoder som involverar designen av komplexa, strukturerade promptrar som utnyttjar modellens interna mekanismer till sin fÃķrdel.
Langchain: Det snabbast vÃĪxande promptverktyget
LangChain, lanserat i oktober 2022 av Harrison Chase, har blivit ett av de hÃķgst rankade Ãķppna kÃĪllkodsramverken pÃĨ GitHub 2023. Det erbjuder ett fÃķrenklat och standardiserat grÃĪnssnitt fÃķr att integrera stora sprÃĨkmodeller (LLM) i tillÃĪmpningar. Det erbjuder ocksÃĨ ett funktionrikt grÃĪnssnitt fÃķr promptteknik, som tillÃĨter utvecklare att experimentera med olika strategier och utvÃĪrdera sina resultat. Genom att anvÃĪnda Langchain kan du utfÃķra promptteknikuppgifter mer effektivt och intuitivt.
LangFlow fungerar som ett anvÃĪndargrÃĪnssnitt fÃķr att orkestrera LangChain-komponenter till en exekverbar flÃķdesschema, vilket mÃķjliggÃķr snabb prototypning och experimentering.

LangChain fyller en kritisk lucka i AI-utveckling fÃķr massorna. Det mÃķjliggÃķr en mÃĪngd NLP-tillÃĪmpningar, sÃĨsom virtuella assistenter, innehÃĨllsgenerering, frÃĨgesvarssystem och mer, fÃķr att lÃķsa en rad verkliga problem.
IstÃĪllet fÃķr att vara en fristÃĨende modell eller leverantÃķr fÃķrenklar LangChain interaktionen med olika modeller, vilket utÃķkar mÃķjligheterna fÃķr LLM-tillÃĪmpningar bortom begrÃĪnsningarna fÃķr ett enkelt API-anrop.
LangChains arkitektur
Â
LangChains huvudkomponenter inkluderar Model I/O, Promptmallar, Minne, Agenter och kedjor.
Model I/O
LangChain mÃķjliggÃķr en smidig anslutning till olika sprÃĨkmodeller genom att omsluta dem med ett standardiserat grÃĪnssnitt som kallas Model I/O. Detta mÃķjliggÃķr en smidig modellvÃĪxling fÃķr optimering eller bÃĪttre prestanda. LangChain stÃķder olika sprÃĨkmodellleverantÃķrer, inklusive OpenAI, HuggingFace, Azure, Fireworks och mer.
Promptmallar
Dessa anvÃĪnds fÃķr att hantera och optimera interaktioner med LLM-modeller genom att tillhandahÃĨlla koncisa instruktioner eller exempel. Att optimera promptrar fÃķrbÃĪttrar modellens prestanda, och deras flexibilitet bidrar betydligt till inmatningsprocessen.
Ett enkelt exempel pÃĨ en promptmall:
<p>from langchain.prompts import PromptTemplate
prompt = PromptTemplate(input_variables=[&quot;subject&quot;],
template=&quot;Vad ÃĪr de senaste framstegen inom {subject}-omrÃĨdet?&quot;)
print(prompt.format(subject=&quot;Naturlig sprÃĨkbehandling&quot;))</p>
NÃĪr vi fortsÃĪtter att Ãķka komplexiteten mÃķter vi mer sofistikerade mÃķnster i LangChain, sÃĨsom Reason och Act (ReAct)-mÃķnstret. ReAct ÃĪr ett viktigt mÃķnster fÃķr aktionsutfÃķrande dÃĪr agenten tilldelar en uppgift till ett lÃĪmpligt verktyg, anpassar inmatningen fÃķr det och tolkar dess utdata fÃķr att utfÃķra uppgiften. FÃķljande Python-exempel visar ett ReAct-mÃķnster. Det demonstrerar hur en prompt struktureras i LangChain, med hjÃĪlp av en serie tankar och handlingar fÃķr att resonera genom ett problem och producera ett slutligt svar:
PREFIX = &quot;&quot;&quot;Svara pÃĨ fÃķljande frÃĨga med hjÃĪlp av tillgÃĪngliga verktyg:&quot;&quot;&quot;
FORMAT_INSTRUCTIONS = &quot;&quot;&quot;FÃķlj detta format:
FrÃĨga: {input_question}
Tanke: din fÃķrsta tanke pÃĨ frÃĨgan
Handling: din valda handling frÃĨn [{tool_names}]
Handling Inmatning: din inmatning fÃķr handlingen
Observation: handlingens resultat&quot;&quot;&quot;
SUFFIX = &quot;&quot;&quot;BÃķrja!
FrÃĨga: {input}
Tanke:{agent_scratchpad}&quot;&quot;&quot;
Minne
Minne ÃĪr ett kritiskt koncept i LangChain, som mÃķjliggÃķr fÃķr LLM-modeller och verktyg att behÃĨlla information Ãķver tid. Detta beteende fÃķrbÃĪttrar prestandan fÃķr LangChain-tillÃĪmpningar genom att lagra tidigare svar, anvÃĪndarinteraktioner, miljÃķns tillstÃĨnd och agentens mÃĨl. Strategierna ConversationBufferMemory och ConversationBufferWindowMemory hjÃĪlper till att spÃĨra hela eller senaste delar av en konversation. FÃķr en mer avancerad approach mÃķjliggÃķr ConversationKGMemory-strategin att koda konversationen som en kunskapsgraf som kan matas tillbaka till promptrar eller anvÃĪndas fÃķr att fÃķrutsÃĪga svar utan att anropa LLM-modellen.
Agenter
En agent interagerar med vÃĪrlden genom att utfÃķra handlingar och uppgifter. I LangChain kombinerar agenter verktyg och kedjor fÃķr uppgiftsutfÃķrande. Den kan etablera en anslutning till den yttre vÃĪrlden fÃķr informationshÃĪmtning fÃķr att komplettera LLM-modellens kunskap, vilket Ãķvervinner deras inbyggda begrÃĪnsningar. De kan besluta att passa berÃĪkningar till en berÃĪkningsmaskin eller Python-tolk beroende pÃĨ situationen.
Agenter ÃĪr utrustade med underkomponenter:
- Verktyg: Dessa ÃĪr funktionella komponenter.
- VerktygslÃĨdor: Samlingar av verktyg.
- Agent-utfÃķrare: Detta ÃĪr utfÃķrandemekanismen som tillÃĨter att vÃĪlja mellan verktyg.
Agenter i LangChain fÃķljer ocksÃĨ Zero-shot ReAct-mÃķnstret, dÃĪr beslutet baseras endast pÃĨ verktygets beskrivning. Denna mekanism kan utÃķkas med minne fÃķr att ta hÃĪnsyn till hela konversationshistoriken. Med ReAct, istÃĪllet fÃķr att be en LLM-modell att slutfÃķra din text, kan du uppmana den att svara i en tanke/handling/observationsslinga.
Kedjor
Kedjor, som namnet antyder, ÃĪr sekvenser av operationer som tillÃĨter LangChain-biblioteket att bearbeta sprÃĨkmodellindata och utdata smidigt. Dessa integrerade komponenter i LangChain bestÃĨr i grunden av lÃĪnkar, som kan vara andra kedjor eller primitiva sÃĨsom promptrar, sprÃĨkmodeller eller verktyg.
TÃĪnk dig en kedja som en transportband i en fabrik. Varje steg pÃĨ detta band representerar en viss operation, som kan vara att anropa en sprÃĨkmodell, applicera en Python-funktion pÃĨ en text eller till och med uppmana modellen pÃĨ ett visst sÃĪtt.
LangChain kategoriserar sina kedjor i tre typer: Verktygskedjor, Generiska kedjor och Kombinera dokumentkedjor. Vi kommer att dyka in i Verktygskedjor och Generiska kedjor fÃķr vÃĨr diskussion.
- Verktygskedjor ÃĪr specifikt utformade fÃķr att extrahera precisa svar frÃĨn sprÃĨkmodeller fÃķr snÃĪvt definierade uppgifter. Till exempel, lÃĨt oss ta en titt pÃĨ LLMMathChain. Denna verktygskedja mÃķjliggÃķr fÃķr sprÃĨkmodeller att utfÃķra matematiska berÃĪkningar. Den accepterar en frÃĨga pÃĨ naturligt sprÃĨk, och sprÃĨkmodellen genererar i sin tur en Python-kodsnutt som sedan kÃķrs fÃķr att producera svaret.
- Generiska kedjor, ÃĨ andra sidan, fungerar som byggblock fÃķr andra kedjor men kan inte anvÃĪndas direkt pÃĨ egen hand. Dessa kedjor, sÃĨsom LLMChain, ÃĪr grundlÃĪggande och kombineras ofta med andra kedjor fÃķr att utfÃķra komplexa uppgifter. Till exempel anvÃĪnds LLMChain ofta fÃķr att frÃĨga en sprÃĨkmodellobjekt genom att formatera inmatningen baserat pÃĨ en given promptmall och sedan skicka den till sprÃĨkmodellen.
Steg-fÃķr-steg-implementering av promptteknik med Langchain
Vi kommer att guida dig genom processen att implementera promptteknik med Langchain. Innan du fortsÃĪtter, se till att du har installerat nÃķdvÃĪndig programvara och paket.
Du kan dra nytta av populÃĪra verktyg som Docker, Conda, Pip och Poetry fÃķr att installera LangChain. De relevanta installationsfilerna fÃķr var och en av dessa metoder kan hittas inom LangChain-repositoriet pÃĨ https://github.com/benman1/generative_ai_with_langchain. Detta inkluderar en Dockerfile fÃķr Docker, en requirements.txt fÃķr Pip, en pyproject.toml fÃķr Poetry och en langchain_ai.yml-fil fÃķr Conda.
I vÃĨr artikel kommer vi att anvÃĪnda Pip, den standardpakethanteraren fÃķr Python, fÃķr att underlÃĪtta installation och hantering av tredjepartsbibliotek. Om det inte ingÃĨr i din Python-distribution kan du installera Pip genom att fÃķlja instruktionerna pÃĨ https://pip.pypa.io/.
FÃķr att installera ett bibliotek med Pip, anvÃĪnd kommandot pip install biblioteksnamn.
Men Pip hanterar inte miljÃķer pÃĨ egen hand. FÃķr att hantera olika miljÃķer anvÃĪnder vi verktyget virtualenv.
I nÃĪsta avsnitt kommer vi att diskutera modellintegrationer.
Steg 1: Installera Langchain
FÃķrst mÃĨste du installera Langchain-paketet. Vi anvÃĪnder Windows-operativsystem. KÃķr fÃķljande kommando i din terminal fÃķr att installera det:
pip install langchain
Steg 2: Importera Langchain och andra nÃķdvÃĪndiga moduler
NÃĪsta steg ÃĪr att importera Langchain tillsammans med andra nÃķdvÃĪndiga moduler. HÃĪr importerar vi ocksÃĨ transformers-biblioteket, som anvÃĪnds flitigt i NLP-uppgifter.
<p>import langchain from transformers import AutoModelWithLMHead, AutoTokenizer
Steg 3: Ladda fÃķrtrÃĪnad modell
Open AI
OpenAI-modeller kan bekvÃĪmt integreras med LangChain-biblioteket eller OpenAI Python-klientbiblioteket. Noterbart ÃĪr att OpenAI tillhandahÃĨller en Embedding-klass fÃķr textinbÃĪddningsmodeller. TvÃĨ viktiga LLM-modeller ÃĪr GPT-3.5 och GPT-4, som skiljer sig frÃĪmst i tokenlÃĪngd. PrissÃĪttning fÃķr varje modell kan hittas pÃĨ OpenAI:s webbplats. Medan det finns mer avancerade modeller som GPT-4-32K som har hÃķgre tokenacceptans, ÃĪr deras tillgÃĪnglighet via API inte alltid garanterad.

TillgÃĨng till dessa modeller krÃĪver en OpenAI API-nyckel. Detta kan gÃķras genom att skapa ett konto pÃĨ OpenAI-plattformen, stÃĪlla in faktureringsinformation och generera en ny hemlig nyckel.
<p>import os os.environ[&quot;OPENAI_API_KEY&quot;] = 'din-openai-token'</p>
Efter att ha skapat nyckeln kan du stÃĪlla in den som en miljÃķvariabel (OPENAI_API_KEY) eller skicka den som en parameter under klassinstansiering fÃķr OpenAI-samtal.
ÃvervÃĪg ett LangChain-skript som visar interaktionen med OpenAI-modellerna:
from langchain.llms import OpenAI llm = OpenAI(model_name=&quot;text-davinci-003&quot;) # LLM-modellen tar en prompt som indata och genererar ett svar prompt = &quot;Vem ÃĪr president i USA?&quot; completion = llm(prompt)
<p>Den nuvarande presidenten i USA ÃĪr Joe Biden.</p>
I det hÃĪr exemplet initieras en agent fÃķr att utfÃķra berÃĪkningar. Agenten tar emot indata, en enkel adderingsuppgift, bearbetar den med den tillhandahÃĨllna OpenAI-modellen och returnerar resultatet.
Hugging
Hugging Face ÃĪr ett KOSTNADSFRI Transformers Python-bibliotek, kompatibelt med PyTorch, TensorFlow och JAX, och innehÃĨller implementeringar av modeller som BERT, T5 och sÃĨ vidare.
Hugging Face erbjuder ocksÃĨ Hugging Face Hub, en plattform fÃķr att vara vÃĪrd fÃķr kodrepositoryer, maskinlÃĪrningsmodeller, datamÃĪngder och webbapplikationer.
FÃķr att anvÃĪnda Hugging Face som leverantÃķr fÃķr dina modeller behÃķver du ett konto och API-nycklar, som kan erhÃĨllas frÃĨn deras webbplats. Token kan gÃķras tillgÃĪnglig i din miljÃķ som HUGGINGFACEHUB_API_TOKEN.
ÃvervÃĪg fÃķljande Python-snutt som anvÃĪnder en Ãķppen kÃĪllkodsmodell utvecklad av Google (GOOGL ), Flan-T5-XXL-modellen:
from langchain.llms import HuggingFaceHub
<p>llm = HuggingFaceHub(model_kwargs={&quot;temperature&quot;: 0.5, &quot;max_length&quot;: 64},repo_id=&quot;google/flan-t5-xxl&quot;)
prompt = &quot;I vilket land ligger Tokyo?&quot;
completion = llm(prompt)
print(completion)</p>
Detta skript tar en frÃĨga som indata och returnerar ett svar, som visar kunskapen och fÃķrutsÃĪgelsefÃķrmÃĨgan hos modellen.
Steg 4: GrundlÃĪggande promptteknik
FÃķr att bÃķrja med kommer vi att generera en enkel prompt och se hur modellen svarar.
prompt = 'ÃversÃĪtt fÃķljande engelsk text till franska: &quot;{0}&quot;'
input_text = 'Hej, hur mÃĨr du?'
input_ids = tokenizer.encode(prompt.format(input_text), return_tensors='pt')
<p>generated_ids = model.generate(input_ids, max_length=100, temperature=0.9)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
I ovanstÃĨende kodsnutt tillhandahÃĨller vi en prompt fÃķr att ÃķversÃĪtta engelsk text till franska. SprÃĨkmodellen fÃķrsÃķker sedan ÃķversÃĪtta den givna texten baserat pÃĨ prompten.
Steg 5: Avancerad promptteknik
Medan ovanstÃĨende tillvÃĪgagÃĨngssÃĪtt fungerar bra, utnyttjar det inte fullt ut kraften i promptteknik. LÃĨt oss fÃķrbÃĪttra det genom att introducera mer komplexa promptstrukturer.
prompt = 'Som en mycket skicklig fransksprÃĨkig ÃķversÃĪttare, ÃķversÃĪtt fÃķljande engelska text till franska: &quot;{0}&quot;'
input_text = 'Hej, hur mÃĨr du?'
input_ids = tokenizer.encode(prompt.format(input_text), return_tensors='pt')
<p>generated_ids = model.generate(input_ids, max_length=100, temperature=0.9)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
I den hÃĪr kodsnutten modifierar vi prompten fÃķr att fÃķreslÃĨ att ÃķversÃĪttningen utfÃķrs av en âmycket skicklig fransksprÃĨkig ÃķversÃĪttareâ. FÃķrÃĪndringen i prompten kan leda till fÃķrbÃĪttrade ÃķversÃĪttningar, eftersom modellen nu antar en expertroll.
Att bygga ett akademiskt litteraturfrÃĨgesystem med Langchain
Vi kommer att bygga ett akademiskt litteraturfrÃĨgesystem med LangChain som kan besvara frÃĨgor om nyligen publicerade akademiska artiklar.

FÃķrst och frÃĪmst, fÃķr att stÃĪlla in vÃĨr miljÃķ, installerar vi de nÃķdvÃĪndiga beroendena.
pip install langchain arxiv openai transformers faiss-cpu
Efter installationen skapar vi ett nytt Python-anteckningsblock och importerar de nÃķdvÃĪndiga biblioteken:
from langchain.llms import OpenAI from langchain.chains.qa_with_sources import load_qa_with_sources_chain from langchain.docstore.document import Document import arxiv
KÃĪrnan i vÃĨrt frÃĨgesystem ÃĪr fÃķrmÃĨgan att hÃĪmta relevanta akademiska artiklar relaterade till ett visst omrÃĨde, hÃĪr betraktar vi Naturlig sprÃĨkbehandling (NLP), med hjÃĪlp av arXiv-akademidatabasen. FÃķr att utfÃķra detta definierar vi en funktion get_arxiv_data(max_results=10). Denna funktion samlar de senaste NLP-artiklarnas sammanfattningar frÃĨn arXiv och kapslar in dem i LangChain-dokumentobjekt, med sammanfattningen som innehÃĨll och det unika post-ID:t som kÃĪlla.
Vi kommer att anvÃĪnda arXiv-API:t fÃķr att hÃĪmta de senaste artiklarna relaterade till NLP:
<p>def get_arxiv_data(max_results=10):
search = arxiv.Search(
query=&quot;NLP&quot;,
max_results=max_results,
sort_by=arxiv.SortCriterion.SubmittedDate,
)</p>
documents = []
<p>for result in search.results():
documents.append(Document(
page_content=result.summary,
metadata={&quot;source&quot;: result.entry_id},
))</p>
return documents
Denna funktion hÃĪmtar sammanfattningarna av de senaste NLP-artiklarna frÃĨn arXiv och konverterar dem till LangChain-dokumentobjekt. Vi anvÃĪnder artiklarnas sammanfattning och dess unika post-ID (URL till artikeln) som innehÃĨll och kÃĪlla, respectively.
def print_answer(question):
print(
chain(
{
&quot;input_documents&quot;: sources,
&quot;question&quot;: question,
},
return_only_outputs=True,
)[&quot;output_text&quot;]
)
LÃĨt oss definiera vÃĨr korpus och stÃĪlla in LangChain:
sources = get_arxiv_data(2) chain = load_qa_with_sources_chain(OpenAI(temperature=0))
Med vÃĨrt akademiska frÃĨgesystem redo, kan vi testa det genom att stÃĪlla en frÃĨga:
print_answer(&quot;Vad ÃĪr de senaste framstegen inom NLP?&quot;)
Utmatningen kommer att vara svaret pÃĨ din frÃĨga, med kÃĪllhÃĪnvisningar till de kÃĪllor frÃĨn vilka informationen hÃĪmtades. Till exempel:
<p>De senaste framstegen inom NLP inkluderar Retriever-augmenterade instruktionsfÃķljande modeller och en ny berÃĪkningsram fÃķr att lÃķsa alternerande strÃķmoptimala flÃķdesproblem (ACOPF) med hjÃĪlp av grafikprocessorer (GPU). KÃLLOR: http://arxiv.org/abs/2307.16877v1, http://arxiv.org/abs/2307.16830v1
Du kan enkelt byta modell eller ÃĪndra systemet enligt dina behov. Till exempel, hÃĪr byter vi till GPT-4, vilket resulterar i ett mycket bÃĪttre och mer detaljerat svar.
sources = get_arxiv_data(2) chain = load_qa_with_sources_chain(OpenAI(model_name=&quot;gpt-4&quot;,temperature=0))
<p>De senaste framstegen inom Naturlig sprÃĨkbehandling (NLP) inkluderar utvecklingen av Retriever-augmenterade instruktionsfÃķljande modeller fÃķr informationshÃĪmtning, sÃĨsom frÃĨgesvar (QA). Dessa modeller kan anpassas till olika informationsdomÃĪner och uppgifter utan ytterligare finjustering. Men de kÃĪmpar ofta fÃķr att hÃĨlla sig till den tillhandahÃĨllna kunskapen och kan hallucinera i sina svar. Ett annat framsteg ÃĪr introduktionen av en berÃĪkningsram fÃķr att lÃķsa alternerande strÃķmoptimala flÃķdesproblem (ACOPF) med hjÃĪlp av grafikprocessorer (GPU). Denna approach anvÃĪnder en single-instruction, multiple-data (SIMD)-abstraktion av icke-linjÃĪra program (NLP) och anvÃĪnder en kondenserad-utrymme-inre-punktsmetod (IPM) med en ojÃĪmnhetsrelaxeringsstrategi. Denna strategi mÃķjliggÃķr faktorisering av KKT-matrisen utan numerisk pivoting, vilket tidigare har hindrat parallelliseringen av IPM-algoritmen. KÃLLOR: http://arxiv.org/abs/2307.16877v1, http://arxiv.org/abs/2307.16830v1
En token i GPT-4 kan vara sÃĨ kort som ett tecken eller sÃĨ lÃĨng som ett ord. Till exempel kan GPT-4-32K bearbeta upp till 32 000 token i ett enda kÃķrning, medan GPT-4-8K och GPT-3.5-turbo stÃķder 8 000 och 4 000 token, respektive. Men det ÃĪr viktigt att notera att varje interaktion med dessa modeller medfÃķr en kostnad som ÃĪr direkt proportionell mot antalet bearbetade token, antingen indata eller utdata.
I sammanhanget med vÃĨrt frÃĨgesystem, om en del av den akademiska litteraturen Ãķverskrider den maximala tokenbegrÃĪnsningen, kommer systemet att misslyckas med att bearbeta den i sin helhet, vilket pÃĨverkar kvaliteten och fullstÃĪndigheten hos svaren. FÃķr att komma runt detta problem kan texten brytas ned i mindre delar som fÃķljer tokenbegrÃĪnsningen.
FAISS (Facebook AI Similarity Search) (META ) hjÃĪlper till att snabbt hitta de mest relevanta textdelarna relaterade till anvÃĪndarens frÃĨga. Det skapar en vektorrepresentation av varje textdel och anvÃĪnder dessa vektorer fÃķr att identifiera och hÃĪmta de delar som ÃĪr mest lika vektorrepresentationen av en given frÃĨga.
Det ÃĪr viktigt att komma ihÃĨg att ÃĪven med anvÃĪndning av verktyg som FAISS kan behovet av att dela texten i mindre delar pÃĨ grund av tokenbegrÃĪnsningar ibland leda till fÃķrlust av kontext, vilket pÃĨverkar kvaliteten pÃĨ svaren. DÃĪrfÃķr ÃĪr det viktigt att hantera och optimera tokenanvÃĪndningen noggrant nÃĪr man arbetar med dessa stora sprÃĨkmodeller.
pip install faiss-cpu langchain CharacterTextSplitter
Efter att ha sÃĪkerstÃĪllt att ovanstÃĨende bibliotek ÃĪr installerade, kÃķr
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores.faiss import FAISS
from langchain.text_splitter import CharacterTextSplitter
documents = get_arxiv_data(max_results=10) # Vi kan nu anvÃĪnda mer data
document_chunks = []
splitter = CharacterTextSplitter(separator=&quot; &quot;, chunk_size=1024, chunk_overlap=0)
for document in documents:
for chunk in splitter.split_text(document.page_content):
document_chunks.append(Document(page_content=chunk, metadata=document.metadata))
<p>search_index = FAISS.from_documents(document_chunks, OpenAIEmbeddings())</p>
<p>chain = load_qa_with_sources_chain(OpenAI(temperature=0))</p>
<p>def print_answer(question):
print(
chain(
{
&quot;input_documents&quot;: search_index.similarity_search(question, k=4),
&quot;question&quot;: question,
},
return_only_outputs=True,
)[&quot;output_text&quot;]
)
Med koden komplett har vi nu ett kraftfullt verktyg fÃķr att frÃĨga den senaste akademiska litteraturen inom NLP-omrÃĨdet.
De senaste framstegen inom NLP inkluderar anvÃĪndningen av djupa neurala nÃĪtverk (DNN) fÃķr automatisk textanalys och NLP-uppgifter som stavkontroll, sprÃĨkdetection, entitetsutvinning, fÃķrfattardetection, frÃĨgesvar och andra uppgifter. KÃLLOR: http://arxiv.org/abs/2307.10652v1, http://arxiv.org/abs/2307.07002v1, http://arxiv.org/abs/2307.12114v1, http://arxiv.org/abs/2307.16217v1
Slutsats
Integrationen av stora sprÃĨkmodeller (LLM) i tillÃĪmpningar har accelererat antagandet inom flera domÃĪner, inklusive sprÃĨkÃķversÃĪttning, sentimentanalys och informationshÃĪmtning. Promptteknik ÃĪr ett kraftfullt verktyg fÃķr att maximera potentialen hos dessa modeller, och Langchain leder vÃĪgen i att fÃķrenkla denna komplexa uppgift. Dess standardiserade grÃĪnssnitt, flexibla promptmallar, robust modellintegration och den innovativa anvÃĪndningen av agenter och kedjor sÃĪkerstÃĪller optimala resultat fÃķr LLM-modellernas prestanda.
Men trots dessa framsteg finns det nÃĨgra viktiga punkter att komma ihÃĨg. NÃĪr du anvÃĪnder Langchain ÃĪr det viktigt att fÃķrstÃĨ att kvaliteten pÃĨ utmatningen beror starkt pÃĨ promptens formulering. Att experimentera med olika promptstilar och strukturer kan ge fÃķrbÃĪttrade resultat. Dessutom ÃĪr det viktigt att komma ihÃĨg att Langchain stÃķder en mÃĪngd olika sprÃĨkmodeller, och var och en har sina styrkor och svagheter. Att vÃĪlja rÃĪtt modell fÃķr din specifika uppgift ÃĪr avgÃķrande. Slutligen ÃĪr det viktigt att komma ihÃĨg att anvÃĪndningen av dessa modeller medfÃķr kostnadsaspekter, eftersom tokenbearbetning direkt pÃĨverkar kostnaden fÃķr interaktioner.
Som demonstrerat i den steg-fÃķr-steg-guiden kan Langchain driva robusta tillÃĪmpningar, sÃĨsom det akademiska litteraturfrÃĨgesystemet. Med en vÃĪxande anvÃĪndargemenskap och Ãķkande betydelse i det Ãķppna kÃĪllandskapet lovar Langchain att bli ett avgÃķrande verktyg fÃķr att utnyttja den fulla potentialen hos LLM-modeller som GPT-4.














