120 lines
4.5 KiB
Markdown
120 lines
4.5 KiB
Markdown
# Текстовая игра «Выбери свою историю»
|
||
*Интерактивная история с LLM и прерыванием (LangGraph)*
|
||
|
||
---
|
||
|
||
## 📖 Описание
|
||
|
||
Проект реализует мини‑игру **«выбери свою историю»** на основе больших языковых моделей.
|
||
- LLM генерирует начальную завязку и несколько вариантов действий.
|
||
- Пользователь выбирает один из них через консольный интерфейс (`questionary`).
|
||
- После выбора модель дописывает короткую концовку, завершая сцену.
|
||
|
||
Граф выполнения реализован с помощью **LangGraph**:
|
||
- узел генерации текста → узел прерывания (выбор пользователя) → узел завершения.
|
||
- Состояние сохраняется в чекпоинтере, чтобы можно было продолжить игру после перезапуска.
|
||
|
||
---
|
||
|
||
## ⚙️ Предварительные требования
|
||
|
||
| Пакет | Версия |
|
||
|-------|--------|
|
||
| Python | 3.10+ |
|
||
| pip | любой актуальный |
|
||
|
||
> **Важно**: Для работы с OpenAI требуется переменная окружения `OPENAI_API_KEY`.
|
||
> Если вы хотите использовать другую модель, настройте соответствующий провайдер в `solution.py`.
|
||
|
||
---
|
||
|
||
## 📦 Установка
|
||
|
||
```bash
|
||
# Клонируйте репозиторий (или скачайте архив)
|
||
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`:
|
||
|
||
```text
|
||
langgraph>=0.1.0
|
||
langchain>=0.2.0
|
||
langchain-openai>=0.1.0
|
||
questionary>=1.10.0
|
||
rich>=13.0.0
|
||
```
|
||
|
||
---
|
||
|
||
## ▶️ Запуск
|
||
|
||
```bash
|
||
# Установите переменную окружения с ключом OpenAI
|
||
export OPENAI_API_KEY="sk-..."
|
||
|
||
# Запустите игру
|
||
python solution.py
|
||
```
|
||
|
||
> **Tip**: Если вы используете Windows PowerShell, команда будет:
|
||
> ```powershell
|
||
> $env:OPENAI_API_KEY = "sk-..."
|
||
> python solution.py
|
||
> ```
|
||
|
||
---
|
||
|
||
## 🎮 Пример работы
|
||
|
||
```text
|
||
$ python solution.py
|
||
Добро пожаловать в интерактивную историю!
|
||
|
||
Завязка:
|
||
Вы просыпаетесь в таинственном лесу, окружённом странными светлячками. Вокруг слышен шёпот ветра.
|
||
|
||
Варианты действий:
|
||
1) Исследовать ближайший домик
|
||
2) Пойти к озеру
|
||
3) Спрятаться за деревом
|
||
|
||
Выберите действие (1‑3): 2
|
||
|
||
Вы выбрали: "Пойти к озеру"
|
||
|
||
Концовка:
|
||
Вы подходите к зеркальному озеру, и вода начинает светиться. Внезапно из воды выскакивает древний дух, который дарует вам силу видеть будущее. Игра завершена.
|
||
```
|
||
|
||
---
|
||
|
||
## 📚 Как это работает
|
||
|
||
1. **Генерация** – LLM создаёт завязку и варианты действий.
|
||
2. **Прерывание** – `questionary` выводит список вариантов; пользователь вводит номер.
|
||
3. **Завершение** – выбранный вариант передаётся в модель, которая генерирует короткую концовку.
|
||
|
||
Все состояния сохраняются в чекпоинтере (`checkpoint.json`) – при следующем запуске можно продолжить с того же места.
|
||
|
||
---
|
||
|
||
## 🤝 Вклад
|
||
|
||
Если хотите улучшить игру (добавить новые сценарии, изменить логику выбора, интегрировать другие LLM), откройте Pull Request. Убедитесь, что тесты проходят (`pytest`).
|
||
|
||
---
|
||
|
||
## 📄 Лицензия
|
||
|
||
MIT License – свободно используйте и модифицируйте проект.
|
||
|
||
--- |