Для чего нужна данная статья? :
Создать wiki AI в которой реализована :
Авто-категоризация
Детекция спама
Оценка качества
Векторизация
Зачем Вам это уметь? :
1. Общедоступные вики (аналог Wikipedia, MDN, Fandom)
- Энциклопедии (например, технические, научные, игровые)
- Документация по программированию (Rust, Substrate, WebAssembly)
- Гейм-документация (гайды, лоры, механики игр)
- Исторические и образовательные вики (для учебных заведений)
🔧 Технологии:
✅ Actix Web / Axum + Tonic (gRPC)
✅ PostgreSQL / ClickHouse (хранение контента)
✅ WebSocket (реалтайм-обновления)
✅ WASM + WebRTC (фронтенд)
2. Корпоративные и закрытые вики (Confluence, Notion)
- Внутренние базы знаний компаний (HR, DevOps, IT-документация)
- Командные вики (разработка ПО, Agile-методологии)
- Корпоративные справочники (гайды, регламенты)
🔧 Технологии:
✅ OAuth2 / OIDC (авторизация)
✅ WebAuthn / mTLS (Zero Trust Security)
✅ Redis (активное кеширование)
✅ RBAC / ABAC (доступы к страницам)
3. Децентрализованные и P2P-вики (IPFS, Hypercore)
- Wiki без серверов (аналог Dat, IPFS)
- Tor-вики (анонимные базы знаний)
- Блокчейн-вики (NFT-метаданные, DAO)
🔧 Технологии:
✅ IPFS / Arweave (файлы)
✅ Substrate (блокчейн-логика)
✅ WebRTC / Libp2p (P2P-репликация)
✅ BLS-сигнатуры (криптографическая защита)
4. AI-генерируемые вики (LLM + AutoML)
- Самообучающиеся вики (AI подбирает источники)
- AI-редактируемые статьи (ChatGPT-like автодополнение)
- Генерация технической документации (Rust API, Substrate, OpenCV)
🔧 Технологии:
✅ DeepSeek AI / OpenAI API / Mistral
✅ Vector Search (Embeddings)
✅ GPU Acceleration (CUDA, wgpu)
✅ AutoML (обучение моделей)
5. Игровые вики с NFT и Web3
- Игровые базы знаний (NFT-скины, внутриигровые предметы)
- DAO-управляемые вики (игровые комьюнити голосуют за статьи)
- Игровые токены за контент (награды авторам)
🔧 Технологии:
✅ Metaplex (NFT)
✅ Solana / Ethereum (смарт-контракты)
✅ WebSocket (торговля в реальном времени)
✅ RabbitMQ / NATS (асинхронные задачи)
🏗️ 1. Общая Архитектура
Interface Layer (HTTP/WS)
│ Request Handlers │
Application Layer (Services)
│ Business Logic │
│ (Use Cases) │ │
Domain Layer (Core)
│ Entities │ Value Objects │
│ (Business Rules) │ (Validation) │
Infrastructure Layer
│ Repository │ Cache │ Event Publisher│
│ (Storage) │ (Redis/Mem) │ (Message Bus) │
📦 2. Domain Layer (Ядро Бизнес-Логики)
src/domain/entities.rs — Агрегаты
Ключевые особенности:
- Инкапсуляция: Все поля приватные, доступ через методы
- Бизнес-правила: Метод update_content() проверяет версию перед изменением
- Оптимистичная блокировка: version предотвращает конфликты при одновременном редактировании
src/domain/value_objects.rs — Объекты-Значения
Преимущества:
- ✅ Валидация в одном месте
- ✅ Невозможно создать невалидный Title
- ✅ Типобезопасность (нельзя передать String вместо Title)
src/domain/traits.rs — Абстракции (Interface Segregation)
Dependency Inversion: Domain слой зависит только от traits, не от конкретных реализаций.
⚙️ 3. Application Layer (Сервисы)
src/application/services/article_service.rs
Что делает сервис:
create_article() Валидация → Проверка дубликатов → Сохранение → Кэширование → Событие
get_article() Проверка кэша → Загрузка из БД → Кэширование → Событие просмотра
update_article() Загрузка → Проверка версии → Обновление → Инвалидация кэша
delete_article() Удаление → Инвалидация кэша → Событие удаления
Circuit Breaker Pattern: Защищает от cascade failures при проблемах с БД/кэшем.
🏭 4. Infrastructure Layer (Реализации)
src/infrastructure/repositories/article_repository.rs
Parking_lot RwLock:
- Multiple readers OR single writer
- Быстрее чем std::sync::RwLock
- Thread-safe доступ к данным
src/infrastructure/cache.rs
TTL Cleanup: Удаляет просроченные записи
src/infrastructure/events.rs
ArticleService → publish() → EventPublisher → broadcast → EventHandler
↓
Логирование/Аналитика/Уведомления
🌐 5. Interface Layer (HTTP + WebSocket)
src/main.rs — Handler Functions
HTTP Request → Actix-web → Handler → Service → Repository → Database
↓ ↓ ↓ ↓
Middleware Validation Business Storage
(Logger, (DTO) Logic (HashMap/FS)
Compress)
src/interface/websocket/mod.rs
Use Case: Real-time редактирование статей, уведомления об изменениях.
🔄 6. Поток Данных (Create Article Example)
1. HTTP POST /api/articles
{"title": "Rust", "content": "Hello", ...}
▼
2. Handler (main.rs)
- dto.validate()
- service.create_article(dto)
▼
3. ArticleService (article_service.rs)
- Title::new() → валидация
- Content::new() → валидация
- repository.find_by_title() → проверка дубликата
- Article::create() → создание агрегата
- repository.save() → сохранение
- cache.set() → кэширование
- event_publisher.publish() → событие
▼
4. InMemoryArticleRepository
- articles.write().insert(id, article)
- title_index.insert(slug, id)
▼
5. HTTP Response
{"success": true, "data": {...}, "timestamp": "..."}
📊 Обзор ML-Архитектуры
HTTP POST /api/articles
{"title": "...", "content": "..."}
▼
🧠 ML Pipeline (5 Компонентов)
│ 1. Классиф. │ │ 2. Безопас. │ │ 3. Оценка Качества │
│ Категорий │ │ Спам/Токсик │ │ Readability/Structure │
│ 4. Эмбедд. │ │ 5. Векторный│
│ Векторизация│ │ Поиск │
1 Текст конвертируется в lowercase
"Rust Programming" → "rust programming"
2 Поиск ключевых слов в тексте
"rust" найдено в категории Programming
3 Подсчёт scores для каждой категории
Programming: 0.8, Technology: 0.2
4 Нормализация (max = 1.0)
Programming: 0.8/0.8 = 1.0
5 Выбор категории с max score
Programming (confidence: 0.92)
🔍 Как Работает
Текст: "КУПИТЬ СЕЙЧАС!!! Скидка 90%!!! click here $$$"
│ 1. "купить" найдено → spam_score += 0.2 (20%) │
│ 2. "скидка" найдено → spam_score += 0.2 (40%) │
│ 3. "click here" найдено → spam_score += 0.2 (60%) │
│ 4. "$$$" найдено → spam_score += 0.2 (80%) │
│ 5. CAPS ratio = 0.7 → spam_score += 0.3 (110%) │
↓
spam_score = 1.0 (100%) → is_spam = true ❌
🔍 Пример Расчёта
Статья: "# Rust Programming\n\nRust is fast.\n\n```rust\nfn main() {}\n```"
│ Readability: │
│ avg_sentence_length = 3 слова │
│ avg_word_length = 4 символа │
│ score = 206.835 - 1.015*3 - 84.6*4 = 0.82 (82%) │
│ Completeness: │
│ word_count = 500 (>300) → +0.3 (30%) │
│ code_blocks = 1 (>0) → +0.2 (20%) │
│ links = 2 (>0) → +0.15 (15%) │
│ score = 0.65 (65%) │
│ Structure: │
│ "# " найдено → +0.3 (30%) │
│ "## " найдено → +0.2 (20%) │
│ "- " найдено → +0.2 (20%) │
│ "\n\n" найдено → +0.3 (30%) │
│ score = 1.0 (100%) │
│ Overall: 0.82*0.3 + 0.65*0.3 + 1.0*0.25 + 0.8*0.15 = 0.81 │
│ ✅ Качество: 81% (Excellent!) │
🔍 Как Работает Векторизация
Текст: "Rust is a programming language"
│ 1. SHA-256 Hash: │
│ [0x5a, 0x3f, 0x8c, 0x12, 0xab, 0xcd, 0xef, 0x90, ...] │
│ (32 байта = 256 бит) │
│ 2. Конвертация в f32 [-1, 1]: │
│ byte = 0x5a (90) → (90/255)*2-1 = -0.29 │
│ byte = 0x3f (63) → (63/255)*2-1 = -0.51 │
│ byte = 0x8c (140) → (140/255)*2-1 = 0.10 │
│ 3. Вектор (384 измерения): │
│ [-0.29, -0.51, 0.10, 0.78, -0.33, 0.45, ...] │
│ 4. L2 Нормализация: │
│ norm = sqrt((-0.29)² + (-0.51)² + ... ) = 12.5 │
│ vector = [-0.29/12.5, -0.51/12.5, ...] │
│ (длина вектора = 1.0) │
🔍 Косинусное Сходство (Similarity Search)
Вектор A: [0.1, 0.2, 0.3, ...] (Статья: "Rust Programming")
Вектор B: [0.1, 0.2, 0.3, ...] (Статья: "Introduction to Rust")
Вектор C: [0.9, 0.8, 0.7, ...] (Статья: "Cooking Recipes")
cosine_similarity(A, B) = 0.92 ✅ Похожи (92%)
cosine_similarity(A, C) = 0.15 ❌ Не похожи (15%)
🔍 Как Работает Поиск
Новая статья: "Rust Memory Safety"
Вектор: [0.12, -0.45, 0.78, ...]
│ Векторное хранилище: │
│ │ Article 1: "Rust Programming" │ │
│ │ Vector: [0.11, -0.44, 0.77, ...] │ │
│ │ Similarity: 0.95 ✅ │ │
│ │ Article 2: "Memory Management" │ │
│ │ Vector: [0.15, -0.40, 0.72, ...] │ │
│ │ Similarity: 0.87 ✅ │ │
│ │ Article 3: "Cooking Pasta" │ │
│ │ Vector: [0.85, 0.75, 0.65, ...] │ │
│ │ Similarity: 0.12 ❌ │ │
│ Результат (top-2): │
│ 1. "Rust Programming" (95%) │
│ 2. "Memory Management" (87%) │
ML Pipeline (Пошагово)
│ POST /api/articles │
│ {"title": "Rust Guide", "content": "Rust is safe..."} │
▼
│ 1. Handler: dto.validate() │
│ ✅ Title: 1-200 chars, ✅ Content: <1MB │
▼
│ 2. ML Pipeline (Parallel) │
│ │ 2.1 Classification Service │ │
│ │ Input: "Rust Guide" + "Rust is safe..." │ │
│ │ Output: {category: Programming, confidence: 0.92} │ │
│ │ 2.2 Safety Check │ │
│ │ Input: "Rust is safe..." │ │
│ │ Output: {is_spam: false, is_toxic: false} │ │
│ │ 2.3 Quality Service │ │
│ │ Input: "Rust Guide" + "Rust is safe..." │ │
│ │ Output: {overall: 0.78, readability: 0.82, ...} │ │
│ │ 2.4 Embedding Service │ │
│ │ Input: "Rust Guide Rust is safe..." │ │
│ │ Output: [0.12, -0.45, 0.78, ...] (384 dims) │ │
│ │ 2.5 Vector Store │ │
│ │ Input: [0.12, -0.45, 0.78, ...] │ │
│ │ Output: [(article_id, 0.87), (article_id, 0.65)] │ │
▼
│ 3. Article Creation │
│ - Auto-tags: ["programming", "rust", "safe", "guide"] │
│ - Category tag: ["category:programming"] │
│ - User tags: ["tutorial"] │
│ - Save to Repository + Vector Store + Cache │
▼
│ 4. Response │
│ { │
│ "success": true, │
│ "data": { "id": "...", "title": "Rust Guide", ... }, │
│ "ml_analysis": { │
│ "classification": {"category": "programming", ...}, │
│ "safety": {"is_spam": false, ...}, │
│ "quality": {"overall": 0.78, ...}, │
│ "similar_articles": [...], │
│ "auto_tags": ["programming", "rust", ...] │
│ } │
│ } │
🚀 Запуск и Тестирование
# Сборка
cargo build --release
# Запуск
cargo run
# Тесты
cargo test
# API Тесты
curl -X POST http://localhost:8080/api/articles \
-H "Content-Type: application/json" \
-d '{"title":"Test","content":"Content","tags":[],"publish_immediately":true,"author_id":null}'
curl http://localhost:8080/api/articles
curl http://localhost:8080/health