Prompt engineering

Nollasta edistyneeseen ohjelmointiin Langchainilla Pythonissa

mm
Lisää Unite.AI suosikkilähteisiisi Google-palvelussa

Large Language Modelien (LLM) tärkeä ominaisuus on mallien käyttämien parametrejen määrä. Mitä enemmän parametreja malli käyttää, sitä paremmin se ymmärretään sanojen ja lauseiden välisen suhteen. Tämä tarkoittaa, että miljardien parametrejä käyttävillä malleilla on kyky generoida erilaisia luovia tekstiformaatteja ja vastata avoimiin ja haastaviin kysymyksiin tietokkaasti.

LLM:t, kuten ChatGPT, jotka käyttävät Transformer-mallia, ovat taitavia ymmärtämään ja generoimaan ihmisen kieltä, mikä tekee niistä hyödyllisiä sovelluksissa, jotka vaativat luonnollisen kielen ymmärtämistä. Niillä on kuitenkin rajoituksia, kuten vanhentunut tietämys, kyvyttömyys vuorovaikuttaa ulkoisten järjestelmien kanssa, kontekstin ymmärtämisen puute ja joskus luomalla uskottavilta kuulostavia mutta virheellisiä tai järjettömiä vastauksia.

Näiden rajoitusten käsittely vaatii LLM:ien integroimista ulkoisten tietolähteiden ja ominaisuuksien kanssa, mikä voi olla monimutkaista ja vaatia laajaa koodaamista ja tietojen käsittelytaitoja. Tämä yhdistettynä AI-käsitteiden ja monimutkaisten algoritmien ymmärtämisen haasteisiin, vaikuttaa sovellusten kehittämiseen liittyvään oppimiskäyrään.

LLM:ien yhdistäminen muihin työkaluihin LLM-pohjaisiksi sovelluksiksi voi kuitenkin muuttaa digitaalista maisemaamme. Näiden sovellusten potentiaali on laaja, kattaa tehokkuuden ja tuottavuuden parantamisen, tehtävien yksinkertaisen, päätöksenteon parantamisen ja henkilökohtaisten kokemusten tarjoamisen.

Tässä artikkelissa tutkimme näitä kysymyksiä syvemmältä, käsittelemällä edistyneitä ohjelmointitekniikoita Langchainilla, tarjoamalla selkeitä selityksiä, käytännön esimerkkejä ja vaiheittaisia ohjeita niiden toteuttamiseksi.

Langchain, joka on huipputason kirjasto, tuo mukavuutta ja joustavuutta suunnittelussa, toteutuksessa ja säätelyssä. Kun pureudumme ohjelmoinnin periaatteisiin ja käytäntöihin, opit käyttämään Langchainin voimakkaita ominaisuuksia hyödyntääksesi SOTA-generatiivisen AI-mallin GPT-4 vahvuuksia.

Ohjelmointi

Ennen kuin tutkimme ohjelmoinnin teknisyyksiä, on tärkeää ymmärtää ohjelmoinnin käsite ja sen merkitys.

Ohjelmointi on tokenien jono, jota käytetään syötteenä kielen malliin, joka ohjaa sitä generoimaan tietynlaisen vastauksen. Ohjelmointi on avainasemassa mallin käyttäytymisen ohjaamisessa. Se voi vaikuttaa generoidun tekstin laatuun, ja kun se on suunniteltu oikein, se voi auttaa mallia antamaan tarkkoja ja kontekstisidonnaisia tuloksia.

Ohjelmointi on ohjelmoinnin taidetta ja tieteenala. Tavoitteena on saada haluttu tuloste kielen mallista. Valitsemalla ja rakentelemalla ohjelmointia, voidaan ohjata mallia generoimaan tarkempia ja relevantimpia vastauksia. Käytännössä tämä vaatii input-lauseiden hienosäätöä mallin koulutuksen ja rakenteellisten harhaumuksien mukaisesti.

