1
0
This commit is contained in:
2025-09-08 12:46:06 +08:00
parent 435d4dfbc2
commit f1aa9f2324
2 changed files with 138 additions and 0 deletions

View File

@@ -260,3 +260,9 @@ python3 rag.py --help
Этот проект -- пазл, который позволяет пошагово, по косточкам понять и настроить работу RAG.
Частично (в качестве агентов) в проекте участвовали модели семейств qwen, clause и chatgpt.
## Дополнительные материалы
* https://github.com/ollama/ollama/blob/main/docs/api.md
* https://habr.com/ru/articles/881268/
* https://habr.com/ru/companies/oleg-bunin/articles/835910/

132
rag/mindmap.puml Normal file
View File

@@ -0,0 +1,132 @@
@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)
***: Подбор модели эмбеддинга *
<i>та же, что на этапе векторизации</i>;
***: Подбор top_k
<i>количество чанков для поиска</i>;
** Ранжирование\n(Re-ranking)
*** Подбор модели реранкинга
' **** Проблема русского языка
***: Подбор top_n
<i>количество лучших чанков после реранка</i>;
** Генерация ответа
*** Подбор модели генерации
**** Проблема размера модели\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