Используя небольшой объем кода и несколько полезных библиотек, вы можете создать этот мощный инструмент анализа документов.

Извлечение ценной информации из документов и данных имеет решающее значение для принятия обоснованных решений. Однако при работе с конфиденциальной информацией возникают проблемы конфиденциальности. LangChain в сочетании с API OpenAI позволяет анализировать локальные документы без необходимости загружать их в Интернет.

Они достигают этого, храня ваши данные локально, используя встраивания и векторизацию для анализа и выполняя процессы в вашей среде. OpenAI не использует данные, предоставленные клиентами через их API, для обучения своих моделей или улучшения своих услуг.

Настройка среды

Создайте новую виртуальную среду Python.. Это гарантирует отсутствие конфликтов версий библиотеки. Затем выполните следующую команду терминала, чтобы установить необходимые библиотеки.

pip install langchain openai tiktoken faiss-cpu pypdf

Вот разбивка того, как вы будете использовать каждую библиотеку:

instagram viewer
  • Лангчейн: Вы будете использовать его для создания и управления лингвистическими цепочками для обработки и анализа текста. Он предоставит модули для загрузки документов, разделения текста, встраивания и векторного хранения.
  • ОпенАИ: вы будете использовать его для выполнения запросов и получения результатов из языковой модели.
  • тиктокен: вы будете использовать его для подсчета количества токенов (единиц текста) в данном тексте. Это необходимо для отслеживания количества токенов при взаимодействии с API OpenAI, который взимает плату в зависимости от количества используемых вами токенов.
  • ФАИСС: вы будете использовать его для создания хранилища векторов и управления им, что позволит быстро находить похожие векторы на основе их вложений.
  • PyPDF: эта библиотека извлекает текст из PDF-файлов. Он помогает загружать PDF-файлы и извлекать их текст для дальнейшей обработки.

После установки всех библиотек ваша среда готова.

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

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

Чтобы получить ключ API OpenAI, перейдите к Платформа OpenAI.

Затем в профиле вашей учетной записи в правом верхнем углу нажмите на Посмотреть ключи API. Ключи API страница появится.

Нажать на Создать новый секретключ кнопка. Назовите свой ключ и нажмите Создать новый секретный ключ. OpenAI сгенерирует ваш ключ API, который вам следует скопировать и сохранить в безопасном месте. По соображениям безопасности вы не сможете просмотреть его снова через свою учетную запись OpenAI. Если вы потеряете этот секретный ключ, вам придется создать новый.

Полный исходный код доступен в Репозиторий 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 или текстовый файл. Если документ не является ни тем, ни другим, функция должна вызвать 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")

После загрузки документов создайте ПерсонажТекстСплиттер. Этот разделитель разделит загруженные документы на более мелкие фрагменты в зависимости от символов.

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

return text_splitter.split_documents(documents=documents)

Разделение документа гарантирует, что фрагменты имеют управляемый размер и по-прежнему связаны с некоторым перекрывающимся контекстом. Это полезно для таких задач, как анализ текста и поиск информации.

Запрос документа

Вам нужен способ запроса загруженного документа, чтобы получить из него информацию. Для этого создайте функцию, которая принимает запрос строка и ретривер в качестве ввода. Затем он создает ПоискQA экземпляр, используя ретривер и экземпляр языковой модели 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 экземпляр для вложений и создайте векторный магазин на основе загруженных документов и вложения. Сохраните это векторное хранилище в локальный файл.

Затем загрузите сохраненное хранилище векторов из локального файла. Затем введите цикл, в котором пользователь может вводить запросы. основной функция передает эти запросы в запрос_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 упрощает создание приложений с использованием больших языковых моделей. Это также означает, что он абстрагирует то, что происходит за кулисами. Чтобы точно понять, как работает создаваемое вами приложение, вам следует ознакомиться с технологией, лежащей в основе больших языковых моделей.