Asiakirjojen analysointi LangChainilla ja OpenAI API:lla

Kaltaisesi lukijat auttavat tukemaan MUO:ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion. Lue lisää.

Asiakirjoista ja tiedoista näkemysten poimiminen on ratkaisevan tärkeää tietoon perustuvien päätösten tekemisessä. Yksityisyyteen liittyviä huolenaiheita kuitenkin syntyy, kun käsitellään arkaluontoisia tietoja. LangChain yhdessä OpenAI API:n kanssa mahdollistaa paikallisten asiakirjojen analysoinnin ilman, että niitä tarvitsee ladata verkkoon.

He saavuttavat tämän pitämällä tietosi paikallisesti, käyttämällä upotuksia ja vektorointia analysointiin ja suorittamalla prosesseja ympäristössäsi. OpenAI ei käytä asiakkaiden API:n kautta lähettämiä tietoja mallien kouluttamiseen tai palveluiden parantamiseen.

Ympäristösi luominen

Luo uusi Python-virtuaaliympäristö. Tämä varmistaa, että kirjaston versioristiriitoja ei ole. Suorita sitten seuraava päätekomento asentaaksesi tarvittavat kirjastot.

 pip install langchain openai tiktoken faiss-cpu pypdf 

Tässä on erittely kunkin kirjaston käytöstä:

  • LangChain: Käytät sitä kielellisten ketjujen luomiseen ja hallintaan tekstinkäsittelyä ja analysointia varten. Se tarjoaa moduuleja asiakirjojen lataamista, tekstin jakamista, upottamista ja vektoritallennusta varten.
  • OpenAI: Käytät sitä kyselyjen suorittamiseen ja tulosten hankkimiseen kielimallista.
  • tiktok: Käytät sitä laskeaksesi merkkien (tekstiyksiköiden) määrän tietyssä tekstissä. Tämän tarkoituksena on seurata merkkien määrää, kun käytät OpenAI-sovellusliittymää, joka veloittaa käyttämiesi tokenien määrän perusteella.
  • FAISS: Käytät sitä vektorivaraston luomiseen ja hallintaan, mikä mahdollistaa samankaltaisten vektorien nopean noudon niiden upotusten perusteella.
  • PyPDF: Tämä kirjasto poimii tekstiä PDF-tiedostoista. Se auttaa lataamaan PDF-tiedostoja ja purkamaan niiden tekstin jatkokäsittelyä varten.

Kun kaikki kirjastot on asennettu, ympäristösi on nyt valmis.

OpenAI API-avaimen hankkiminen

Kun teet pyyntöjä OpenAI API:lle, sinun on sisällytettävä sovellusliittymäavain osaksi pyyntöä. Tämän avaimen avulla API-palveluntarjoaja voi varmistaa, että pyynnöt tulevat laillisesta lähteestä ja että sinulla on tarvittavat oikeudet käyttää sen ominaisuuksia.

Jos haluat hankkia OpenAI API -avaimen, siirry kohtaanOpenAI-alusta.

Napsauta sitten tilisi profiilin alla oikeassa yläkulmassaNäytä API-avaimet. TheAPI-avaimetsivu tulee näkyviin.

Napsauta theLuo uusi salaisuus avain-painiketta. Nimeä avaimesi ja napsautaLuo uusi salainen avain. OpenAI luo API-avaimesi, joka sinun tulee kopioida ja säilyttää turvallisessa paikassa. Turvallisuussyistä et voi tarkastella sitä uudelleen OpenAI-tilisi kautta. Jos kadotat tämän salaisen avaimen, sinun on luotava uusi.

Täysi lähdekoodi on saatavilla aGitHub-arkisto.

Vaadittujen kirjastojen tuonti

Jotta voit käyttää virtuaaliympäristöösi asennettuja kirjastoja, sinun on tuotava ne.

 from langchain.document_loaders import PyPDFLoader, TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

Huomaa, että tuot riippuvuuskirjastot LangChainista. Näin voit käyttää LangChain-kehyksen tiettyjä ominaisuuksia.

Ladataan asiakirjaa analysoitavaksi

Aloita luomalla muuttuja, joka sisältää API-avaimesi. Käytät tätä muuttujaa myöhemmin koodissa todentamiseen.

 # Hardcoded API key
openai_api_key = "Your API key"

Ei ole suositeltavaa koodata API-avainta, jos aiot jakaa koodisi kolmansien osapuolten kanssa. Käytä sen sijaan ympäristömuuttujaa tuotantokoodille, jota aiot jakaa.

Luo seuraavaksi funktio, joka lataa asiakirjan. Toiminnon tulee ladata PDF- tai tekstitiedosto. Jos asiakirja ei ole kumpaakaan, funktion tulee nostaa aValueError.

 def load_document(filename):
   if filename.endswith(".pdf"):
       loader = PyPDFLoader(filename)
       documents = loader.load()
   elif filename.endswith(".txt"):
       loader = TextLoader(filename)
       documents = loader.load()
   else:
       raise ValueError("Invalid file type")

