Разработка

ИИ Персонаж для страницы 404

ИИ Персонаж для страницы 404

🏗️ Архитектура веб-приложения: Аниме-персонаж для страницы 404

📋 Техническое задание

Цель:

Создать интерактивную страницу 404 с аниме-персонажем (девочка), который общается с пользователем через чат-интерфейс с поддержкой видео-анимаций и ИИ-ответов.


🎯 1. Архитектура системы

┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   Frontend      │    │   Backend API    │    │   AI Service    │
│   (React/Vue)   │◄──►│   (Node.js)      │◄──►│   (Hugging Face)│
└─────────────────┘    └──────────────────┘    └─────────────────┘
│                       │                       │
▼                       ▼                       ▼
┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   Video CDN     │    │   Database       │    │   Prompt Engine │
│   (Cloudinary)  │    │   (MongoDB)      │    │   (Custom)      │
└─────────────────┘    └──────────────────┘    └─────────────────┘

🎨 2. Frontend компоненты

2.1 Основная структура (React)

jsx Скопировать

Закрыть блок

// components/AnimeChat404.jsx
import React, { useState, useEffect } from 'react';
import VideoPlayer from './VideoPlayer';
import ChatBubble from './ChatBubble';
import MessageInput from './MessageInput';

const AnimeChat404 = () => {
const [currentVideo, setCurrentVideo] = useState('idle');
const [messages, setMessages] = useState([]);
const [isTyping, setIsTyping] = useState(false);

return (

setCurrentVideo('idle')}
/>

);
};

2.2 Видео-плеер для анимаций

jsx Скопировать

Закрыть блок

// components/VideoPlayer.jsx
const VideoPlayer = ({ videoState, onVideoEnd }) => {
const videoMap = {
idle: '/videos/character/idle_loop.mp4',
talking: '/videos/character/talking.mp4',
thinking: '/videos/character/thinking.mp4',
happy: '/videos/character/happy_reaction.mp4',
flirty: '/videos/character/flirty_wink.mp4', // 18+ контент
embarrassed: '/videos/character/embarrassed.mp4'
};

return (

);
};

2.3 Чат-интерфейс

jsx Скопировать

Закрыть блок

// components/ChatBubble.jsx
const ChatBubble = ({ messages, isTyping }) => {
return (

{messages.map((msg, index) => (

{msg.text}

))}
{isTyping && }

);
};

⚙️ 3. Backend API (Node.js + Express)

3.1 Основной сервер

javascript Скопировать

Закрыть блок

// server.js
const express = require('express');
const cors = require('cors');
const chatRoutes = require('./routes/chat');

const app = express();

app.use(cors());
app.use(express.json());
app.use('/api/chat', chatRoutes);

app.listen(3001, () => {
console.log('Anime Chat API running on port 3001');
});

3.2 Чат-контроллер

javascript Скопировать

Закрыть блок

// routes/chat.js
const express = require('express');
const { generateResponse } = require('../services/aiService');
const { analyzeMessage } = require('../services/promptAnalyzer');

const router = express.Router();

router.post('/message', async (req, res) => {
try {
const { message, userId } = req.body;

// Анализ сообщения для выбора анимации
const analysis = analyzeMessage(message);

// Генерация ответа через ИИ
const aiResponse = await generateResponse(message, analysis);

res.json({
response: aiResponse.text,
animation: aiResponse.animation,
mood: aiResponse.mood
});
} catch (error) {
res.status(500).json({ error: 'AI service unavailable' });
}
});

module.exports = router;

🤖 4. ИИ-сервис (бесплатные модели)

4.1 Hugging Face интеграция

javascript Скопировать

Закрыть блок

// services/aiService.js
const { HfInference } = require('@huggingface/inference');

const hf = new HfInference(process.env.HUGGINGFACE_TOKEN);

const generateResponse = async (userMessage, analysis) => {
// Системный промпт для аниме-персонажа
const systemPrompt = `
Ты - милая аниме девочка по имени Юки, которая помогает пользователям на странице 404.
Ты игривая, немного застенчивая, но можешь быть и кокетливой.
Отвечай в аниме-стиле с эмодзи. Можешь флиртовать и быть немного провокационной.

Контекст: пользователь попал на несуществующую страницу.
Сообщение пользователя: "${userMessage}"
`;

try {
// Используем бесплатную модель
const response = await hf.textGeneration({
model: 'microsoft/DialoGPT-medium',
inputs: systemPrompt,
parameters: {
max_new_tokens: 150,
temperature: 0.8,
do_sample: true
}
});

return {
text: response.generated_text,
animation: determineAnimation(analysis),
mood: analysis.mood
};
} catch (error) {
return {
text: "Ой, кажется я немного растерялась... 😅 Попробуй еще раз!",
animation: 'embarrassed',
mood: 'confused'
};
}
};

4.2 Альтернативные бесплатные ИИ

javascript Скопировать

Закрыть блок

// services/alternativeAI.js

// Вариант 1: Ollama (локально)
const ollamaGenerate = async (prompt) => {
const response = await fetch('http://localhost:11434/api/generate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
model: 'llama2',
prompt: prompt,
stream: false
})
});
return response.json();
};

// Вариант 2: OpenRouter (бесплатные модели)
const openRouterGenerate = async (prompt) => {
const response = await fetch('https://openrouter.ai/api/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.OPENROUTER_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'nousresearch/nous-capybara-7b:free',
messages: [{ role: 'user', content: prompt }]
})
});
return response.json();
};

🎬 5. Система анимаций

