Files
hotels/SESSION_HISTORY.md
Фёдор 684fada337 🚀 Full project sync: Hotels RAG & Audit System
 Major Features:
- Complete RAG system for hotel website analysis
- Hybrid audit with BGE-M3 embeddings + Natasha NER
- Universal horizontal Excel reports with dashboards
- Multi-region processing (SPb, Orel, Chukotka, Kamchatka)

📊 Completed Regions:
- Орловская область: 100% (36/36)
- Чукотский АО: 100% (4/4)
- г. Санкт-Петербург: 93% (893/960)
- Камчатский край: 87% (89/102)

🔧 Infrastructure:
- PostgreSQL with pgvector extension
- BGE-M3 embeddings API
- Browserless for web scraping
- N8N workflows for automation
- S3/Nextcloud file storage

📝 Documentation:
- Complete DB schemas
- API documentation
- Setup guides
- Status reports
2025-10-27 22:49:42 +03:00

497 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 📚 ИСТОРИЯ СЕССИИ - ГИБРИДНЫЙ АУДИТ ОТЕЛЕЙ
**Дата:** 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