С малко количество код и някои полезни библиотеки можете да създадете този мощен инструмент за анализ на документи.

Извличането на информация от документи и данни е от решаващо значение за вземането на информирани решения. При работа с чувствителна информация обаче възникват опасения за поверителността. LangChain, в комбинация с OpenAI API, ви позволява да анализирате вашите локални документи, без да е необходимо да ги качвате онлайн.

Те постигат това, като съхраняват вашите данни локално, използват вграждания и векторизация за анализ и изпълняват процеси във вашата среда. OpenAI не използва данни, предоставени от клиенти чрез техния API, за да обучават моделите си или да подобряват услугите си.

Настройване на вашата среда

Създайте нова виртуална среда на Python. Това ще гарантира, че няма конфликти на версиите на библиотеката. След това изпълнете следната терминална команда, за да инсталирате необходимите библиотеки.

pip install langchain openai tiktoken faiss-cpu pypdf

Ето разбивка на това как ще използвате всяка библиотека:

  • LangChain: Ще го използвате за създаване и управление на езикови вериги за обработка и анализ на текст. Той ще осигури модули за зареждане на документи, разделяне на текст, вграждане и векторно съхранение.
  • OpenAI: Ще го използвате за изпълнение на заявки и получаване на резултати от езиков модел.
  • тиктокен: Ще го използвате, за да преброите броя на токените (единици текст) в даден текст. Това е, за да следите броя на токените при взаимодействие с OpenAI API, който таксува въз основа на броя токени, които използвате.
  • ФАЙС: Ще го използвате за създаване и управление на векторно хранилище, което позволява бързо извличане на подобни вектори въз основа на техните вграждания.
  • PyPDF: Тази библиотека извлича текст от PDF файлове. Той помага за зареждането на PDF файлове и извлича техния текст за по-нататъшна обработка.

След като всички библиотеки са инсталирани, вашата среда вече е готова.

Получаване на OpenAI API ключ

Когато правите заявки към OpenAI API, трябва да включите API ключ като част от заявката. Този ключ позволява на доставчика на API да провери дали заявките идват от легитимен източник и че имате необходимите разрешения за достъп до неговите функции.

За да получите OpenAI API ключ, преминете към OpenAI платформа.

След това под профила на вашия акаунт в горния десен ъгъл щракнете върху Вижте API ключове. The API ключове ще се появи страница.

Кликнете върху Създайте нова тайнаключ бутон. Назовете ключа си и щракнете върху Създайте нов таен ключ. OpenAI ще генерира вашия API ключ, който трябва да копирате и съхранявате на сигурно място. От съображения за сигурност няма да можете да го прегледате отново през вашия OpenAI акаунт. Ако загубите този таен ключ, ще трябва да генерирате нов.

Пълният изходен код е достъпен в a GitHub хранилище.

Импортиране на необходимите библиотеки

За да можете да използвате библиотеките, инсталирани във вашата виртуална среда, трябва да ги импортирате.

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

Забележете, че импортирате библиотеките на зависимости от LangChain. Това ви позволява да използвате специфични функции на рамката LangChain.

Зареждане на документа за анализ

Започнете със създаване на променлива, която съдържа вашия API ключ. Ще използвате тази променлива по-късно в кода за удостоверяване.

# Hardcoded API key
openai_api_key = "Your API key"

Не се препоръчва да кодирате твърдо своя API ключ, ако планирате да споделите кода си с трети страни. За производствен код, който възнамерявате да разпространявате, вместо това използвайте променлива на средата.

След това създайте функция, която зарежда документ. Функцията трябва да зареди PDF или текстов файл. Ако документът не е нито едно от двете, функцията трябва да повдигне 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")

След като заредите документите, създайте a CharacterTextSplitter. Този сплитер ще раздели заредените документи на по-малки парчета въз основа на знаци.

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

return text_splitter.split_documents(documents=documents)

Разделянето на документа гарантира, че парчетата са с управляем размер и все още са свързани с някакъв припокриващ се контекст. Това е полезно за задачи като анализ на текст и извличане на информация.

Запитване на документа

Имате нужда от начин да направите запитване към качения документ, за да извлечете информация от него. За да направите това, създайте функция, която приема a заявка низ и a ретривър като вход. След това създава a RetrievalQA инстанция с помощта на ретривър и екземпляр на езиковия модел OpenAI.

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)

Тази функция използва създадения QA екземпляр, за да изпълни заявката и да отпечата резултата.

Създаване на основната функция

Основната функция ще контролира цялостния поток на програмата. Той ще вземе потребителски вход за име на файл на документ и ще зареди този документ. След това създайте OpenAIEmbeddings екземпляр за вграждане и конструкция a векторен магазин въз основа на заредените документи и вграждания. Запазете това векторно хранилище в локален файл.

След това заредете съхраняваното векторно хранилище от локалния файл. След това въведете цикъл, в който потребителят може да въвежда заявки. The основен функцията предава тези заявки на query_pdf функционират заедно с ретривъра на постоянния векторен магазин. Цикълът ще продължи, докато потребителят въведе „изход“.

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")

Вгражданията улавят семантичните връзки между думите. Векторите са форма, в която можете да представяте части от текст.

Този код преобразува текстовите данни в документа във вектори, използвайки вгражданията, генерирани от OpenAIEmbeddings. След това индексира тези вектори, използвайки ФАЙС, за ефективно извличане и сравнение на подобни вектори. Това позволява анализ на качения документ.

Накрая използвайте конструкцията __name__ == "__main__". за извикване на основната функция, ако потребител стартира програмата самостоятелно:

if __name__ == "__main__":
main()

Това приложение е приложение за команден ред. Като разширение можете използвайте Streamlit, за да добавите уеб интерфейс към приложението.

Извършване на анализ на документи

За да извършите анализ на документ, съхранете документа, който искате да анализирате, в същата папка като вашия проект, след което стартирайте програмата. Той ще поиска името на документа, който искате да анализирате. Въведете пълното му име, след което въведете заявки за програмата за анализ.

Екранната снимка по-долу показва резултатите от анализа на PDF.

Следният изход показва резултатите от анализа на текстов файл, съдържащ изходния код.

Уверете се, че файловете, които искате да анализирате, са в PDF или текстов формат. Ако вашите документи са в други формати, можете конвертирайте ги в PDF формат с помощта на онлайн инструменти.

Разбиране на технологията зад големите езикови модели

LangChain опростява създаването на приложения, използвайки големи езикови модели. Това също означава, че абстрахира това, което се случва зад кулисите. За да разберете как точно работи приложението, което създавате, трябва да се запознаете с технологията зад големите езикови модели.