Са малом количином кода и неким корисним библиотекама, можете направити овај моћни алат за анализу докумената.
Извлачење увида из докумената и података кључно је за доношење одлука на основу информација. Међутим, када се ради о осетљивим информацијама, јавља се забринутост за приватност. ЛангЦхаин, у комбинацији са ОпенАИ АПИ-јем, омогућава вам да анализирате своје локалне документе без потребе да их отпремате на мрежи.
Они то постижу тако што чувају ваше податке локално, користе уграђивање и векторизацију за анализу и извршавају процесе унутар вашег окружења. ОпенАИ не користи податке које клијенти шаљу преко свог АПИ-ја за обуку својих модела или побољшање услуга.
Подешавање вашег окружења
Креирајте ново Питхон виртуелно окружење. Ово ће осигурати да нема сукоба верзија библиотеке. Затим покрените следећу наредбу терминала да бисте инсталирали потребне библиотеке.
pip install langchain openai tiktoken faiss-cpu pypdf
Ево прегледа како ћете користити сваку библиотеку:
- ЛангЦхаин: Користићете га за креирање и управљање језичким ланцима за обраду и анализу текста. Он ће обезбедити модуле за учитавање докумената, цепање текста, уграђивање и векторско складиштење.
- ОпенАИ: Користићете га за покретање упита и добијање резултата из језичког модела.
- тиктокен: Користићете га да пребројите број токена (јединица текста) у датом тексту. Ово је за праћење броја токена приликом интеракције са ОпенАИ АПИ-јем који се наплаћује на основу броја токена које користите.
- ФАИСС: Користићете га за креирање и управљање векторском радњом, омогућавајући брзо проналажење сличних вектора на основу њиховог уграђивања.
- ПиПДФ: Ова библиотека издваја текст из ПДФ-ова. Помаже у учитавању ПДФ датотека и издваја њихов текст за даљу обраду.
Након што су све библиотеке инсталиране, ваше окружење је сада спремно.
Добијање ОпенАИ АПИ кључа
Када шаљете захтеве ОпенАИ АПИ-ју, потребно је да укључите АПИ кључ као део захтева. Овај кључ омогућава добављачу АПИ-ја да провери да ли захтеви долазе из легитимног извора и да имате потребне дозволе за приступ његовим функцијама.
Да бисте добили ОпенАИ АПИ кључ, пређите на ОпенАИ платформа.
Затим, испод профила вашег налога у горњем десном углу, кликните на Погледајте АПИ кључеве. Тхе АПИ кључеви страница ће се појавити.
Кликните на Направите нову тајнукључ дугме. Именујте свој кључ и кликните на Креирајте нови тајни кључ. ОпенАИ ће генерисати ваш АПИ кључ који треба да копирате и чувате негде на сигурном. Из безбедносних разлога, нећете моћи поново да га видите преко свог ОпенАИ налога. Ако изгубите овај тајни кључ, мораћете да генеришете нови.
Комплетан изворни код је доступан у а ГитХуб спремиште.
Увоз потребних библиотека
Да бисте могли да користите библиотеке инсталиране у вашем виртуелном окружењу, потребно је да их увезете.
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
Обратите пажњу да увозите библиотеке зависности из ЛангЦхаин-а. Ово вам омогућава да користите специфичне карактеристике ЛангЦхаин оквира.
Учитавање документа за анализу
Почните тако што ћете креирати променљиву која садржи ваш АПИ кључ. Ову променљиву ћете користити касније у коду за аутентификацију.
# Hardcoded API key
openai_api_key = "Your API key"
Није препоручљиво да тврдо кодирате свој АПИ кључ ако планирате да свој код делите са трећим лицима. За производни код који намеравате да дистрибуирате, уместо тога користите променљиву окружења.
Затим креирајте функцију која учитава документ. Функција треба да учита ПДФ или текстуалну датотеку. Ако документ није ни једно ни друго, функција треба да подигне а ВалуеЕррор.
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")
Након учитавања докумената, креирајте а ЦхарацтерТектСплиттер. Овај разделник ће поделити учитане документе на мање делове на основу знакова.
text_splitter = CharacterTextSplitter(chunk_size=1000,
chunk_overlap=30, separator="\n")return text_splitter.split_documents(documents=documents)
Подела документа осигурава да су делови величине којом се може управљати и да су и даље повезани са неким контекстом који се преклапа. Ово је корисно за задатке као што су анализа текста и проналажење информација.
Упит за документ
Потребан вам је начин да поставите упит за отпремљени документ да бисте из њега извукли увид. Да бисте то урадили, креирајте функцију која узима а упит стринг и а ретривер као улаз. Затим ствара а РетриевалКА на пример користећи ретривер и пример језика ОпенАИ модела.
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)
Ова функција користи креирану КА инстанцу за покретање упита и штампање резултата.
Креирање главне функције
Главна функција ће контролисати укупни ток програма. Требаће кориснички унос за име датотеке документа и учитати тај документ. Затим креирајте ан ОпенАИЕмбеддингс инстанца за уграђивање и конструкцију а векторска продавница на основу учитаних докумената и уградње. Сачувајте ово векторско складиште у локалну датотеку.
Затим учитајте трајно складиште вектора из локалне датотеке. Затим унесите петљу у коју корисник може да унесе упите. Тхе главни функција прослеђује ове упите у куери_пдф функција заједно са ретривером постојаног складишта вектора. Петља ће се наставити све док корисник не уђе у „излаз“.
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")
Уграђивање обухвата семантичке односе између речи. Вектори су форма у којој можете представљати делове текста.
Овај код претвара текстуалне податке у документу у векторе користећи уграђивање које генерише ОпенАИЕмбеддингс. Затим индексира ове векторе користећи ФАИСС, за ефикасно проналажење и поређење сличних вектора. То је оно што омогућава анализу учитаног документа.
Коначно, користите конструкција __наме__ == "__маин__". да позовете главну функцију ако корисник покрене програм самостално:
if __name__ == "__main__":
main()
Ова апликација је апликација са командне линије. Као проширење, можете користите Стреамлит да додате веб интерфејс у апликацију.
Извођење анализе докумената
Да бисте извршили анализу документа, сачувајте документ који желите да анализирате у истој фасцикли као и ваш пројекат, а затим покрените програм. Тражиће назив документа који желите да анализирате. Унесите његово пуно име, а затим унесите упите за програм за анализу.
Снимак екрана испод приказује резултате анализе ПДФ-а.
Следећи излаз приказује резултате анализе текстуалне датотеке која садржи изворни код.
Уверите се да су датотеке које желите да анализирате у ПДФ или текстуалном формату. Ако су ваши документи у другим форматима, можете конвертујте их у ПДФ формат користећи онлајн алате.
Разумевање технологије иза великих језичких модела
ЛангЦхаин поједностављује креирање апликација користећи велике језичке моделе. То такође значи да апстрахује оно што се дешава иза кулиса. Да бисте разумели како тачно функционише апликација коју креирате, требало би да се упознате са технологијом која стоји иза великих језичких модела.