qwen3:8b вместо qwen2.5, отмена правки и пересоздание тегов

Замер на наших задачах (разбор 8 фраз + теги для 6 предметов):
  qwen2.5:7b  разбор 8/8, но теги «электротool Makita», «вoltage meter»
              (первая буква кириллическая), «многофункциональный мера» —
              модель думает по-английски и переводит на ходу;
  qwen3:8b    разбор 8/8, теги на нормальном русском.
Плата — примерно на треть медленнее на тегах. Теги важнее: по ним вещь
и находится.

Поддержка моделей-ризонеров: ollama.chat получил think=False. Без него
qwen3 тратит весь бюджет ответа на внутренний монолог и возвращает пустой
content — на первом прогоне модель выглядела нерабочей.

Разбор ответа с тегами укреплён: qwen3 иногда присылает объект
{"name":..., "synonyms":[...]} вместо списка строк, и он попадал в теги
целиком как строка. Теперь достаётся вложенный список, отсеиваются дубликаты
в разном регистре, вложенные объекты, bool и слишком длинные строки.

По замечаниям Алекса в правке предмета:
- кнопка «Отмена» — раньше открытую форму можно было только сохранить или
  удалить вещь целиком;
- кнопка «🔄 Пересоздать теги» — после смены модели теги остаются старыми,
  и это способ обновить их, не перезаводя вещь. Новый список показывается,
  но не сохраняется молча: его ещё можно поправить руками.

В README добавлен раздел «Какую модель выбрать» с замерами и требованиями
к своей модели для тех, кто ставит приложение себе.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-30 18:51:13 +03:00
co-authored by Claude Opus 5
parent 39c807d4de
commit 01d7f17f89
8 changed files with 197 additions and 16 deletions
+42 -3
View File
@@ -16,10 +16,49 @@
Модели (на машине с Ollama):
```
ollama pull qwen2.5:7b разбор фраз и теги
ollama pull bge-m3 поиск по смыслу (необязательно)
ollama pull qwen3:8b разбор фраз и теги
ollama pull bge-m3 поиск по смыслу
```
### Какую модель выбрать
Обе задачи русские, и требование к модели одно: она должна **думать
по-русски**, а не переводить с английского на ходу. Замеры на наших же
задачах — разбор восьми фраз и генерация тегов для шести предметов:
| Модель | Размер | Разбор фраз | Русский в тегах | Скорость |
|---|---|---|---|---|
| **`qwen3:8b`** | 5 ГБ | 8/8 | чистый | 2,5 с на предмет |
| `qwen2.5:7b` | 4,7 ГБ | 8/8 | «электротool Makita» | 1,8 с |
Разница видна именно на тегах — по ним вещь потом и находится:
```
qwen2.5: шуруповёрт Makita → «электротool Makita», «удлинитель для шуруповерта»
мультиметр → «многофункциональный мера», «вoltage meter»
qwen3: изолента → «изоляционная лента», «лента для изоляции», «ПВХ-лента»
саморезы 4х50 → «шурупы по дереву», «крепёжный элемент»
```
У `qwen2.5` в слове «вoltage» первая буква кириллическая, а «электротool» —
гибрид двух языков. В поиске такие теги бесполезны.
**Что учесть, выбирая свою модель:**
- **Меньше 7B на русском обычно плохи** — путают падежи и сваливаются
в английский. `qwen2.5-coder:1.5b` для этой задачи не годится.
- **Модели-ризонеры** (`qwen3`, `deepseek-r1`) тратят бюджет ответа на
размышления и возвращают пустоту. В `ollama.py` это гасится `think=False`;
добавляя свою, проверьте, что она отвечает, а не молчит.
- **Формат важнее красноречия.** Приложение ждёт строгий JSON. `qwen3` иногда
присылает объект вместо списка тегов — разбор это переживает, но модель,
совсем не держащая формат, будет постоянно сваливаться на регулярки.
- **Эмбеддер обязан быть многоязычным** — см. раздел про поиск.
Модель выбирается в настройках (вкладка **⚙**) из реально установленных.
После смены у записанных вещей теги остаются прежними; обновить их можно
кнопкой **«🔄 Пересоздать теги»** в карточке.
## Установка
Положите `install.cmd` в пустую папку и запустите — он скачает проект, создаст
@@ -61,7 +100,7 @@ start.cmd запускает сервер и печатает адреса
| Переменная | По умолчанию | Зачем |
|---|---|---|
| `OLLAMA_HOST` | `http://localhost:11434` | адрес Ollama |
| `HLAMINGO_CHAT_MODEL` | `qwen2.5:7b` | разбор фраз и теги |
| `HLAMINGO_CHAT_MODEL` | `qwen3:8b` | разбор фраз и теги |
| `HLAMINGO_EMBED_MODEL` | `bge-m3` | поиск по смыслу |
| `HLAMINGO_PORT` | `5000` | порт веб-интерфейса |
| `HLAMINGO_DATA_DIR` | — | другая папка для данных и `.env`; используется тестами |