Kun olet ladannut asiakirjat, luo aCharacterTextSplitter. Tämä jakaja jakaa ladatut asiakirjat pienempiin osiin merkkien perusteella.

    text_splitter = CharacterTextSplitter(chunk_size=1000, 
                                         chunk_overlap=30, separator="n")

   return text_splitter.split_documents(documents=documents)

Asiakirjan jakaminen varmistaa, että palaset ovat hallittavissa olevan kokoisia ja liittyvät edelleen johonkin päällekkäiseen kontekstiin. Tästä on hyötyä tehtävissä, kuten tekstianalyysissä ja tiedonhaussa.

Asiakirjan kysely

Tarvitset tavan tehdä kysely ladatusta asiakirjasta saadaksesi oivalluksia siitä. Voit tehdä tämän luomalla funktion, joka ottaa akyselymerkkijono ja anoutajasyötteenä. Sitten se luo aRetrievalQAesimerkiksi käyttämällänoutajaja OpenAI-kielimallin esiintymä.

 def query_pdf(query, retriever):
   qa = RetrievalQA.from_chain_type(llm=OpenAI(openai_api_key=openai_api_key),
                                    chain_type="stuff", retriever=retriever)
   result = qa.run(query)
   print(result)

Tämä toiminto käyttää luotua QA-ilmentymää kyselyn suorittamiseen ja tuloksen tulostamiseen.

Päätoiminnon luominen

Päätoiminto ohjaa ohjelman kokonaiskulkua. Se vaatii käyttäjän syötteen asiakirjan tiedostonimeksi ja lataa kyseisen asiakirjan. Luo sitten anOpenAIEembeddingsesimerkiksi upottamista ja rakentamista varten avektorikauppaladattujen asiakirjojen jaupotukset. Tallenna tämä vektorivarasto paikalliseen tiedostoon.

Lataa seuraavaksi säilytetty vektorivarasto paikallisesta tiedostosta. Syötä sitten silmukka, johon käyttäjä voi syöttää kyselyitä. Thepääfunktio välittää nämä kyselytkysely_pdffunktio yhdessä pysyvän vektorivaraston noutajan kanssa. Silmukka jatkuu, kunnes käyttäjä kirjoittaa "exit".

 def main():
   filename = input("Enter the name of the document (.pdf or .txt):n")
   docs = load_document(filename)
   embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
   vectorstore = FAISS.from_documents(docs, embeddings)
   vectorstore.save_local("faiss_index_constitution")
   persisted_vectorstore = FAISS.load_local("faiss_index_constitution", embeddings)
   query = input("Type in your query (type 'exit' to quit):n")

   while query != "exit":
       query_pdf(query, persisted_vectorstore.as_retriever())
       query = input("Type in your query (type 'exit' to quit):n")

Upotukset vangitsevat sanojen välisiä semanttisia suhteita. Vektorit ovat muoto, jossa voit esittää tekstinpätkiä.

Tämä koodi muuntaa asiakirjan tekstidatan vektoreiksi käyttämällä upotuksia, jotka on luotuOpenAIEembeddings. Sitten se indeksoi nämä vektorit käyttämälläFAISS, samankaltaisten vektorien tehokasta hakua ja vertailua varten. Tämä mahdollistaa ladatun asiakirjan analysoinnin.

Käytä lopuksi rakennetta __name__ == “__main__” kutsuaksesi pääfunktiota, jos käyttäjä suorittaa ohjelman itsenäisesti:

 if __name__ == "__main__":
   main()

Tämä sovellus on komentorivisovellus. Laajennuksena voit käyttää Streamlitiä verkkokäyttöliittymän lisäämiseen sovellukseen.

Asiakirja-analyysin suorittaminen

Suorittaaksesi asiakirja-analyysin tallenna analysoitava asiakirja samaan kansioon kuin projektisi ja suorita sitten ohjelma. Se kysyy analysoitavan asiakirjan nimeä. Anna sen koko nimi ja kirjoita sitten analysoitavalle ohjelmalle kyselyt.

Alla oleva kuvakaappaus näyttää PDF-analyysin tulokset.

Seuraava tulos näyttää lähdekoodia sisältävän tekstitiedoston analysoinnin tulokset.

Varmista, että analysoitavat tiedostot ovat joko PDF- tai tekstimuodossa. Jos asiakirjasi ovat muissa muodoissa, voit muuntaa ne PDF-muotoon verkkotyökalujen avulla.

Suurten kielimallien taustalla olevan teknologian ymmärtäminen

LangChain yksinkertaistaa sovellusten luomista suurilla kielimalleilla. Tämä tarkoittaa myös sitä, että kulissien takana tapahtuu abstrakteja. Ymmärtääksesi tarkasti, kuinka luomasi sovellus toimii, sinun tulee tutustua suurten kielimallien taustalla olevaan tekniikkaan.

Related Posts