Ohjelmoinnin monimutkaisuus vaihtelee yksinkertaisista tekniikoista, kuten syöttämällä mallille asiaankuuluvia avainsanoja, monimutkaisempiin menetelmiin, jotka liittyvät monimutkaisten ohjelmointirakenteiden suunnitteluun, jotka hyödyntävät mallin sisäisiä mekaniikkoja.

Langchain: Nopein kasvava ohjelmointityökalu

LangChain, joka lanseerattiin lokakuussa 2022 Harrison Chasen toimesta, on yksi korkeimmista avoimen lähdekoodin kehyksistä GitHubissa vuonna 2023. Se tarjoaa yksinkertaisen ja standardoidun rajapinnan Large Language Modelien (LLM) integroimiseksi sovelluksiin. Se tarjoaa myös ominaisuusrikkauksen ohjelmointirajapinnan, joka mahdollistaa kehittäjille kokeilla eri strategioita ja arvioida tuloksia. Käyttämällä Langchainia, voit suorittaa ohjelmointitehtäviä tehokkaammin ja intuitiivisemmin.

LangFlow toimii LangChain-komponenttien orkesteroinnin käyttöliittymänä, joka mahdollistaa nopean prototyyppien ja kokeilujen toteuttamisen.

LangChain täyttää tärkeän aukon AI-kehityksessä joukkoihin. Se mahdollistaa joukon NLP-sovelluksia, kuten virtuaaliavustajia, sisällön luojia, kysymys-vastaus-järjestelmiä ja muita, ratkaisemaan joukon todellisia maailman ongelmia.

LangChain ei ole itsenäinen malli tai tarjoaja, vaan se yksinkertaa vuorovaikutusta monien mallien kanssa, laajentaen LLM-sovellusten kykyjä yksinkertaisen API-kutsun rajoituksista.

LangChainin Arkkitehtuuri

 

LangChainin pääkomponentit ovat Model I/O, ohjelmointimallit, Muisti, Agentit ja Ketjut.

Model I/O

LangChain mahdollistaa vaivattoman yhteyden eri kielen malleihin standardoidun rajapinnan avulla, jota kutsutaan Model I/O:ksi. Tämä mahdollistaa mallin vaihdon optimoimiseksi tai paremman suorituskyvyn saavuttamiseksi. LangChain tukee useita kielen mallin tarjoajia, kuten OpenAI, HuggingFace, Azure, Fireworks ja muita.

Ohjelmointimallit

Nämä käytetään LLM:ien kanssa vuorovaikuttaessa ja optimoimalla niiden suorituskykyä. Ohjelmointimallien joustavuus vaikuttaa merkittävästi syötteen prosessiin.

Yksinkertainen esimerkki ohjelmointimallista:


<p>from langchain.prompts import PromptTemplate
prompt = PromptTemplate(input_variables=["aihe"],
template="Mitkä ovat viimeaikaiset edistysaskeleet {aihe}-alalla?")
print(prompt.format(aihe="Luonnollisen kielen prosessointi"))</p>

Kun edetään monimutkaisuuden kanssa, kohtaamme LangChainissa monimutkaisempia malleja, kuten Reason and Act (ReAct) -mallin. ReAct on tärkeä malli toiminnan suorittamiseksi, jossa agentti määrittää tehtävän sovellettavalle työkalulle, mukauttaa syötteen sille ja tulkitsee tulosteen suorittaa tehtävä.

PREFIX = """Vastaa seuraavaa kysymystä käyttäen annettuja työkaluja:"""
FORMAT_INSTRUCTIONS = """Seuraa tätä muotoa:
Kysymys: {input_question}
Ajatus: alkuvaiheinen ajatus kysymyksestä
Toiminta: valittu toiminta [{tool_names}]
Toiminnan syöte: syöte toiminnalle
Havainto: toiminnan tulos"""
SUFFIX = """Aloita!
Kysymys: {input}
Ajatus:{agent_scratchpad}"""

Muisti

