Добро пожаловать в серию Advanced RAG: Создание чата с помощью вашей системы документов
В этом первом видео нашей новой серии о Advanced RAG (Retrival Augmented Generation) мы рассмотрим архитектуру базового чата с вашей системой документов или конвейером RAG. Мы выйдем за рамки основ и обсудим более продвинутые методы улучшения конвейера.
Основы конвейера RAG
Начнем с основ конвейера RAG. Архитектура состоит из следующих компонентов:
- Загрузчик документов: этот компонент загружает документы, например PDF-файлы, которые будут использоваться в системе чата.
- Разбиение на части: документы разбиваются на более мелкие фрагменты, чтобы соответствовать контекстному окну языковой модели (LLM).
- Вложения: Вложения вычисляются для каждого фрагмента, которые затем сохраняются в хранилище векторов для создания семантического индекса.
- Поиск: когда пользователь задает вопрос, система вычисляет вложения для запроса и выполняет семантический поиск в базе знаний (хранилище векторов) для извлечения соответствующих документов или фрагментов.
- Изменение ранжирования. Полученные документы или фрагменты ранжируются в зависимости от релевантности.
- Генерация: вопрос и контекст (переранжированные документы или фрагменты) передаются в LLM для генерации ответов.
Это базовый обзор того, как работает конвейер RAG. Если вы абсолютный новичок, не волнуйтесь! У нас есть серия видеороликов о создании конвейеров RAG, которые вы можете посмотреть.
Представляем гибридный поиск
В этой новой серии мы сосредоточимся на улучшении базового конвейера RAG. Первая тема, которую мы рассмотрим, — это гибридный поиск.
Гибридный поиск предполагает добавление в конвейер RAG двух компонентов:
- Поиск по ключевым словам. Помимо семантического поиска с использованием вложений, мы также выполняем традиционный поиск по ключевым словам в доступных фрагментах.
- Ensemble Retriever: вместо использования только средства извлечения на основе встраивания мы объединяем результаты поиска по ключевым словам и средства извлечения на основе встраивания. Этот ансамблевый ретривер позволяет нам назначать разные веса каждому методу поиска, что делает его более эффективным.
Теперь, когда у нас есть обзор архитектуры и добавление гибридного поиска, давайте рассмотрим пример кода.
Пример кода
Прежде чем мы углубимся в код, убедитесь, что у вас установлены необходимые пакеты. Мы будем использовать ранг_bm25 для гибридного поиска, неструктурированный ввод-вывод для чтения PDF-файлов и хромаБД для создания векторного хранилища. Если вы работаете со отсканированными документами, рекомендуется использовать дополнительные пакеты для взаимодействия с отсканированными документами и выполнения оптического распознавания символов (OCR).
После установки пакетов мы можем загрузить их в наш код. Вот пример:
import Rank_bm25 импорт неструктурированного ввода-вывода импорт chromaDB из lchaintools импорт ChatPromptTemplate, OutputParser, RunnablePassThrough из lchaintools импорт EmbeddingModelAPI, LLMModelAPI
В этом примере мы используем последнюю версию LChain. Мы импортируем необходимые пакеты и модули для нашего конвейера RAG, включая шаблон приглашения чата, анализатор вывода, исполняемый сквозной порт, API встроенной модели и API модели LLM.
Далее нам нужно загрузить PDF-файл и преобразовать его в фрагменты. Вот пример:
pdf_loader = unstructuredIO.PDFLoader() docs = pdf_loader.load_file('data/example.pdf') chunk_size = 800 перекрытие = 100 сплиттер = unstructuredIO.RecursiveCharTextSplitter(chunk_size, перекрытие) chunks = Splitter.process(docs)
В этом фрагменте кода мы используем загрузчик PDF для загрузки файла PDF. Затем мы определяем размер фрагмента и перекрытие для разделения документов на фрагменты. Рекурсивный разделитель символьного текста используется для создания фрагментов.
Теперь перейдем к созданию вложений и хранилища векторов:
embedding_model = EmbeddingModelAPI('hugging_face_token') вектор_магазин = chromaDB.VectorStore(embedding_model) вектор_store.create_vector_store(куски)
В этом примере мы создаем модель внедрения с помощью API Hugging Face. Затем мы используем модель внедрения и фрагменты для создания векторного хранилища.
Далее мы настраиваем ретриверы как для поиска на основе встраивания, так и для поиска по ключевым словам:
embedding_retriever = вектор_магазин.создать_ретривер(num_chunks=3) ключевое слово_retriever = Rank_bm25.BM25Retriever(куски, num_chunks=3) ансамбль_retriever = Rank_bm25.EnsembleRetriever([embedding_retriever, ключевое слово_retriever], [0.7, 0.3])
В этом фрагменте кода мы создаем средства извлечения как для поиска на основе внедрения, так и для поиска на основе ключевых слов. Ансамбль-ретривер объединяет результаты обоих ретриверов, каждому из которых присваиваются разные веса.
Наконец, мы настраиваем модель LLM и шаблон приглашения:
llm_model = LLMModelAPI('hugging_face_token') Prompt_template = ChatPromptTemplate( system_prompt="Вы — полезный ИИ-помощник, который очень хорошо следует инструкциям. Используйте следующий контекст, чтобы ответить на вопрос пользователя:", user_prompt="Что такое настройка инструкций?", Assistant_prompt =""
В этом фрагменте кода мы создаем модель LLM с использованием API Hugging Face. Затем мы настраиваем шаблон приглашения для чата, включая системное приглашение, приглашение пользователя и приглашение помощника. Выходной анализатор используется для анализа ответа модели.
Когда все настроено, теперь мы можем запустить чат:
user_input = "Что такое настройка инструкций?" ответ =chat_template.invoke(user_input)
В этом примере мы предоставляем ввод пользователя и вызываем метод вызывать в шаблоне чата, чтобы получить ответ модели.
Заключение
В этом видео мы рассмотрели архитектуру базового конвейера RAG и представили концепцию гибридного поиска. Мы также предоставили пример кода о том, как реализовать гибридный поиск с использованием библиотеки LChain. Объединив поиск по ключевым словам и поиск по встраиванию, мы можем повысить производительность системы чата и обеспечить более точные ответы.
Если это видео было для вас полезным, обязательно подпишитесь на наш канал, чтобы увидеть больше видео из этой серии. Если вам нужна помощь в реализации собственных проектов, мы предлагаем консультационные услуги. Для получения дополнительной информации перейдите по ссылкам в описании.
Спасибо за просмотр и увидимся в следующем видео!




