RAG простыми словами: создайте Q&A по документам с помощью SQLite
Языковые модели часто предоставляют неверную информацию, поскольку им не хватает знаний о конкретных политиках. Генерация с дополненной выборкой (RAG) решает эту проблему, предоставляя модели релевантные документы перед ответом. Данное руководство объясняет RAG, используя аналогию с библиотекой: хороший библиотекарь извлекает конкретные страницы, а не полагается исключительно на память. RAG включает в себя извлечение релевантных отрывков, дополнение ими запроса и генерацию ответа на основе этой информации.RAG полезен при работе с большими или часто обновляемыми документами, или когда важна экономическая эффективность. Вместо того чтобы вставлять полные документы в каждый запрос, RAG позволяет осуществлять целевую выборку документов. В статье описывается создание простой системы RAG для справочного центра магазина с использованием Python и SQLite. Эта система будет разбивать документы на части, индексировать их для полнотекстового поиска, извлекать лучшие отрывки, формировать запрос и проверять ссылки в ответе.Реализация включает функцию chunk_markdown для разделения документов на осмысленные отрывки с сохранением заголовков для контекста. Функция build_index создает виртуальную таблицу SQLite FTS5 для хранения этих отрывков и обеспечивает эффективный поиск. Функция search обрабатывает вопрос, расширяет его синонимами, удаляет общие слова и запрашивает индекс с использованием надежного метода.Функция build_prompt форматирует извлеченные отрывки как пронумерованные источники для языковой модели. Функция check_answer выполняет базовую проверку, чтобы убедиться, что модель ссылается на существующие источники и не выдумывает цифры. Основная функция answer координирует эти шаги, сначала ища релевантные отрывки и вызывая языковую модель только в том случае, если найдена релевантная информация. Предоставляется заполнитель extractive_model для тестирования без реального API языковой модели.
chunk_markdownдля разделения документов на осмысленные отрывки с сохранением заголовков для контекста. Функцияbuild_indexсоздает виртуальную таблицу SQLite FTS5 для хранения этих отрывков и обеспечивает эффективный поиск. Функцияsearchобрабатывает вопрос, расширяет его синонимами, удаляет общие слова и запрашивает индекс с использованием надежного метода.Функцияbuild_promptформатирует извлеченные отрывки как пронумерованные источники для языковой модели. Функцияcheck_answerвыполняет базовую проверку, чтобы убедиться, что модель ссылается на существующие источники и не выдумывает цифры. Основная функцияanswerкоординирует эти шаги, сначала ища релевантные отрывки и вызывая языковую модель только в том случае, если найдена релевантная информация. Предоставляется заполнительextractive_modelдля тестирования без реального API языковой модели.