Muisti on kriittinen käsite LangChainissa, joka mahdollistaa LLM:ille ja työkaluille tallentaa tietoa ajan myötä. Tämä tilallinen käyttäytyminen parantaa LangChain-sovellusten suorituskykyä tallentamalla aiemmat vastaukset, käyttäjän vuorovaikutukset, ympäristön tilan ja agentin tavoitteet. ConversationBufferMemory- ja ConversationBufferWindowMemory-strategiat auttavat seuraamaan koko tai viimeaikaisen osan keskustelusta. Monimutkaisemman lähestymistavan osalta ConversationKGMemory-strategia mahdollistaa koodaamisen keskustelun tietämysgrafiiksi, joka voidaan syöttää takaisin ohjelmointiin tai käyttää vastausten ennustamiseen ilman LLM:n kutsua.

Agentit

Agentti vuorovaikuttaa maailman kanssa suorittamalla toimintoja ja tehtäviä. LangChainissa agentit yhdistävät työkalut ja ketjut tehtävien suorittamiseksi. Se voi myös muodostaa yhteyden ulkomaailmaan tietojen hakemiseksi LLM:ien tietämyksen täydentämiseksi, jolloin niiden sisäiset rajoitukset voidaan voittaa. Ne voivat päättää siirtää laskelmat laskimeen tai Python-tulkkiin tilanteen mukaan.

Agentit ovat varustettu alikomponenteilla:

  • Työkalut: Nämä ovat toiminnallisia komponentteja.
  • Työkalupakit: Työkalujen kokoelmat.
  • Agenttien suorittimet: Tämä on suoritusrunko, joka mahdollistaa työkalujen valinnan.

LangChainin agentit seuraavat myös Zero-shot ReAct -mallia, jossa päätös perustuu vain työkalun kuvaus. Tätä mekanismia voidaan laajentaa muistilla, jotta voidaan ottaa huomioon koko keskustelun historia. ReAct:in avulla voidaan ohjelmointiin vaikuttaa, kun LLM:ää pyydetään vastaamaan ajatus/toiminta/havainto-silmukassa.

Ketjut

Ketjut, kuten termi viittaa, ovat operaatioiden jonoja, jotka mahdollistavat LangChain-kirjastolle kielen mallin syötteen ja tulosteen prosessoinnin vaivattomasti. Nämä LangChainin perusrakenteelliset komponentit koostuvat perimmältään linkkeistä, jotka voivat olla muita ketjuja tai primitiivejä, kuten ohjelmointeja, kielen malleja tai työkaluja.

Kuvittele ketju kuin tehtaan kuljetinvyö. Jokainen askel vyöllä edustaa tiettyä operaatiota, joka voi olla kielen mallin kutsu, Python-funktion soveltaminen tekstiin tai ohjelmointi mallille tiettyä tyyliä.

LangChain luokittelee ketjut kolmeen tyyppiin: Utility-ketjut, Generic-ketjut ja Combine Documents -ketjut. Tässä keskitymme Utility- ja Generic-ketjuihin.

  • Utility-ketjut on suunniteltu erityisesti tarkasti määriteltyjen tehtävien suorittamiseen, kuten tietyn tiedon hakeminen kielen mallista. Esimerkiksi LLMMathChain on utility-ketju, joka mahdollistaa kielen mallien suorittaa matemaattisia laskelmia. Se hyväksyy luonnollisen kielen kysymyksen ja kielen malli generoi Python-koodinpätkän, joka suoritetaan tuottamaan vastaus.
  • Generic-ketjut toimivat rakennuspalikkoina muiden ketjujen luomiseksi, mutta ne eivät ole itsessään suoraan käytettävissä. Nämä ketjut, kuten LLMChain, ovat perusrakenteellisia ja usein yhdistetty muihin ketjuihin suorittamaan monimutkaisia tehtäviä. Esimerkiksi LLMChain käytetään usein kielen mallin kysymiseen muotoilemalla syöte annetun ohjelmointimallin mukaan ja siirtämällä sen kielen mallille.

Askellinen ohjelmointi Langchainilla

Opastamme ohjelmointiprosessin toteuttamisessa Langchainilla. Ennen jatkamista, varmista, että olet asentanut tarvittavat ohjelmistot ja paketit.

