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