📚 Мини‑игра «Выбери свою историю»
Текстовая игра на основе LLM + interrupt
Использует LangGraph, LangChain и questionary для создания интерактивной истории, где пользователь выбирает ход событий.
🚀 Что это?
- LLM генерирует начало сюжета и несколько вариантов развития.
- Система ставит «паузы» (interrupt) – пользователь в консоли делает выбор через
questionary. - После выбора LLM дописывает короткую концовку, учитывая выбранный путь.
Идеально подходит для демонстрации возможностей LangGraph: состояние, узлы и прерывания.
📦 Предварительные требования
| Пакет | Версия |
|---|---|
| Python | 3.10+ |
| pip | - |
| OpenAI API key | Переменная окружения OPENAI_API_KEY |
Важно: Установите ключ в переменную окружения перед запуском:
export OPENAI_API_KEY="sk-..."
⚙️ Установка
# 1. Клонируйте репозиторий (или скачайте файлы)
git clone https://github.com/yourname/text-adventure.git
cd text-adventure
# 2. Создайте виртуальное окружение (рекомендуется)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 3. Установите зависимости
pip install -r requirements.txt
requirements.txt:
langchain-openai>=0.1.0
langgraph>=0.2.0
questionary>=1.10.0
▶️ Запуск
python client.py
После запуска вы увидите приглашение ввести тему истории, после чего LLM сгенерирует начало и варианты развития. Выберите один из вариантов – игра завершится короткой концовкой.
📖 Пример работы
$ python client.py
Введите тему истории: приключения в космосе
LLM генерирует начальный сюжет...
> Что делает герой?
1️⃣ Пытается открыть дверь
2️⃣ Смотрит на звёзды
3️⃣ Включает систему жизнеобеспечения
Выберите вариант (1/2/3): 2
LLM продолжает историю...
Результат:
Герой, стоя в открытом космосе, смотрел на бесконечный океан звёзд. Внутри него раздался тихий шёпот неизвестного сигнала... (и так далее)
📚 Как это работает
agent.py– определяет граф LangGraph: узлы генерации, прерывания и завершения.client.py– пользовательский интерфейс в консоли, используетquestionaryдля выбора вариантов.
🤝 Вклад
Если хотите улучшить игру (добавить больше веток, изменить логику), откройте Pull Request. Убедитесь, что тесты проходят (pytest) и код соответствует PEP8.
Счастливого кода! 🚀