Pienellä koodimäärällä ja hyödyllisillä kirjastoilla voit rakentaa tämän tehokkaan asiakirja-analyysityökalun.

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ä:

instagram viewer
  • 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.
  • tiktoken: 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 kohtaan OpenAI-alusta.

Napsauta sitten tilisi profiilin alla oikeassa yläkulmassa Näytä API-avaimet. The API-avaimet sivu tulee näkyviin.

Klikkaa Luo uusi salaisuusavain -painiketta. Nimeä avaimesi ja napsauta Luo 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 a GitHub-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. Tuotantokoodille, jota aiot jakaa, käytä sen sijaan ympäristömuuttujaa.

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

defload_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 a CharacterTextSplitter. 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 a kysely merkkijono ja a noutaja syötteenä. Sitten se luo a RetrievalQA esimerkiksi käyttämällä noutaja ja OpenAI-kielimallin esiintymä.

defquery_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 an OpenAIEembeddings esimerkiksi upottamista ja rakentamista varten a vektorikauppa ladattujen asiakirjojen ja upotukset. 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ä. The pää funktio välittää nämä kyselyt kysely_pdf funktio yhdessä pysyvän vektorivaraston noutajan kanssa. Silmukka jatkuu, kunnes käyttäjä kirjoittaa "exit".

defmain():
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 luotu OpenAIEembeddings. Sitten se indeksoi nämä vektorit käyttämällä FAISS, samankaltaisten vektorien tehokasta hakua ja vertailua varten. Tämä mahdollistaa ladatun asiakirjan analysoinnin.

Lopuksi käytä __name__ == "__main__" -rakenne pääfunktion kutsuminen, jos käyttäjä suorittaa ohjelman itsenäisesti:

if __name__ == "__main__":
main()

Tämä sovellus on komentorivisovellus. Jatkeena voit lisää verkkokäyttöliittymä sovellukseen Streamlitin avulla.

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 tehdä sen 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 tarkalleen, kuinka luomasi sovellus toimii, sinun tulee tutustua suurten kielimallien taustalla olevaan tekniikkaan.