poker/BOT_PERSONALITIES_CONFIG.md

306 lines
13 KiB
Markdown
Raw Permalink 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.

# Настройка персональностей ботов
## Обзор
В игре реализована система настройки персональностей ботов через админ-панель. Каждый бот имеет уникальную личность с собственным системным промптом, который определяет его характер, стиль общения и поведение.
## Доступные персональности
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