Voit hyödyntää suosittuja työkaluja, kuten Docker, Conda, Pip ja Poetry, asentaaksesi LangChainin. Asiaankuuluvat asennustiedostot näille menetelmille löytyvät LangChain-repositoriosta osoitteessa https://github.com/benman1/generative_ai_with_langchain. Tämä sisältää Dockerfile:n Dockeriin, requirements.txt:n Pipiin, pyproject.toml:n Poetryyn ja langchain_ai.yml-tiedoston Condaan.

Artikkelissamme käytämme Pipiä, Pythonin standardia pakettienhallintaa, helpottamaan kolmannen osapuolen kirjastojen asentamista ja hallintaa. Jos Pip ei ole mukana Python-jakelussasi, voit asentaa sen seuraamalla ohjeita osoitteessa https://pip.pypa.io/.

Pipillä asennetaan kirjasto komennolla pip install kirjaston_nimi.

Pip kuitenkin ei hallitse ympäristöjä itsessään. Ympäristöjen hallintaan käytetään virtualenv-työkalua.

Seuraavassa osiossa käsittelemme mallien integrointia.

Askellinen 1: Langchainin asentaminen

Ensimmäiseksi on asennettava Langchain-paketti. Käytämme Windows-käyttöjärjestelmää. Suorita seuraava komento terminaalissa asentaaksesi sen:


pip install langchain

Askellinen 2: Langchainin ja muiden tarvittavien moduulien tuonti

Seuraavaksi tuodaan Langchain yhdessä muiden tarvittavien moduulien kanssa. Tässä tuomme myös transformers-kirjaston, jota käytetään laajasti NLP-tehtävissä.


<p>import langchain
from transformers import AutoModelWithLMHead, AutoTokenizer

Askellinen 3: Esikoulutetun mallin lataaminen

Open AI

OpenAI-mallit voidaan käyttää helposti LangChain-kirjaston tai OpenAI Python -asiakasohjelmiston kautta. OpenAI tarjoaa myös upotusluokan tekstiupotusmalleille. Kaksi tärkeää LLM-mallia ovat GPT-3.5 ja GPT-4, jotka eroavat lähinnä tokenin pituudessa. Kunkin mallin hinta on saatavilla OpenAI:n verkkosivuilta. On olemassa myös monimutkaisempia malleja, kuten GPT-4-32K, joilla on suurempi tokenin hyväksymiskyky, mutta niiden saatavuus API-kautta ei aina ole taatusti.

Näiden mallien käyttäminen vaatii OpenAI-avain. Tämä voidaan tehdä luomalla tili OpenAI:n alustalla, asettamalla laskutustiedot ja luomalla uuden salaisen avaimen.


<p>import os
os.environ["OPENAI_API_KEY"] = 'avainsi'</p>

Avaimen luomisen jälkeen voit asettaa sen ympäristömuuttujaksi (OPENAI_API_KEY) tai antaa sen parametrina luokan instanssien luomisessa OpenAI-kutsuissa.

Tarkastellaan Langchain-komentosarjaa, joka havainnollistaa vuorovaikutusta OpenAI-mallien kanssa:

from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003")
# LLM ottaa ohjelmoinnin syötteen ja tuottaa täydennyksen
prompt = "Kuka on Yhdysvaltain presidentti?"
completion = llm(prompt)

<p>Yhdysvaltain nykyinen presidentti on Joe Biden.</p>

Tässä esimerkissä alustetaan agentti suorittaakseen laskelmia. Agentti ottaa syötteen, yksinkertaisen laskutehtävän, prosessoi sen käyttämällä tarjoiltua OpenAI-mallia ja palauttaa tuloksen.

Hugging

Hugging Face on ILMAISESTI KÄYTETTÄVÄ Transformers Python -kirjasto, joka on yhteensopiva PyTorchin, TensorFlowin ja JAXin kanssa, ja se sisältää malleja kuten BERT ja T5.

