Текстовая игра «Выбери свою историю»
Интерактивная история с LLM и прерыванием (LangGraph)
📖 Описание
Проект реализует мини‑игру «выбери свою историю» на основе больших языковых моделей.
- LLM генерирует начальную завязку и несколько вариантов действий.
- Пользователь выбирает один из них через консольный интерфейс (
questionary). - После выбора модель дописывает короткую концовку, завершая сцену.
Граф выполнения реализован с помощью LangGraph:
- узел генерации текста → узел прерывания (выбор пользователя) → узел завершения.
- Состояние сохраняется в чекпоинтере, чтобы можно было продолжить игру после перезапуска.
⚙️ Предварительные требования
| Пакет | Версия |
|---|---|
| Python | 3.10+ |
| pip | любой актуальный |
Важно: Для работы с OpenAI требуется переменная окружения
OPENAI_API_KEY.
Если вы хотите использовать другую модель, настройте соответствующий провайдер вsolution.py.
📦 Установка
# Клонируйте репозиторий (или скачайте архив)
git clone https://github.com/yourname/text-adventure-llm.git
cd text-adventure-llm
# Создайте виртуальное окружение (рекомендуется)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Установите зависимости
pip install -r requirements.txt
requirements.txt:
langgraph>=0.1.0
langchain>=0.2.0
langchain-openai>=0.1.0
questionary>=1.10.0
rich>=13.0.0
▶️ Запуск
# Установите переменную окружения с ключом OpenAI
export OPENAI_API_KEY="sk-..."
# Запустите игру
python solution.py
Tip
: Если вы используете Windows PowerShell, команда будет:
$env:OPENAI_API_KEY = "sk-..." python solution.py
🎮 Пример работы
$ python solution.py
Добро пожаловать в интерактивную историю!
Завязка:
Вы просыпаетесь в таинственном лесу, окружённом странными светлячками. Вокруг слышен шёпот ветра.
Варианты действий:
1) Исследовать ближайший домик
2) Пойти к озеру
3) Спрятаться за деревом
Выберите действие (1‑3): 2
Вы выбрали: "Пойти к озеру"
Концовка:
Вы подходите к зеркальному озеру, и вода начинает светиться. Внезапно из воды выскакивает древний дух, который дарует вам силу видеть будущее. Игра завершена.
📚 Как это работает
- Генерация – LLM создаёт завязку и варианты действий.
- Прерывание –
questionaryвыводит список вариантов; пользователь вводит номер. - Завершение – выбранный вариант передаётся в модель, которая генерирует короткую концовку.
Все состояния сохраняются в чекпоинтере (checkpoint.json) – при следующем запуске можно продолжить с того же места.
🤝 Вклад
Если хотите улучшить игру (добавить новые сценарии, изменить логику выбора, интегрировать другие LLM), откройте Pull Request. Убедитесь, что тесты проходят (pytest).
📄 Лицензия
MIT License – свободно используйте и модифицируйте проект.