mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 09:55:03 +00:00
Session 2026-09-13: unify directions (canon+LLM-fallback, 966/1019), publisher dry_run fix, git repo, archive 8 changes, candidates-mail-ui WIP, docs
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
schema: spec-driven
|
||||
created: 2026-09-13
|
||||
skip_specs: true
|
||||
@@ -0,0 +1,51 @@
|
||||
## Design
|
||||
|
||||
### Единый канон направлений
|
||||
|
||||
Создать константу в `classifier/keywords.py` (или отдельный `directions.py`):
|
||||
|
||||
```python
|
||||
# Канонический список направлений (AGENT.MD, веб-форма): linux, tech, politics, games, electronics, llm
|
||||
DIRECTIONS_CANON = ["linux", "tech", "politics", "games", "electronics", "llm"]
|
||||
```
|
||||
|
||||
### classify.py:87
|
||||
|
||||
```python
|
||||
from classifier.keywords import DIRECTIONS_CANON # или импорт по месту
|
||||
...
|
||||
"direction": "одно из: " + ", ".join(sorted(DIRECTIONS_CANON)),
|
||||
```
|
||||
|
||||
(убрать локальный список `['linux','dev','ai','tech','games','electronics','media']`).
|
||||
|
||||
### web/app.py:130
|
||||
|
||||
```python
|
||||
directions=DIRECTIONS_CANON # вместо ['linux','dev','ai','tech','games','electronics','media']
|
||||
```
|
||||
|
||||
(импортировать из classifier.keywords, чтобы список был один).
|
||||
|
||||
### keywords.py DIRECTIONS
|
||||
|
||||
Привести ключи к канону:
|
||||
- оставить: linux, tech, games, electronics
|
||||
- добавить: politics (ключевые слова: политика, президент, выборы, закон, санкции, война, мир, госдума, кремль, etc.)
|
||||
- llm (ключевые слова: llm, gpt, нейросеть, claude, gemini, ollama, qwen, transformer, диффузия, sota, промпт, токен, fine-tune)
|
||||
- dev/media/ai — в каноне их НЕТ: dev-ключевые слова перенести частично в tech (разработка, программирование, код, api, backend) или оставить под tech; отсутствующие направления удалить (или оставить с пустым списком — классификатор их не выберет, т.к. канон в промпте ограничивает).
|
||||
|
||||
### Переклассификация
|
||||
|
||||
```bash
|
||||
cd /opt/vesti
|
||||
CLASSIFY_TIMEOUT=20 .venv/bin/python -m classifier.classify --db db/vesti.db --limit 1000
|
||||
```
|
||||
(обработает все 466 своих без direction; новые направления — только канонические).
|
||||
|
||||
### Верификация
|
||||
|
||||
- `openspec validate unify-directions` — чисто.
|
||||
- В БД после переклассификации: 0 постов is_own=1 без direction (или минимум),
|
||||
нет направлений вне канона (dev/media/ai остаются только legacy, не вновь).
|
||||
- Веб /candidates: фильтр по направлению показывает только канонические.
|
||||
@@ -0,0 +1,35 @@
|
||||
## Why
|
||||
|
||||
Канонический список направлений проекта: **linux, tech, politics, games, electronics, llm**
|
||||
(AGENT.MD, веб-форма fan-out). Но классификатор и веб используют ДРУГОЙ список:
|
||||
`linux, dev, ai, tech, games, electronics, media` (classify.py:87, web/app.py:130,
|
||||
keywords.py). Из-за этого:
|
||||
|
||||
- LLM получает на выбор dev/ai/media и никогда не предложит politics/llm;
|
||||
- по факту в БД у своих постов появились направления dev (102), media (50), ai (33),
|
||||
которых нет в каноне; при публикации fan-out по ним не сработает (веб-форма их не предлагает);
|
||||
- 466 из 847 своих постов остались БЕЗ направления (не нашлось ни совпадения по словарю
|
||||
под канон, ни LLM-варианта) — классификатору некорректно задавали список.
|
||||
|
||||
Нужно привести все места к единому канону направлений.
|
||||
|
||||
## What Changes
|
||||
|
||||
- Единый список направлений: `["linux", "tech", "politics", "games", "electronics", "llm"]`.
|
||||
- `classifier/classify.py:87` — промпт LLM: использовать канон вместо локального списка.
|
||||
- `web/app.py:130` — фильтр веба: канон.
|
||||
- `classifier/keywords.py` — DIRECTIONS: привести к канону (dev/media/ai → убрать или
|
||||
переименовать в tech/llm; добавить politics), чтобы словарь ставил только канонические.
|
||||
- Переклассифицировать 466 своих постов без направления (limit большой) — LLM теперь
|
||||
ставит politics/llm корректно.
|
||||
- Legacy-значения в БД (dev/media/ai) — не удалять (правило: физически ничего не удаляем),
|
||||
но при публикации они сами собой не выберутся (форма не предложит).
|
||||
|
||||
## Why Not
|
||||
|
||||
- Не удалять физически посты/направления — только корректно классифицировать дальше.
|
||||
|
||||
## Open Questions
|
||||
|
||||
- Маппинг старых dev/media/ai → новые? (пользователь сможет вручную поменять direction
|
||||
при approve; авто-маппинг не делаем пока.)
|
||||
@@ -0,0 +1,12 @@
|
||||
# unify-directions
|
||||
|
||||
- [x] Создан OpenSpec change (proposal/design)
|
||||
- [x] keywords.py: DIRECTIONS_CANON + привести DIRECTIONS к канону (add politics, llm; dev→tech, убрать media/ai)
|
||||
- [x] keywords.py: +golang (частый вариант имени Go) в linux и tech (по просьбе пользователя)
|
||||
- [x] classify.py:87: промпт → DIRECTIONS_CANON
|
||||
- [x] classify.py: LLM-fallback при dict-miss (словарь не дал → LLM, проверка канона) — убирает серые посты
|
||||
- [x] web/app.py:130: directions → DIRECTIONS_CANON
|
||||
- [x] Переклассификация 466 своих без direction (limit 1000) — 503+206 постов, LLM-fallback добор
|
||||
- [x] Проверка БД: нет новых направлений вне канона (dev/media/ai устранены; осталось 53 без direction — шум/личное, не новости)
|
||||
- [x] `openspec validate unify-directions` — чисто
|
||||
- [x] Бэкап после правки — `/tmp/vesti.db.bak-unify` + будет полный бэкап
|
||||
Reference in New Issue
Block a user