Hugging Face tarjoaa myös Hugging Face Hubin, joka on alusta koodirepositorioille, koneoppimismalleille, tietokannoille ja web-sovelluksille.

Jotta voit käyttää Hugging Facea mallien tarjoajana, sinun on oltava tililläsi ja API-avaimet, jotka saat heidän verkkosivuiltaan. Token voidaan tehdä saataville ympäristössäsi HUGGINGFACEHUB_API_TOKEN-nimellä.

Tarkastellaan seuraavaa Python-koodinpätkää, joka käyttää avoimen lähdekoodin mallia, jota on kehittänyt Google (GOOGL ), Flan-T5-XXL-mallia:

from langchain.llms import HuggingFaceHub

<p>llm = HuggingFaceHub(model_kwargs={"temperature": 0.5, "max_length": 64}, repo_id="google/flan-t5-xxl")
prompt = "Missä maassa sijaitsee Tokyo?"
completion = llm(prompt)
print(completion)</p>

Tämä koodi ottaa kysymyksen syötteenä ja palauttaa vastauksen, osoittaen mallin tietämys- ja ennustuskykyä.

Askellinen 4: Perusohjelmointi

Aloitamme generoimalla yksinkertaisen ohjelmoinnin ja tarkastelemalla, miten malli reagoi.

prompt = 'Käännä seuraava englanninkielinen teksti ranskaan: "{0}"'
input_text = 'Hei, miten voit?'
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))

Yllä olevassa koodinpätkässä annamme ohjelmoinnin kääntääksesi englanninkielisen tekstin ranskaan. Kielen malli yrittää kääntää annetun tekstin ohjelmoinnin perusteella.

Askellinen 5: Edistynyt ohjelmointi

Vaikka edellinen lähestymistapa toimii hyvin, se ei hyödyntää ohjelmoinnin voimaa täysimääräisesti. Parannetaan sitä esittelemällä monimutkaisempia ohjelmointirakenteita.

prompt = 'Toimien erittäin perehtyneenä ranskan kääntäjänä, käännä seuraava englanninkielinen teksti ranskaan: "{0}"'
input_text = 'Hei, miten voit?'
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))

Tässä koodinpätkässä muokkaamme ohjelmoinnin viitatessa siihen, että käännös tehdään “erittäin perehtyneen ranskan kääntäjän” toimesta. Ohjelmoinnin muutos voi johtaa parantuneisiin käännöksiin, koska malli olettaa asiantuntijan roolin.

Akateemisen kirjallisuuden kysymys-vastaus-järjestelmän rakentaminen Langchainilla

Rakennamme akateemisen kirjallisuuden kysymys-vastaus-järjestelmän Langchainilla, joka voi vastata kysymyksiin viimeaikaisista akateemisista artikkeleista.

Ensinnäkin, asetamme ympäristömme asentamalla tarvittavat riippuvuudet.

pip install langchain arxiv openai transformers faiss-cpu

Asennuksen jälkeen luomme uuden Python-muistion ja tuomme tarvittavat kirjastot:

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

Järjestelmämme kysymys-vastaus-ydin on kyky hakea relevantteja akateemisia artikkeleita tietystä aihealueesta, tässä tapauksessa Luonnollisen kielen prosessoinnista (NLP), käyttäen arXiv-akateemista tietokantaa. Määrittelemme funktion get_arxiv_data(max_results=10) hakemaan viimeisimmät NLP-aiheiset artikkelien tiivistelmät arXivista ja koodaamaan ne LangChain-dokumentti-olioiksi, käyttäen tiivistelmää sisällönä ja yksilöivää entry-id:tä lähteenä.

Käytämme arXiv API:aa hakemaan viimeaikaiset artikkelit, jotka liittyvät NLP:ään:


<p>def get_arxiv_data(max_results=10):
search = arxiv.Search(
query="NLP",
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={"source": result.entry_id},
))</p>

return documents

