Добавлен README.md
This commit is contained in:
@@ -1,56 +1,61 @@
|
||||
# Мини‑игра «Выбери свою историю»
|
||||
## (Interactive Storytelling with LLM + Interrupt)
|
||||
# Interactive Text Adventure with LLM & Interrupts
|
||||
**Solution:** `solution.py`
|
||||
|
||||
---
|
||||
|
||||
## 📖 Описание
|
||||
|
||||
`solution.py` реализует простую текстовую игру в стиле *«выбери свою историю»*.
|
||||
Процесс игры выглядит так:
|
||||
`solution.py` реализует мини‑игру «Выбери свою историю» на основе больших языковых моделей (LLM).
|
||||
|
||||
1. **LLM** генерирует начальную сцену и несколько вариантов действий героя.
|
||||
2. С помощью `langgraph` выполнение «приостанавливается» (interrupt).
|
||||
3. Пользователь выбирает один из предложенных вариантов через консольный интерфейс (`questionary`).
|
||||
4. После выбора LLM дописывает короткую концовку, учитывая выбранное действие.
|
||||
1. **Генерация начала** – LLM создаёт завязку и несколько вариантов действий.
|
||||
2. **Пауза (interrupt)** – граф LangGraph ставит паузу, ожидая выбора игрока.
|
||||
3. **Выбор пользователя** – через консольный интерфейс `questionary` пользователь выбирает вариант.
|
||||
4. **Продолжение истории** – после выбора LLM дописывает дальнейший сюжет.
|
||||
|
||||
Таким образом игрок управляет сюжетом в реальном времени, а модель отвечает на его выборы.
|
||||
Граф построен с помощью `langgraph`, а состояние сохраняется в памяти (`InMemorySaver`). Для вывода текста используется `rich`.
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Предварительные требования
|
||||
|
||||
| Компонент | Версия |
|
||||
|-----------|--------|
|
||||
| Пакет | Версия |
|
||||
|-------|--------|
|
||||
| Python | 3.10+ |
|
||||
| pip | - |
|
||||
| langchain | ≥0.2.0 |
|
||||
| langgraph | ≥0.1.0 |
|
||||
| questionary | ≥1.10.0 |
|
||||
| rich | ≥13.0.0 |
|
||||
| openai (или любая LLM‑провайдер) | – |
|
||||
|
||||
> **Важно**: Для работы с LLM требуется ключ OpenAI API.
|
||||
> Установите переменную окружения `OPENAI_API_KEY` перед запуском.
|
||||
> **Важно**:
|
||||
> - Для работы с OpenAI понадобится переменная окружения `OPENAI_API_KEY`.
|
||||
> - Если используете другую модель, замените импорт `ChatOpenAI` на соответствующий провайдер.
|
||||
|
||||
---
|
||||
|
||||
## 📦 Установка
|
||||
## 🚀 Установка
|
||||
|
||||
```bash
|
||||
# Клонируйте репозиторий (или скачайте файлы)
|
||||
git clone https://github.com/yourname/text-adventure-llm.git
|
||||
cd text-adventure-llm
|
||||
# 1. Клонируйте репозиторий (или скопируйте файл solution.py)
|
||||
git clone https://github.com/yourusername/interactive-adventure.git
|
||||
cd interactive-adventure
|
||||
|
||||
# Создайте виртуальное окружение (рекомендуется)
|
||||
# 2. Создайте виртуальное окружение (рекомендуется)
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate # Windows: .\.venv\Scripts\activate
|
||||
|
||||
# Установите зависимости
|
||||
# 3. Установите зависимости
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
`requirements.txt` содержит:
|
||||
`requirements.txt`:
|
||||
|
||||
```text
|
||||
langgraph>=0.1.0
|
||||
langchain>=0.2.0
|
||||
langgraph>=0.1.0
|
||||
questionary>=1.10.0
|
||||
openai>=1.0.0
|
||||
rich>=13.0.0
|
||||
openai>=1.0.0 # если используете OpenAI
|
||||
```
|
||||
|
||||
---
|
||||
@@ -58,56 +63,47 @@ openai>=1.0.0
|
||||
## ▶️ Запуск
|
||||
|
||||
```bash
|
||||
# Установите ключ OpenAI (пример)
|
||||
# Установите переменную окружения с ключом API (пример для Linux/macOS)
|
||||
export OPENAI_API_KEY="sk-..."
|
||||
|
||||
# Запустите игру
|
||||
# Для Windows:
|
||||
set OPENAI_API_KEY=sk-...
|
||||
|
||||
python solution.py
|
||||
```
|
||||
|
||||
После запуска вы увидите:
|
||||
|
||||
```
|
||||
LLM: "Ты стоишь на перекрестке в древнем городе. Что ты сделаешь?"
|
||||
1) Пойти к рынку
|
||||
2) Исследовать подземелье
|
||||
3) Вернуться домой
|
||||
|
||||
Выберите действие (1/2/3):
|
||||
```
|
||||
|
||||
Введите номер, и модель продолжит историю.
|
||||
После запуска вы увидите интерактивный диалог в терминале. Выбирайте варианты, и история будет развиваться.
|
||||
|
||||
---
|
||||
|
||||
## 🎮 Пример игры
|
||||
## 📋 Пример работы
|
||||
|
||||
```
|
||||
LLM: "Ты стоишь на перекрестке в древнем городе. Что ты сделаешь?"
|
||||
1) Пойти к рынку
|
||||
2) Исследовать подземелье
|
||||
3) Вернуться домой
|
||||
```text
|
||||
> Начало истории:
|
||||
Вы просыпаетесь в таинственном лесу. Вокруг слышен шорох ветра.
|
||||
Варианты действий:
|
||||
1) Исследовать ближайший домик
|
||||
2) Пойти к озеру
|
||||
3) Остановиться и послушать тишину
|
||||
|
||||
Выберите действие (1/2/3): 2
|
||||
Выберите номер: 2
|
||||
|
||||
LLM: "Твое решение исследовать подземелье заставило тебя спуститься по узкой лестнице, ведущей в мрачные глубины. Внутри ты обнаружил..."
|
||||
> Вы выбрали: "Пойти к озеру"
|
||||
LLM продолжает историю...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Как это работает
|
||||
## 📚 Что дальше?
|
||||
|
||||
- **LangGraph** управляет состоянием и прерываниями.
|
||||
- **ChatOpenAI** (из `langchain`) отвечает за генерацию текста.
|
||||
- **questionary** обеспечивает интерактивный выбор в консоли.
|
||||
|
||||
Вы можете расширить игру, добавив больше веток, логики выбора или даже графический интерфейс.
|
||||
- Добавьте более сложные ветки и условия.
|
||||
- Сохраните состояние в файл, чтобы игрок мог возобновить игру позже (`langgraph.checkpoint.file`).
|
||||
- Интегрируйте голосовой ввод/вывод для более «живого» опыта.
|
||||
|
||||
---
|
||||
|
||||
## 🤝 Вклад
|
||||
## 📄 Лицензия
|
||||
|
||||
Если хотите улучшить проект – создайте *pull request*!
|
||||
Пожалуйста, придерживайтесь стиля кода и добавляйте тесты при необходимости.
|
||||
MIT © 2026
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user