Введение:

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

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

Для начала нам нужно импортировать необходимые библиотеки. Мы импортируем класс ABC и декоратор abstractmethod из модуля abc, а также тип List из модуля typing. Кроме того, мы импортируем класс Document из модуля langchain.schema. Вот начальный фрагмент кода:

from abc import ABC, abstractmethod
from typing import List
from langchain.schema import Document

Определение абстрактного класса BaseRetriever:

Далее мы определим абстрактный класс с именем BaseRetriever, который послужит основой для нашей системы поиска документов. Этот класс будет иметь один абстрактный метод get_relevant_documents, который принимает строку запроса в качестве входных данных и возвращает список соответствующих документов. Вот фрагмент кода:

class BaseRetriever(ABC):
    @abstractmethod
    def get_relevant_documents(self, query: str) -> List[Document]:
        """Get texts relevant for a query.
        Args:
            query: string to find relevant texts for
        Returns:
            List of relevant documents
        """

Настройка OpenAI и Langchain:

Чтобы интегрировать языковые модели OpenAI и Langchain в нашу систему поиска документов, нам нужно импортировать необходимые модули и инициализировать необходимые компоненты. Мы импортируем openai для доступа к API OpenAI и os для переменных среды. Мы также устанавливаем ключ OpenAI API, назначая его переменной среды OPENAI_API_KEY. Вот фрагмент кода:

import openai
import os
os.environ["OPENAI_API_KEY"] = ""

Дополнительно импортируем необходимые модули ленгчейна: RetrievalQA из langchain.chains, OpenAI из langchain.llms, TextLoader из langchain.document_loaders и VectorstoreIndexCreator из langchain.indexes. Вот фрагмент кода:

from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
from langchain.document_loaders import TextLoader
from langchain.indexes import VectorstoreIndexCreator

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
🌟 Возможности для сотрудничества и проектов 🌟

Заинтересованы ли вы в совместной работе над интересными проектами или в изучении новых возможностей? Я активно ищу возможности для сотрудничества и участия в проектах в области обработки естественного языка и поиска документов.

Если у вас есть интересный проект или идея для сотрудничества, которые соответствуют моему опыту, я буду рад услышать от вас! Давайте объединим усилия и создадим что-то потрясающее вместе.

Не стесняйтесь обращаться ко мне по адресу [email protected], чтобы обсудить потенциальное сотрудничество, проектные возможности или просто пообщаться и обменяться идеями. Я открыт для изучения различных форм сотрудничества, включая исследовательское партнерство, консультационные услуги или совместные проекты.

Давайте создавать будущее вместе!

С уважением,
Рахула Радж.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

Загрузка и индексирование документов:

Чтобы выполнить поиск документов, нам нужно загрузить документы в нашу систему и создать индекс для эффективного запроса. Мы используем класс TextLoader из Langchain для загрузки текстового документа (например, «state_of_the_union.txt»). Мы передаем имя текстового файла и кодировку в качестве аргументов. Вот фрагмент кода:

loader = TextLoader('state_of_the_union.txt', encoding='utf8')

Затем мы создаем индекс, используя класс VectorstoreIndexCreator из Langchain. Мы вызываем метод from_loaders для создателя индекса и передаем наш загрузчик документов в качестве аргумента. Вот фрагмент кода:

index = VectorstoreIndexCreator().from_loaders([loader])

Отображение пользовательского запроса и беседы:

Для взаимодействия с нашей системой поиска документов мы предоставляем пользовательский интерфейс для запроса и отображения диалогов. Мы используем библиотеку panel для создания интерактивной панели инструментов. Вот фрагмент кода для настройки пользовательского интерфейса:

import panel as pn
pn.extension()
panels = [] # collect display 
inp = pn.widgets.TextInput(value="Hi", placeholder='Enter text here…')
button_conversation = pn.widgets.Button(name="Ask your Query!")
interactive_conversation = pn.bind(collect_messages, button_conversation)
dashboard = pn.Column(
    inp,
    pn.Row(button_conversation),
    pn.panel(interactive_conversation, loading_indicator=True, height=300),
)

Обработка запросов пользователей и отображение результатов:

Для обработки пользовательских запросов и отображения результатов мы определяем функцию с именем collect_messages. Эта функция принимает запрос пользователя в качестве входных данных, выполняет поиск документа с использованием индекса и отображает запрос и ответ на информационной панели. Вот фрагмент кода для функции collect_messages:

def collect_messages(_):
    prompt = inp.value_input
    # ... (omitted code for brevity)
    if(prompt!=""):
        response=index.query(prompt)
    panels.append(
        pn.Row('User:', pn.pane.Markdown(prompt, width=600)))
    panels.append(
        pn.Row('Assistant:', pn.pane.Markdown(response, width=600, style={'background-color': '#F6F6F6'})))
    return pn.Column(*panels)

Вывод:

В этой статье мы рассмотрели, как создать систему поиска документов с использованием языковых моделей Langchain и OpenAI. Мы рассмотрели основы настройки среды, определения абстрактного класса для средства извлечения, загрузки и индексации документов и создания пользовательского интерфейса для запросов и отображения диалогов. Комбинируя эти технологии, вы можете создавать мощные и эффективные системы для поиска нужных документов на основе пользовательских запросов.

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

Ссылки:

Код: https://github.com/ra1111/documentreadergpt