@startmindmap RAG title Mindmap по построению RAG header https://git.axenov.dev/anthony/ollama endheader * RAG ** Подготовка сырых данных *** Количество ****_ Больше => сложнее *** Формат **** HTML *****_ Очистка **** Markdown **** JSON **** PDF ***** OCR ****** Проблема плохого текста\n(сканы, картинки, фото) ****** Проблема разметки текста\n(колонки, обтекание картинок) **** Проблема наличия таблиц *****_ Оставить *****_ Удалить *****_ Конвертировать ******_ Markdown *******_ Таблица *******_ Список ******_ CSV *** Качество **** Очистка *****_ Картинки *****_ Бессмысленный текст *****_ Разметка HTML, XML, ... **** Метаданные *****_ Название *****_ Ссылка *****_ Дата *****_ Автор *****_ ... **** Семантика и смысл текстов ***** Разделение на осмысленные наборы ** Встраивание данных *** Векторизация **** Подбор модели эмбеддинга * ***** Проблема русского языка **** Подбор способа разделения ***** Fixed-length chunking\n(строго по символам) ******_ самый простой и быстрый ******_ хорош для длинных текстов ******_ рвёт тексты с потерей связи ***** Semantic chunking\n(по смысловым блокам) ******_ посложнее ******_ сохраняет логику, даёт больше смысла ******_ лучше поиск ******_ чанки могут быть разных размеров ***** Structural chunking\n(по структуре текстов) ******_ самый сложный и медленный ******_ сохраняет контекст ******_ хорош для сложных и технических текстов ******_ требует структурированные входные данные **** Подбор размера чанка *****_ уменьшение ******_ меньше смысла ******_ больше нерелевантных результатов и галлюцинаций ******_ быстрее поиск ******_ хуже ответ *****_ увеличение ******_ больше смысла ******_ больше размер контекста ******_ медленнее поиск ******_ хуже ответ **** Подбор перекрытия чанков *****_ уменьшение ******_ хуже смысловая связь документов ******_ более уникальные чанки *****_ увеличение ******_ лучше смысловая связь документов ******_ сильнее дублирование частей чанков *** Индексация **** Метод хранения чанков *****_ chromadb (примитивно на базе sqlite, но медленно) *****_ qdrant (быстро, но немного усложняет деплой) *****_ postgres + pgvector (сложнее) *****_ ... ** Классификация\n(Classification) *** Подбор модели классификации **** Проблема русского языка ** Поиск и встраивание\n(Embedding) ***: Подбор модели эмбеддинга * та же, что на этапе векторизации; ***: Подбор top_k количество чанков для поиска; ** Ранжирование\n(Re-ranking) *** Подбор модели реранкинга ' **** Проблема русского языка ***: Подбор top_n количество лучших чанков после реранка; ** Генерация ответа *** Подбор модели генерации **** Проблема размера модели\n(млрд параметров) *****_ меньше ******_ требует меньше ресурсов (RAM, CPU, GPU) ******_ выше скорость ответа (TPS) ******_ ниже качество (мешанина токенов, путает язык, игнорирует инструкции) *****_ больше ******_ требует больше ресурсов (RAM, CPU, GPU) ******_ ниже скорость ответа (TPS) ******_ выше качество, но может быть избыточно, в зависимости от домена *** Подбор системного промпта **** Проблема русского языка *****_ модель может его не понимать/генерировать *****_ язык сложнее, занимает больше токенов в контексте **** Проблема размера контекста *****: Проблема Lost-in-the-middle ---- Исследование: * коротко https://huggingface.co/papers/2307.03172 * целиком https://arxiv.org/abs/2307.03172 ; ******_ ... *****_ Сдвиг контекстного окна *****_ Сжатие контекста *** Подбор настроек генерации ****_ temperature ****_ top_p? ****_ ... @endmindmap