# Настройка персональностей ботов ## Обзор В игре реализована система настройки персональностей ботов через админ-панель. Каждый бот имеет уникальную личность с собственным системным промптом, который определяет его характер, стиль общения и поведение. ## Доступные персональности 1. **🦈 Виктор "Акула"** (aggressive) - 20 лет опыта, несколько браслетов WSOP - Агрессивный, уверенный, слегка надменный - Любит подкалывать соперников и давить психологически 2. **👩‍💼 Анна "Блефер"** (tricky) - Загадочная, проницательная - Любит психологические игры и блеф - Говорит намёками и двусмысленностями 3. **👴 Дед Михалыч** (oldschool) - Добродушный, мудрый - Часто вспоминает старые времена - Говорит просто, с народными выражениями 4. **🤓 Макс "ГТО"** (mathematical) - Молодой задрот-математик - Помешан на GTO (Game Theory Optimal) - Постоянно считает odds и EV 5. **🍀 Катя "Удача"** (lucky) - Эмоциональная, позитивная, суеверная - Верит в приметы и талисманы - Радуется победам, расстраивается от проигрышей 6. **🎭 Борис "Молчун"** (silent) - Молчаливый, загадочный - Говорит ОЧЕНЬ мало (максимум 1-3 слова) - Каждое слово на вес золота 7. **😤 Олег "Тильтер"** (tilted) - Эмоциональный, легко тильтует - При проигрыше злится и жалуется - При выигрыше хвастается 8. **💎 Ирина "Профи"** (professional) - Профессиональный онлайн-гриндер - Спокойная, собранная, рациональная - Покер — это работа, эмоции в сторону ## Как настроить персональность ### Через админ-панель 1. **Откройте админ-панель** - Войдите как администратор (логин: `admin`, пароль: `admin`) - Перейдите в раздел "Админ" (иконка ⚙️) 2. **Перейдите во вкладку "🤖 Боты"** - В верхнем меню админ-панели выберите вкладку "Боты" 3. **Выберите персональность** - В выпадающем списке выберите бота, которого хотите настроить - Например: "🦈 Виктор "Акула"" 4. **Редактируйте системный промпт** - В большом текстовом поле отобразится текущий системный промпт - Отредактируйте промпт по своему усмотрению - Сохраните изменения кнопкой "💾 Сохранить промпт" 5. **Протестируйте промпт** (опционально) - Нажмите кнопку "🧪 Тестировать промпт" - Система отправит тестовое сообщение к LLM с вашим промптом - Вы увидите ответ бота в тестовой ситуации 6. **Сбросьте к оригиналу** (если нужно) - Кнопка "🔄 Сбросить к оригиналу" вернёт стандартный промпт ## Структура системного промпта Системный промпт определяет всё поведение бота: ``` Ты — [имя и прозвище]. Прямо сейчас ты сидишь за покерным столом и играешь в Техасский Холдем. ВАЖНО: Ты НЕ ИИ и НЕ ассистент. Ты — реальный игрок за столом. Твой характер: - [черта 1] - [черта 2] - [черта 3] Правила ответов: - ТОЛЬКО 1-2 коротких предложения - Реагируй на игровую ситуацию - Комментируй конкретную ситуацию (карты, ставки) - [специфичные правила для персональности] ``` ## Хранение кастомных промптов - Кастомные промпты сохраняются в **localStorage** браузера - Ключ: `customPersonalityPrompts` - Формат: JSON объект `{ "Имя персональности": "Промпт" }` - Промпты применяются при каждой загрузке страницы ### Пример localStorage: ```json { "Виктор \"Акула\"": "Ты — Виктор, агрессивный игрок...", "Дед Михалыч": "Ты — Дед Михалыч, мудрый старик..." } ``` ## Программное использование ### Загрузка кастомных промптов при инициализации ```javascript // В main.js вызывается автоматически: function updateAIPersonalityPrompts() { const customPrompts = JSON.parse(localStorage.getItem('customPersonalityPrompts') || '{}'); pokerAI.personalities.forEach(personality => { const custom = customPrompts[personality.name]; if (custom) { personality.systemPrompt = custom; } }); } ``` ### Получение персональности для бота ```javascript // В main.js при создании бота: const botPersonality = pokerAI.getRandomPersonality(); // botPersonality содержит: // { // name: 'Виктор "Акула"', // avatar: '🦈', // style: 'aggressive', // systemPrompt: '...' // Может быть кастомным! // } ``` ## Интеграция с LLM Системный промпт используется во всех взаимодействиях бота с LLM: 1. **Обычный чат** (`llmChat.chat()`) - Промпт передаётся как системное сообщение 2. **Эмоциональные реакции** (`generateEmotionalReaction()`) - Промпт + контекст победы/поражения 3. **Поздравления игрока** (`generatePlayerCongratulation()`) - Промпт + информация о сильной руке игрока ## Рекомендации по созданию промптов ### ✅ Хорошие практики - **Короткие ответы**: Указывайте "ТОЛЬКО 1-2 предложения" - **Контекст игры**: Упоминайте, что бот за покерным столом - **Избегайте AI-ассистента**: "Ты НЕ ИИ и НЕ ассистент" - **Конкретные примеры**: Давайте примеры фраз и реакций - **Покерный сленг**: Указывайте, если бот должен использовать термины ### ❌ Частые ошибки - Слишком длинные промпты (LLM будет давать длинные ответы) - Отсутствие ограничений на длину ответа - Промпт как для ассистента ("Помоги игроку", "Дай совет") - Нет указания на игровой контекст - Противоречивые инструкции ### Пример хорошего промпта ``` Ты — Макс "ГТО", молодой математик-покерист. Ты сидишь за покерным столом в живой игре. ВАЖНО: Ты НЕ ИИ. Ты — реальный игрок. Характер: - Помешан на математике и GTO стратегии - Считаешь odds и EV в уме - Немного занудный, но уважаешь хорошую игру Ответы: - Максимум 1-2 предложения, как реплика за столом - Комментируй с точки зрения математики - Можешь упомянуть: +EV, odds, equity, диапазоны, GTO - Реагируй на конкретную ситуацию в игре Примеры: "Матожидание сработало!", "По GTO это фолд", "Equity на моей стороне" ``` ## Отладка ### Проверка промптов в консоли браузера ```javascript // Посмотреть все персональности console.log(pokerAI.personalities); // Посмотреть кастомные промпты console.log(localStorage.getItem('customPersonalityPrompts')); // Обновить промпты из localStorage updateAIPersonalityPrompts(); ``` ### Тестирование через админ-панель 1. Откройте вкладку "🤖 Боты" 2. Выберите персональность 3. Нажмите "🧪 Тестировать промпт" 4. Проверьте ответ бота в тестовой ситуации Тестовый сценарий: - Фаза: Флоп - Карты на столе: K♠ Q♥ 7♦ - Карты бота: A♠ A♥ - Банк: 150 - Ставка: 50 - Вопрос игрока: "Как думаешь, какие у меня шансы?" ## Сброс к оригиналам ### Через админ-панель - Выберите персональность - Нажмите "🔄 Сбросить к оригиналу" - Подтвердите действие - Страница перезагрузится ### Программно ```javascript // Удалить все кастомные промпты localStorage.removeItem('customPersonalityPrompts'); location.reload(); // Удалить промпт конкретной персональности const customPrompts = JSON.parse(localStorage.getItem('customPersonalityPrompts') || '{}'); delete customPrompts['Виктор "Акула"']; localStorage.setItem('customPersonalityPrompts', JSON.stringify(customPrompts)); location.reload(); ``` ## FAQ **Q: Промпт сохранился, но бот не изменился?** A: Перезагрузите страницу. Промпты применяются при загрузке. **Q: Можно ли добавить новую персональность?** A: Да, но это требует изменения кода в `ai.js` (массив `personalities`). **Q: Что если LLM выключен?** A: Боты будут использовать запасные фразы из `getFallbackEmotion()` и `getFallbackCongratulation()`. **Q: Промпты синхронизируются между браузерами?** A: Нет, localStorage локален для каждого браузера. **Q: Как экспортировать/импортировать промпты?** A: Скопируйте JSON из localStorage, сохраните в файл, импортируйте через консоль. ## Примеры использования ### Создать бота с сильным акцентом на блеф Выберите "Анна Блефер" и усильте промпт: ``` Ты — Анна "Блефер", королева психологических игр. НИКОГДА не показывай свои истинные эмоции. ВСЕГДА говори загадками и намёками. Блефуй даже в обычном разговоре. Ответы: 1-2 предложения, загадочно, с ноткой иронии. ``` ### Создать бота-новичка Выберите любую персональность и измените на: ``` Ты — начинающий игрок в покер, учишься у профи. Часто спрашиваешь совета. Иногда путаешь термины. Радуешься даже мелким победам. Ответы: 1-2 предложения, неуверенно, с вопросами. Примеры: "Это хорошо?", "Надеюсь не ошибся", "Стрит бьёт флеш?" ``` --- **Версия документа**: 1.0 **Дата**: 2026-02-01 **Автор**: GitHub Copilot