1
0

Доработка rag, удаление скриптов моделей, актуализация README

This commit is contained in:
2025-08-31 00:51:42 +08:00
parent c408972b45
commit defc30cad0
108 changed files with 635 additions and 745 deletions

View File

@@ -7,10 +7,10 @@
```bash
cd ..; ./up; cd -
python3 -m venv .venv
source ./venv/bin/activate
pip install beautifulsoup4 markdownify sentence-transformers qdrant-client langchain transformers hashlib
source .venv/bin/activate
pip install beautifulsoup4 markdownify sentence-transformers qdrant-client langchain transformers
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
./download.sh 123456789
./download.sh 123456789 # <<== pageId страницы в Confluence
python3 convert.py
python3 vectorize.py
python3 rag.py --interactive
@@ -153,10 +153,6 @@ python3 vectorize.py
- молниеносный поиск по индексу чанков (частям документов);
- корректное насыщение контекста для генеративной модели.
Впоследствии embedding-модель будет встраивать эти данные в диалог с генеративной моделью.
Каждый запрос сначала будет обрабатывать именно она, находя подходящие по векторам документы, и подставлять их в контекст генеративной модели.
Последняя будет всего лишь генерировать ответ, опираясь на предоставленные из документов данные, ссылаясь на них в ответе.
Для получения справки по скрипту выполни команду:
```
@@ -192,41 +188,167 @@ python3 rag.py --help
### Кастомный системный промпт
Если хочется уточнить роль генеративной модели, можно создать файл `sys_prompt.txt` и прописать туда всё необходимое, учитывая следующие правила:
Если хочется уточнить роль генеративной модели, можно создать текстовый файл и прописать туда всё необходимое, учитывая следующие правила:
1. Шаблон `{{sources}}` будет заменён на цитаты документов, найденные в qdrant
1. Шаблон `{{sources}}` будет заменён на цитаты документов, найденных в qdrant
2. Шаблон `{{query}}` будет заменён на запрос пользователя
3. Если этих двух шаблонов не будет в промпте, результаты будут непредсказуемыми
4. Каждая цитата в списке цитат формируется в формате:
```
--- Source X ---
```xml
<source id="Z">
Lorem ipsum dolor sit amet
<пустая строка>
</source>
```
5. Если в этой директории нет файла `sys_prompt.txt`, то будет применён промпт по умолчанию (см. функцию `generate_answer()`).
5. При вызове `rag.py` указать путь к файлу промпта, используя аргумент `--sys-prompt $путь_к_файлу`
6. Если указанного файла не существует, то будет применён промпт по умолчанию.
Посмотреть полный промпт можно указав аргумент `--show_prompt` при вызове `rag.py`.
### Неплохие лёгкие модели
### Неплохие модели для экспериментов
Для эмбеддинга:
Обозначения:
* ☑️ — по умолчанию
* 🧠 — размышляющая
* 🏋️ — требуются ресурсы
- `sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2` (по умолчанию, хорошо адаптирована под русский язык)
- `nomad-embed-text` (популярная)
#### Эмбеддинг
- [`sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2`](https://hf.co/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2) ☑️
- [`nomad-embed-text`](https://ollama.com/library/nomad-embed-text)
- ...
Для генерации ответов:
#### Ранжирование
- `qwen2.5:3b` (по умолчанию)
- `qwen3:8b`
- `gemma3n:e2b`
- `phi4-mini:3.8b`
- `qwen2.5:1.5b`
- [`cross-encoder/ms-marco-MMarco-mMiniLMv2-L12-V1`](https://hf.co/cross-encoder/ms-marco-MMarco-mMiniLMv2-L12-V1) ☑️
- `cross-encoder/ms-marco-MiniLM-L-6-v2`
- `cross-encoder/ms-marco-TinyBERT-L-2-v2`
- ...
> [!NOTE]
> Чем меньше млрд параметров (b, billion), тем меньше вероятности получить корректный ответ на не-английском языке.
> Такие модели работают быстро, но качество ответов низкое.
> Чем больше параметров, тем лучше и медленее ответы.
> Другие можно найти здесь: https://github.com/AlexeyMalafeev/ruformers
#### Генеративные
Перечислен список: по убыванию качества ответов и размера модели, по возрастанию скорости ответов на обычном домашнем ПК.
- [`deepseek-r1:8b`](https://ollama.com/library/deepseek-r1) 🏋️🧠
- [`qwen3:8b`](https://ollama.com/library/qwen3) 🏋️🧠
- [`dolphin3:8b`](https://ollama.com/library/dolphin3)🏋️
- [`cogito:8b`](https://ollama.com/library/cogito)🏋️
- [`openchat:7b`](https://ollama.com/library/openchat) 🏋️☑️
- [`phi4-mini:3.8b`](https://ollama.com/library/phi4-mini)
- [`gemma3:4b`](https://ollama.com/library/gemma3)
- [`gemma3n:e4b`](https://ollama.com/library/gemma3n)
- [`gemma3n:e2b`](https://ollama.com/library/gemma3n)
<details>
<summary>Полный список лёгких и средних моделей, которые можно использовать не только в RAG</summary>
```
codegemma:2b
codegemma:7b
codellama:7b
codellama:13b
codellama:34b
codeqwen:1.5b
codeqwen:7b
codestral:22b
deepcoder:1.5b
deepcoder:14b
deepseek-coder:1.3b
deepseek-coder:6.7b
deepseek-coder:33b
deepseek-coder-v2:16b
deepseek-r1:1.5b
deepseek-r1:7b
deepseek-r1:8b
deepseek-r1:14b
deepseek-r1:32b
devstral:24b
dolphin3:8b
gemma:2b
gemma:7b
gemma3:1b
gemma3:4b
gemma3:12b
gemma3:27b
gemma3:270m
gemma3n:e2b
gemma3n:e4b
gpt-oss:20b
granite-code:3b
granite-code:8b
granite-code:20b
granite-code:34b
llama2:7b
llama2:13b
llama3:8b
llama3.1:8b
llama3.2:1b
llama3.2:3b
llava-llama3:8b
magistral:24b
mistral:7b
mistral-nemo:12b
mistral-small:22b
mistral-small:24b
mixtral:8x7b
mxbai-embed-large:latest
nomic-embed-text:latest
openthinker:7b
openthinker:32b
phi:2.7b
phi3:3.8b
phi3:14b
phi3:instruct
phi3:medium
phi3:mini
phi3.5:3.8b
phi4:14b
phi4-mini-reasoning:3.8b
phi4-mini:3.8b
phi4-reasoning:14b
qwen:0.5b
qwen:1.8b
qwen:4b
qwen:7b
qwen:14b
qwen:32b
qwen2:0.5b
qwen2:1.5b
qwen2:7b
qwen2.5:0.5b
qwen2.5:1.5b
qwen2.5:3b
qwen2.5:7b
qwen2.5:14b
qwen2.5:32b
qwen2.5-coder:0.5b
qwen2.5-coder:1.5b
qwen2.5-coder:3b
qwen2.5-coder:7b
qwen2.5-coder:14b
qwen2.5-coder:32b
qwen3:0.6b
qwen3:1.7b
qwen3:4b
qwen3:8b
qwen3:14b
qwen3:30b
qwen3:32b
qwen3-coder:30b
qwq:32b
smollm2:1.7m
smollm2:135m
smollm2:360m
stable-code:3b
stable-code:instruct
starcoder2:3b
starcoder2:7b
starcoder2:15b
```
</details>
## Дисклеймер