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