Tämä funktio hakee viimeisimmät NLP-aiheiset artikkeleiden tiivistelmät arXivista ja muuttaa ne LangChain-dokumentti-olioiksi. Käytämme artikkelin tiivistelmää ja yksilöivää entry-id:tä (URL:ia artikkeliin) sisällönä ja lähteenä.

def print_answer(question):
print(
chain(
{
"input_documents": sources,
"question": question,
},
return_only_outputs=True,
)["output_text"]
)

Määrittelemme korpukseni ja asetamme LangChainin:

sources = get_arxiv_data(2)
chain = load_qa_with_sources_chain(OpenAI(temperature=0))

Kun akateeminen kysymys-vastaus-järjestelmämme on valmis, voimme testata sitä kysymällä:

print_answer("Mitkä ovat viimeaikaiset edistysaskeleet NLP:ssä?")

Vastaus on kysymyksiisi, mainiten lähteet, joista tieto on haettu. Esimerkiksi:


<p>Viimeaikaiset edistysaskeleet NLP:ssä ovat mm. Retriever-augmentoidut ohjeiden seuraamisen mallit ja uusi laskennallinen kehys ACOPF-ongelmien ratkaisemiseksi grafiikkaprosessoreiden avulla.
LÄHTEET: http://arxiv.org/abs/2307.16877v1, http://arxiv.org/abs/2307.16830v1

Voit helposti vaihtaa malleja tai muuttaa järjestelmää tarpeidesi mukaan. Esimerkiksi tässä vaihdamme GPT-4:ään, joka johtaa paljon parempiin ja yksityiskohtaisempiin vastauksiin.

sources = get_arxiv_data(2)
chain = load_qa_with_sources_chain(OpenAI(model_name="gpt-4", temperature=0))

<p>Viimeaikaiset edistysaskeleet Luonnollisen kielen prosessoinnissa (NLP) käsittävät mm. Retriever-augmentoidun ohjeiden seuraamisen malleja tietohakuun ja kysymys-vastaus-tehtäviin. Nämä mallit voidaan sovittaa eri tietoalueisiin ja tehtäviin ilman lisäkoulutusta. Niillä on kuitenkin vaikeuksia pysyä annetun tiedon puitteissa ja ne voivat "haaveilla" vastauksissaan. Toinen edistysaskel on laskennallisen kehyksen esittely ACOPF-ongelmien ratkaisemiseksi grafiikkaprosessoreiden avulla. Tämä lähestymistapa käyttää yksinkertaisen ohjelmoinnin abstraktiota ei-lineaarisille ohjelmille ja soveltaa tiivistettyä sisäistä pistettä (IPM) epäyhtälön rentoutusstrategialla. Tämä strategia mahdollistaa KKT-matriisin tekijöiden tekemisen ilman numeerista kääntämistä, mikä on aiemmin haitannut IPM-algoritmin rinnakkaisuutta.
LÄHTEET: http://arxiv.org/abs/2307.16877v1, http://arxiv.org/abs/2307.16830v1

GPT-4:ssa yksi token voi olla yhtä lyhyt kuin yksi merkki tai yhtä pitkä kuin yksi sana. Esimerkiksi GPT-4-32K voi prosessoida jopa 32 000 tokenia yhdellä suorituksella, kun taas GPT-4-8K ja GPT-3.5-turbo tukevat 8 000 ja 4 000 tokenia vastaavasti. On kuitenkin huomattava, että jokainen vuorovaikutus näiden mallien kanssa on suoraan verrannollinen tokenien määrään, olivat ne syötteitä tai tulostetta.

Kysymys-vastaus-järjestelmässämme, jos akateeminen kirjallisuus ylittää maksimitokenin, järjestelmä ei pysty prosessoimaan sitä kokonaisuudessaan, mikä vaikuttaa vastausten laatuun ja täydellisyyteen.

FAISS (Facebook AI Similarity Search) (META ) auttaa nopeasti löytämään tekstin paloja, jotka ovat eniten vastaavia käyttäjän kysymykselle. Se luo vektoriesityksen kustakin tekstin palasta ja käyttää näitä vektoreita löytääkseen ja hakemaan palat, jotka ovat eniten samankaltaisia kysymyksen vektoriesityksen kanssa.