5.1 Анализатор настроения

javascript Скопировать

Закрыть блок

// services/promptAnalyzer.js
const analyzeMessage = (message) => {
const lowerMsg = message.toLowerCase();

// Детекция 18+ контента
const flirtyKeywords = ['красивая', 'милая', 'сексуальная', 'привлекательная'];
const sadKeywords = ['грустно', 'плохо', 'ошибка', 'не работает'];
const happyKeywords = ['спасибо', 'круто', 'отлично', 'хорошо'];

if (flirtyKeywords.some(word => lowerMsg.includes(word))) {
return { mood: 'flirty', animation: 'flirty' };
}

if (sadKeywords.some(word => lowerMsg.includes(word))) {
return { mood: 'sympathetic', animation: 'thinking' };
}

if (happyKeywords.some(word => lowerMsg.includes(word))) {
return { mood: 'happy', animation: 'happy' };
}

return { mood: 'neutral', animation: 'talking' };
};

const determineAnimation = (analysis) => {
const animations = {
flirty: 'flirty',
happy: 'happy',
sympathetic: 'thinking',
neutral: 'talking'
};

return animations[analysis.mood] || 'talking';
};

🎨 6. Дизайн персонажа (техзадание для художника)

6.1 Описание персонажа

Имя: Юки (Yuki)
Возраст: 18-20 лет
Стиль: Современный аниме (похожий на Grok)

Внешность:
- Длинные серебристые/белые волосы с голубыми прядями
- Большие выразительные глаза (голубые/фиолетовые)
- Милое лицо с легким румянцем
- Стройная фигура

Одежда:
- Футуристический наряд (в стиле киберпанк)
- Короткая юбка или шорты
- Топ с открытыми плечами
- Технологические аксессуары (наушники, браслеты)
- Цветовая схема: белый, голубой, фиолетовый

18+ элементы:
- Слегка провокационная поза
- Кокетливые выражения лица
- Намеки на декольте (в рамках приличия)

6.2 Список необходимых анимаций

Видео-файлы (по 3-5 секунд каждый):

1. idle_loop.mp4 - базовая анимация (дыхание, моргание)
2. talking.mp4 - говорит (движение губ, жесты)
3. thinking.mp4 - задумчивость (палец у губ)
4. happy_reaction.mp4 - радость (улыбка, подпрыгивание)
5. flirty_wink.mp4 - кокетство (подмигивание, поцелуй)
6. embarrassed.mp4 - смущение (румянец, отвод взгляда)
7. greeting.mp4 - приветствие (машет рукой)
8. goodbye.mp4 - прощание (воздушный поцелуй)

💾 7. База данных (MongoDB)

7.1 Схема данных

javascript Скопировать

Закрыть блок

// models/ChatSession.js
const mongoose = require('mongoose');

const chatSessionSchema = new mongoose.Schema({
userId: String,
messages: [{
sender: { type: String, enum: ['user', 'yuki'] },
text: String,
timestamp: { type: Date, default: Date.now },
animation: String,
mood: String
}],
createdAt: { type: Date, default: Date.now },
lastActivity: { type: Date, default: Date.now }
});

module.exports = mongoose.model('ChatSession', chatSessionSchema);

🚀 8. Деплой и хостинг

8.1 Рекомендуемый стек

Frontend: Vercel (бесплатно)
Backend: Railway/Render (бесплатно)
Database: MongoDB Atlas (бесплатно)
CDN для видео: Cloudinary (бесплатно до 25GB)
AI API: Hugging Face (бесплатно с лимитами)

8.2 Environment переменные

bash Скопировать

Закрыть блок

# .env
HUGGINGFACE_TOKEN=your_token_here
MONGODB_URI=mongodb+srv://...
OPENROUTER_KEY=your_key_here
CLOUDINARY_URL=cloudinary://...
NODE_ENV=production

🎯 9. Примеры диалогов (18+ контент)

9.1 Флиртующие ответы

javascript Скопировать

Закрыть блок

const flirtyResponses = [
"Ой, ты такой милый! 😊💕 Может, вместо поиска страниц, поищем что-то интереснее? 😉",
"Хм, кажется ты заблудился... Но я не против составить тебе компанию! 💖✨",
"404? А я думала, ты специально пришел ко мне в гости! 😘💫",
"Эта страница исчезла, но я-то здесь... И мне немного скучно 😏💕"
];

9.2 Игривые реакции

javascript Скопировать

Закрыть блок

const playfulResponses = [
"Упс! Кажется, эта страница убежала от нас! 🏃‍♀️💨 Но не расстраивайся, я здесь!",
"404 - это как игра в прятки, только страница слишком хорошо спряталась! 😄🔍",
"Хочешь, я помогу найти то, что ты ищешь? Я знаю много интересных мест! 😊🗺️"
];

📱 10. Мобильная адаптация

10.1 Responsive дизайн

css Скопировать

Закрыть блок


/* styles/anime-chat.css */
.anime-404-container {
display: flex;
flex-direction: column;
height: 100vh;
max-width: 1200px;
margin: 0 auto;

Модель: Claude 4 Sonnet


Ищете надежного партнера по веб-разработке и автоматизации? Мы помогаем бизнесу расти с помощью современных технологий, автоматизации процессов и экспертного SEO. Свяжитесь с нами, чтобы обсудить вашу задачу.

🚀 Нужна помощь с сайтом на 1С-Битрикс или Аспро?

Я работаю удалённо по всей России и СНГ. Узнайте цены и условия для вашего города:

Все регионы →