- Краулеры: smart_crawler.py, regional_crawler.py - Аудит: audit_orel_to_excel.py, audit_chukotka_to_excel.py - РКН проверка: check_rkn_registry.py, recheck_unclear_rkn.py - Отчёты: create_orel_horizontal_report.py - Обработка: process_all_hotels_embeddings.py - Документация: README.md, DB_SCHEMA_REFERENCE.md
496 lines
17 KiB
Markdown
496 lines
17 KiB
Markdown
# 📚 ИСТОРИЯ СЕССИИ - ГИБРИДНЫЙ АУДИТ ОТЕЛЕЙ
|
||
|
||
**Дата:** 13 октября 2025
|
||
**Участник:** Фёдор
|
||
**Задача:** Создание гибридного аудита отелей с семантическим поиском, регулярками и Natasha NER
|
||
|
||
---
|
||
|
||
## 🎯 **ЧТО СДЕЛАНО:**
|
||
|
||
### **1. СЕМАНТИЧЕСКИЙ ПОИСК (BGE-M3 Embeddings)**
|
||
|
||
✅ **Создана таблица `hotel_website_chunks`:**
|
||
- Структура: `id`, `text`, `metadata` (JSONB), `embedding` (vector 1024)
|
||
- Metadata содержит: `hotel_id`, `url`, `hotel_name`, `region_name`
|
||
- Всего обработано: **64 отеля**, **52,334 chunks**
|
||
|
||
✅ **Создан скрипт обработки:** `process_all_hotels_embeddings.py`
|
||
- Chunk Size: 600 символов
|
||
- Chunk Overlap: 100 символов
|
||
- Batch Size: 8 chunks
|
||
- Retry логика: 3 попытки с увеличением timeout
|
||
|
||
✅ **BGE-M3 API:**
|
||
- URL: `http://147.45.146.17:8002/embed`
|
||
- API Key: `22564b177aa73b6ac0b8642d7773350ff4c01d4983f028beff15ea247f09fa89`
|
||
- Модель: BAAI/bge-m3 (1024 размерность)
|
||
|
||
✅ **Semantic Search API:** `semantic_search_api.py`
|
||
- Порт: 8001
|
||
- Эндпоинты: `/stats`, `/search`
|
||
- Поиск по vector similarity с фильтрами
|
||
|
||
✅ **Интеграция в веб-интерфейс:**
|
||
- Добавлен семантический поиск в чат-бот
|
||
- Развёрнуто в продакшене: `hotel.klientprav.tech`
|
||
|
||
---
|
||
|
||
### **2. ГИБРИДНЫЙ АУДИТ (Семантика + Регулярки + Natasha)**
|
||
|
||
✅ **Установлена Natasha:**
|
||
```bash
|
||
pip install natasha --break-system-packages
|
||
```
|
||
|
||
✅ **Создан гибридный аудит:** `hybrid_audit_chukotka.py`
|
||
- Комбинирует 3 метода: семантику (40%), регулярки (40%), NER (20%)
|
||
- Генерирует Excel отчёты с цитатами и URL
|
||
- Протестирован на 4 отелях Чукотки
|
||
|
||
✅ **Результаты тестов:**
|
||
- Гостиница «Певек»: 4.36/18 (24.2%)
|
||
- «Гостевой дом из бруса»: 3.16/18 (17.6%)
|
||
- Отель "Чукотка": 2.64/18 (14.7%)
|
||
- «База морских экспедиций Алеут»: 2.04/18 (11.3%)
|
||
|
||
---
|
||
|
||
### **3. ИНТЕГРАЦИЯ С n8n**
|
||
|
||
✅ **Созданы промпты для AI Agent:**
|
||
- `prompt.txt` (21 KB) - полный детальный
|
||
- `prompt_short.txt` (2.1 KB) - краткий
|
||
- **`prompt_json.txt` (3.0 KB)** - **JSON формат (РЕКОМЕНДУЕТСЯ!)**
|
||
|
||
✅ **17 вопросов для аудита:**
|
||
- `questions_17.txt` - текстовый формат
|
||
- `questions_17.json` - JSON формат
|
||
- **Критерий #6 (Роскомнадзор) проверяется отдельно!**
|
||
|
||
✅ **Code Nodes для n8n:**
|
||
- `n8n_code_generate_questions.js` - генерирует 17 SQL запросов
|
||
- `n8n_code_parse_json.js` - парсит JSON ответы от AI Agent
|
||
- `n8n_code_check_regex.js` - проверяет регулярками
|
||
- `n8n_code_natasha_ner.js` - вызывает Natasha NER API
|
||
|
||
✅ **Примеры и документация:**
|
||
- `n8n_example_json.json` - примеры ответов
|
||
- `N8N_SETUP.md` - инструкция по настройке
|
||
- `N8N_FILES_SUMMARY.md` - полная сводка файлов
|
||
- `N8N_HTTP_REQUEST_NATASHA.md` - настройка HTTP Request для Natasha
|
||
|
||
---
|
||
|
||
### **4. NATASHA NER API**
|
||
|
||
✅ **Создан FastAPI сервис:** `natasha_ner_api.py`
|
||
- Порт: **8004**
|
||
- Эндпоинты:
|
||
- `GET /` - информация
|
||
- `GET /health` - проверка здоровья
|
||
- `POST /extract` - полное извлечение
|
||
- `POST /extract_simple` - упрощённое (для n8n)
|
||
|
||
✅ **Запуск:**
|
||
```bash
|
||
cd /root/engine/public_oversight/hotels
|
||
python3 -m uvicorn natasha_ner_api:app --host 0.0.0.0 --port 8004 --reload
|
||
```
|
||
|
||
✅ **Доступ из n8n:**
|
||
- Локально: `http://localhost:8004`
|
||
- Извне: `http://185.197.75.249:8004`
|
||
|
||
✅ **Примеры cURL:** `natasha_curl_example.sh`
|
||
|
||
---
|
||
|
||
## 🗄️ **БАЗА ДАННЫХ:**
|
||
|
||
### **PostgreSQL:**
|
||
- Host: `147.45.189.234`
|
||
- Port: `5432`
|
||
- Database: `default_db`
|
||
- User: `gen_user`
|
||
- Password: `2~~9_^kVsU?2^S`
|
||
|
||
### **Таблицы:**
|
||
|
||
**1. `hotel_main`** - основная информация об отелях
|
||
- `id` (UUID)
|
||
- `full_name` (TEXT)
|
||
- `region_name` (TEXT)
|
||
|
||
**2. `hotel_website_processed`** - обработанные страницы
|
||
- `hotel_id` (UUID)
|
||
- `cleaned_text` (TEXT)
|
||
- `url` (TEXT)
|
||
|
||
**3. `hotel_website_chunks`** - chunks с эмбеддингами
|
||
- `id` (UUID)
|
||
- `text` (TEXT)
|
||
- `metadata` (JSONB) - содержит `hotel_id`, `url`, `hotel_name`, `region_name`
|
||
- `embedding` (vector 1024)
|
||
|
||
**4. `hotel_audit_results`** - результаты аудита
|
||
- `hotel_id` (UUID)
|
||
- `total_score` (FLOAT)
|
||
- `criteria_results` (JSONB)
|
||
|
||
---
|
||
|
||
## 📊 **18 КРИТЕРИЕВ АУДИТА:**
|
||
|
||
1. Юридическая идентификация и верификация (ИНН, ОГРН)
|
||
2. Адрес
|
||
3. Контакты (телефон, email)
|
||
4. Режим работы
|
||
5. Политика ПДн (152-ФЗ)
|
||
6. **Роскомнадзор (реестр)** ← проверяется отдельно!
|
||
7. Договор-оферта / Правила оказания услуг
|
||
8. Рекламации и споры
|
||
9. Цены/прайс
|
||
10. Способы оплаты
|
||
11. Онлайн-оплата
|
||
12. Онлайн-бронирование
|
||
13. FAQ
|
||
14. Доступность для ЛОВЗ
|
||
15. Партнёры/бренды
|
||
16. Команда/сотрудники
|
||
17. Уголок потребителя
|
||
18. Актуальность документов
|
||
|
||
---
|
||
|
||
## 🚀 **ЗАПУЩЕННЫЕ СЕРВИСЫ:**
|
||
|
||
### **1. Web Interface (продакшн):**
|
||
- URL: `http://hotel.klientprav.tech`
|
||
- Порт: 8000
|
||
- Процесс: `python3 -m uvicorn web_interface:app --host 0.0.0.0 --port 8000 --reload`
|
||
|
||
### **2. Semantic Search API:**
|
||
- URL: `http://localhost:8001`
|
||
- Порт: 8001
|
||
- Процесс: `python3 -m uvicorn semantic_search_api:app --host 0.0.0.0 --port 8001 --reload`
|
||
|
||
### **3. BGE-M3 Embedding API:**
|
||
- URL: `http://147.45.146.17:8002`
|
||
- API Key: `22564b177aa73b6ac0b8642d7773350ff4c01d4983f028beff15ea247f09fa89`
|
||
|
||
### **4. Natasha NER API:**
|
||
- URL: `http://185.197.75.249:8004`
|
||
- Порт: 8004
|
||
- Процесс: `python3 -m uvicorn natasha_ner_api:app --host 0.0.0.0 --port 8004 --reload`
|
||
|
||
---
|
||
|
||
## 📁 **КЛЮЧЕВЫЕ ФАЙЛЫ:**
|
||
|
||
### **Скрипты:**
|
||
- `process_all_hotels_embeddings.py` - обработка всех отелей в chunks
|
||
- `check_progress.py` - мониторинг прогресса
|
||
- `hybrid_audit_chukotka.py` - гибридный аудит
|
||
- `semantic_audit_chukotka.py` - только семантический аудит
|
||
- `test_comfort_hotel.py` - тест на отеле Комфорт
|
||
|
||
### **API сервисы:**
|
||
- `semantic_search_api.py` - семантический поиск
|
||
- `natasha_ner_api.py` - Natasha NER
|
||
- `web_interface.py` - веб-интерфейс с чат-ботом
|
||
|
||
### **n8n интеграция:**
|
||
- `prompt_json.txt` - промпт для AI Agent (JSON формат)
|
||
- `questions_17.json` - 17 вопросов
|
||
- `n8n_code_generate_questions.js` - генерация SQL запросов
|
||
- `n8n_code_parse_json.js` - парсинг ответов AI Agent
|
||
- `n8n_code_check_regex.js` - проверка регулярками
|
||
- `n8n_code_natasha_ner.js` - вызов Natasha NER
|
||
- `natasha_curl_example.sh` - примеры cURL
|
||
|
||
### **Документация:**
|
||
- `N8N_SETUP.md` - настройка n8n
|
||
- `N8N_FILES_SUMMARY.md` - сводка файлов
|
||
- `N8N_HTTP_REQUEST_NATASHA.md` - настройка HTTP Request
|
||
- `NATASHA_API_USAGE.md` - использование Natasha API
|
||
- `QUICK_START.md` - быстрый старт проекта
|
||
- `PROGRESS_STATUS.md` - статус проекта
|
||
|
||
### **Отчёты:**
|
||
- `hybrid_audit_chukotka_20251013_162428.xlsx` - последний гибридный отчёт
|
||
- `semantic_audit_chukotka_20251013_141737.xlsx` - семантический отчёт
|
||
- `audit_Чукотский_автономный_округ_20251012_121144.xlsx` - старый отчёт
|
||
|
||
---
|
||
|
||
## 🔄 **WORKFLOW В n8n:**
|
||
|
||
```
|
||
┌─────────────────────────────┐
|
||
│ 1. Start (hotel_id) │
|
||
└──────────────┬──────────────┘
|
||
↓
|
||
┌─────────────────────────────┐
|
||
│ 2. Code: Generate 17 SQL │ ← n8n_code_generate_questions.js
|
||
└──────────────┬──────────────┘
|
||
↓
|
||
┌─────────────────────────────┐
|
||
│ 3. Loop Over Items (17x) │
|
||
└──────────────┬──────────────┘
|
||
↓
|
||
┌─────────────────────────────┐
|
||
│ 4. PostgreSQL: Regex Search │ ← Ищет в hotel_website_processed
|
||
│ (с агрегацией GROUP BY) │
|
||
└──────────────┬──────────────┘
|
||
↓
|
||
┌─────────────────────────────┐
|
||
│ 5. Code: Process Results │ ← Обрабатывает пустые результаты
|
||
└──────────────┬──────────────┘
|
||
↓
|
||
┌─────────────────────────────┐
|
||
│ 6. HTTP Request: Natasha │ ← http://185.197.75.249:8004
|
||
│ (только для критериев │ /extract_simple
|
||
│ 1 и 2) │
|
||
└──────────────┬──────────────┘
|
||
↓
|
||
┌─────────────────────────────┐
|
||
│ 7. Code: Combine Scores │ ← final_score = MAX(regex, ner)
|
||
└──────────────┬──────────────┘
|
||
↓
|
||
┌─────────────────────────────┐
|
||
│ 8. Aggregate (17 → 1) │
|
||
└──────────────┬──────────────┘
|
||
↓
|
||
┌─────────────────────────────┐
|
||
│ 9. PostgreSQL: Save Results │
|
||
└─────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 **РЕЗУЛЬТАТЫ ТЕСТОВ:**
|
||
|
||
### **Тест 1: Семантический аудит Чукотки**
|
||
```
|
||
Гостиница «Певек»: 10.50/18 (58.3%)
|
||
«Гостевой дом из бруса»: 8.60/18 (47.8%)
|
||
Отель "Чукотка": 7.40/18 (41.1%)
|
||
«База морских экспедиций Алеут»: 2.00/18 (11.1%)
|
||
```
|
||
|
||
### **Тест 2: Гибридный аудит Чукотки**
|
||
```
|
||
Гостиница «Певек»: 4.36/18 (24.2%)
|
||
«Гостевой дом из бруса»: 3.16/18 (17.6%)
|
||
Отель "Чукотка": 2.64/18 (14.7%)
|
||
«База морских экспедиций Алеут»: 2.04/18 (11.3%)
|
||
```
|
||
|
||
### **Тест 3: Отель "Комфорт" (Камчатка)**
|
||
```
|
||
n8n AI Agent: 6.0/17 (35.3%)
|
||
Регулярки: 5.0/17 (29.4%)
|
||
Разница: AI лучше на 1.0 балл
|
||
```
|
||
|
||
**Вывод:** Гибридный подход (AI + Regex + NER) даёт лучшие результаты!
|
||
|
||
---
|
||
|
||
## 🔧 **ТЕХНИЧЕСКИЙ СТЕК:**
|
||
|
||
### **Backend:**
|
||
- Python 3.12
|
||
- FastAPI
|
||
- PostgreSQL 14+ с pgvector
|
||
- psycopg2
|
||
- Sentence Transformers (BGE-M3)
|
||
- Natasha (NER)
|
||
|
||
### **Frontend:**
|
||
- HTML/CSS/JavaScript
|
||
- Веб-интерфейс на FastAPI
|
||
|
||
### **Automation:**
|
||
- n8n (workflow automation)
|
||
- Ollama (LLM для AI Agent)
|
||
|
||
---
|
||
|
||
## 📝 **ВАЖНЫЕ КОМАНДЫ:**
|
||
|
||
### **Запуск сервисов:**
|
||
```bash
|
||
# Web Interface (продакшн)
|
||
cd /root/engine/public_oversight/hotels
|
||
python3 -m uvicorn web_interface:app --host 0.0.0.0 --port 8000 --reload
|
||
|
||
# Semantic Search API
|
||
python3 -m uvicorn semantic_search_api:app --host 0.0.0.0 --port 8001 --reload
|
||
|
||
# Natasha NER API
|
||
python3 -m uvicorn natasha_ner_api:app --host 0.0.0.0 --port 8004 --reload
|
||
|
||
# Обработка эмбеддингов (фоновый процесс)
|
||
nohup python3 process_all_hotels_embeddings.py > embeddings_processing.log 2>&1 &
|
||
```
|
||
|
||
### **Мониторинг:**
|
||
```bash
|
||
# Проверка прогресса эмбеддингов
|
||
python3 check_progress.py
|
||
|
||
# Проверка запущенных процессов
|
||
ps aux | grep uvicorn
|
||
ps aux | grep python3
|
||
|
||
# Логи
|
||
tail -f embeddings_processing.log
|
||
```
|
||
|
||
### **Тестирование:**
|
||
```bash
|
||
# Гибридный аудит Чукотки
|
||
python3 hybrid_audit_chukotka.py
|
||
|
||
# Тест отеля Комфорт
|
||
python3 test_comfort_hotel.py
|
||
|
||
# Проверка Natasha API
|
||
curl http://localhost:8004/health
|
||
```
|
||
|
||
---
|
||
|
||
## 🌐 **ДОСТУП К СЕРВИСАМ:**
|
||
|
||
### **Из локальной сети:**
|
||
- Web Interface: `http://185.197.75.249:8000`
|
||
- Semantic Search: `http://185.197.75.249:8001`
|
||
- Natasha NER: `http://185.197.75.249:8004`
|
||
|
||
### **Из интернета:**
|
||
- Продакшн: `http://hotel.klientprav.tech`
|
||
|
||
### **SSH доступ:**
|
||
```bash
|
||
ssh root@185.197.75.249
|
||
cd /root/engine/public_oversight/hotels
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 **СТАТИСТИКА:**
|
||
|
||
### **База данных:**
|
||
- Всего отелей: **116**
|
||
- Всего страниц: **52,702**
|
||
- Обработано отелей: **64**
|
||
- Всего chunks: **52,334**
|
||
- Осталось обработать: **52 отеля**
|
||
|
||
### **Регионы:**
|
||
- Всего регионов с эмбеддингами: **зависит от обработки**
|
||
- Протестированы: Чукотский АО, Камчатский край
|
||
|
||
---
|
||
|
||
## 🎯 **СЛЕДУЮЩИЕ ШАГИ:**
|
||
|
||
### **1. Завершить обработку эмбеддингов:**
|
||
```bash
|
||
# Продолжить обработку оставшихся 52 отелей
|
||
python3 process_all_hotels_embeddings.py
|
||
```
|
||
|
||
### **2. Настроить n8n workflow:**
|
||
- Импортировать промпт из `prompt_json.txt`
|
||
- Настроить Loop с 17 вопросами
|
||
- Подключить PostgreSQL для регулярок
|
||
- Добавить HTTP Request для Natasha NER
|
||
|
||
### **3. Открыть порт 8004 для Natasha API:**
|
||
```bash
|
||
sudo ufw allow 8004/tcp
|
||
```
|
||
|
||
### **4. Масштабировать на все регионы:**
|
||
- Запустить аудит для всех 116 отелей
|
||
- Сгенерировать отчёты по регионам
|
||
- Сохранить результаты в БД
|
||
|
||
---
|
||
|
||
## 🐛 **ИЗВЕСТНЫЕ ПРОБЛЕМЫ:**
|
||
|
||
1. **API таймауты:** Решено через retry логику и уменьшение batch size
|
||
2. **Дубли в PostgreSQL результатах:** Решено через `GROUP BY` и агрегацию
|
||
3. **n8n AI Agent не всегда ищет в базе:** Решено через улучшенный промпт
|
||
4. **Регулярки `\b` не работают в PostgreSQL:** Заменены на `\y` или убраны
|
||
|
||
---
|
||
|
||
## 📞 **КОНТАКТЫ И ССЫЛКИ:**
|
||
|
||
- **BGE-M3 API:** `http://147.45.146.17:8002/docs`
|
||
- **Graphiti API:** `http://185.197.75.249:9100/docs` (не используется для аудита)
|
||
- **Продакшн:** `http://hotel.klientprav.tech`
|
||
- **Сервер:** `185.197.75.249`
|
||
|
||
---
|
||
|
||
## 💾 **BACKUP И ВОССТАНОВЛЕНИЕ:**
|
||
|
||
### **Важные файлы для бэкапа:**
|
||
```bash
|
||
# Конфигурация
|
||
.env
|
||
|
||
# Скрипты
|
||
process_all_hotels_embeddings.py
|
||
hybrid_audit_chukotka.py
|
||
semantic_search_api.py
|
||
natasha_ner_api.py
|
||
web_interface.py
|
||
|
||
# n8n интеграция
|
||
prompt_json.txt
|
||
questions_17.json
|
||
n8n_code_*.js
|
||
|
||
# Документация
|
||
*.md
|
||
```
|
||
|
||
### **Восстановление сессии:**
|
||
1. SSH на сервер: `ssh root@185.197.75.249`
|
||
2. Перейти в проект: `cd /root/engine/public_oversight/hotels`
|
||
3. Проверить сервисы: `ps aux | grep uvicorn`
|
||
4. Запустить недостающие сервисы (см. "Запуск сервисов")
|
||
5. Проверить прогресс: `python3 check_progress.py`
|
||
|
||
---
|
||
|
||
## 🎉 **ДОСТИЖЕНИЯ:**
|
||
|
||
✅ Создана система семантического поиска с BGE-M3
|
||
✅ Интегрирована Natasha NER для извлечения сущностей
|
||
✅ Создан гибридный аудит (3 метода)
|
||
✅ Подготовлена полная интеграция с n8n
|
||
✅ Развёрнуто в продакшене
|
||
✅ Протестировано на реальных отелях
|
||
|
||
---
|
||
|
||
**Дата создания:** 13 октября 2025
|
||
**Автор:** AI Assistant + Фёдор
|
||
**Версия:** 1.0
|
||
|
||
|
||
|
||
|
||
|
||
|