On kuitenkin muistettava, että vaikka FAISS:ia käytetään, tekstin jakaminen pienempiin osiin tokenin rajoitusten vuoksi voi johtaa kontekstin menetykseen, mikä vaikuttaa vastausten laatuun. Siksi tokenien käytön huolellinen hallinta on tärkeää työskennellessä näiden suurten kielen mallien kanssa.

pip install faiss-cpu langchain CharacterTextSplitter

Asennuksen jälkeen suoritetaan

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) # Voimme nyt käyttää enemmän dataa
document_chunks = []
splitter = CharacterTextSplitter(separator=" ", 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(
{
"input_documents": search_index.similarity_search(question, k=4),
"question": question,
},
return_only_outputs=True,
)["output_text"]
)

Kun koodi on valmis, meillä on voimakas työkalu viimeisimmän akateemisen kirjallisuuden kyselyyn NLP-aihealueella.

Viimeaikaiset edistysaskeleet NLP:ssä käsittävät syvän neuroverkon (DNN) automaattiseen tekstin analyysiin ja NLP-tehtäviin, kuten oikolukuun, kielen tunnistamiseen, yksikön havaitsemiseen, kirjailijan tunnistamiseen, kysymys-vastaus-tehtäviin ja muihin tehtäviin.
LÄHTEET: http://arxiv.org/abs/2307.10652v1, http://arxiv.org/abs/2307.07002v1, http://arxiv.org/abs/2307.12114v1, http://arxiv.org/abs/2307.16217v1

Johtopäätös

Large Language Modelien (LLM) integrointi sovelluksiin on kiihdyttänyt useiden alojen omaksumista, mukaan lukien kielien kääntäminen, mielipiteen analyysi ja tietojen hakeminen. Ohjelmointi on voimakas työkalu näiden mallien potentiaalin maksimoimiseksi, ja Langchain on johtava tekijä ohjelmoinnin yksinkertaistamisessa. Sen standardoitu rajapinta, joustavat ohjelmointimallit, vahva mallien integrointi ja innovatiivinen agenttien ja ketjujen käyttö varmistavat LLM:ien suorituskyvyn optimaalisen tuloksen.

On kuitenkin muistettava, että ohjelmointiin liittyy joitakin seikkoja. Kun käytät Langchainia, on tärkeää ymmärtää, että tulosteen laatu riippuu voimakkaasti ohjelmoinnin sanamuodosta. Kokeilemalla eri ohjelmointityylejä ja -rakenteita voidaan saavuttaa parannettuja tuloksia. On myös muistettava, että vaikka Langchain tukee useita kielen malleja, kullakin mallilla on omat vahvuutensa ja heikkoutensa. Oikean mallin valinta on tärkeää tehtävän mukaan. Lopulta on muistettava, että näiden mallien käyttäminen liittyy kustannusvaatimuksiin, koska tokenien prosessointi vaikuttaa suoraan vuorovaikutuksen kustannuksiin.

Kuten askellisessa opassa näytetään, Langchain voi mahdollistaa voimakkaita sovelluksia, kuten Akateemisen kirjallisuuden kysymys-vastaus-järjestelmää. Kasvavan käyttäjäyhteisön ja lisääntyvän merkityksen avoimessa lähdekoodin maisemassa Langchain lupailee olevan ratkaiseva työkalu hyödyntämään LLM:ien, kuten GPT-4, täydellistä potentiaalia.

Olen viettänyt viimeiset viisi vuotta uppoutumalla kiinnostavaan koneoppimisen ja syvän oppimisen maailmaan. Minun intohimoni ja asiantuntemukseni ovat johtaneet minun osallistumiseen yli 50:een monipuoliseen ohjelmistosuunnitteluhankkeeseen, joissa on erityisesti painottunut AI/ML. Minun jatkuva uteliaisuuteni on myös ohjannut minun luontaisen kielen prosessoinnin pariin, jota haluan tutkia tarkemmin.