Files
hotels/SESSION_HISTORY.md
Фёдор 0cf3297290 Проект аудита отелей: основные скрипты и документация
- Краулеры: 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
2025-10-16 10:52:09 +03:00

17 KiB
Raw Blame History

📚 ИСТОРИЯ СЕССИИ - ГИБРИДНЫЙ АУДИТ ОТЕЛЕЙ

Дата: 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:

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)

Запуск:

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)

📝 ВАЖНЫЕ КОМАНДЫ:

Запуск сервисов:

# 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 &

Мониторинг:

# Проверка прогресса эмбеддингов
python3 check_progress.py

# Проверка запущенных процессов
ps aux | grep uvicorn
ps aux | grep python3

# Логи
tail -f embeddings_processing.log

Тестирование:

# Гибридный аудит Чукотки
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 доступ:

ssh root@185.197.75.249
cd /root/engine/public_oversight/hotels

📊 СТАТИСТИКА:

База данных:

  • Всего отелей: 116
  • Всего страниц: 52,702
  • Обработано отелей: 64
  • Всего chunks: 52,334
  • Осталось обработать: 52 отеля

Регионы:

  • Всего регионов с эмбеддингами: зависит от обработки
  • Протестированы: Чукотский АО, Камчатский край

🎯 СЛЕДУЮЩИЕ ШАГИ:

1. Завершить обработку эмбеддингов:

# Продолжить обработку оставшихся 52 отелей
python3 process_all_hotels_embeddings.py

2. Настроить n8n workflow:

  • Импортировать промпт из prompt_json.txt
  • Настроить Loop с 17 вопросами
  • Подключить PostgreSQL для регулярок
  • Добавить HTTP Request для Natasha NER

3. Открыть порт 8004 для Natasha API:

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 И ВОССТАНОВЛЕНИЕ:

Важные файлы для бэкапа:

# Конфигурация
.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