Добавлен README.md
This commit is contained in:
@@ -1,61 +1,54 @@
|
|||||||
# Interactive Text Adventure with LLM & Interrupts
|
# Text Adventure with LLM and Interrupts
|
||||||
**Solution:** `solution.py`
|
*A minimal “choose‑your‑own‑story” game powered by LangGraph, LangChain & OpenAI*
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📖 Описание
|
## 📖 Описание
|
||||||
|
|
||||||
`solution.py` реализует мини‑игру «Выбери свою историю» на основе больших языковых моделей (LLM).
|
`solution.py` реализует простую интерактивную историю, где:
|
||||||
|
|
||||||
1. **Генерация начала** – LLM создаёт завязку и несколько вариантов действий.
|
1. **LLM** генерирует начальный сюжет и несколько вариантов действий.
|
||||||
2. **Пауза (interrupt)** – граф LangGraph ставит паузу, ожидая выбора игрока.
|
2. Граф приостанавливает выполнение (interrupt) и выводит варианты пользователю через `questionary`.
|
||||||
3. **Выбор пользователя** – через консольный интерфейс `questionary` пользователь выбирает вариант.
|
3. После выбора пользовательского действия LLM дописывает короткую концовку.
|
||||||
4. **Продолжение истории** – после выбора LLM дописывает дальнейший сюжет.
|
|
||||||
|
|
||||||
Граф построен с помощью `langgraph`, а состояние сохраняется в памяти (`InMemorySaver`). Для вывода текста используется `rich`.
|
Таким образом игрок видит цепочку:
|
||||||
|
`LLM → пауза → выбор → LLM`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ⚙️ Предварительные требования
|
## ⚙️ Предварительные требования
|
||||||
|
|
||||||
| Пакет | Версия |
|
| Технология | Версия |
|
||||||
|-------|--------|
|
|------------|--------|
|
||||||
| Python | 3.10+ |
|
| Python | ≥ 3.10 |
|
||||||
| langchain | ≥0.2.0 |
|
| pip | – |
|
||||||
| langgraph | ≥0.1.0 |
|
|
||||||
| questionary | ≥1.10.0 |
|
|
||||||
| rich | ≥13.0.0 |
|
|
||||||
| openai (или любая LLM‑провайдер) | – |
|
|
||||||
|
|
||||||
> **Важно**:
|
**API‑ключ OpenAI** должен быть доступен в переменной окружения `OPENAI_API_KEY` (или вы можете задать его вручную в коде).
|
||||||
> - Для работы с OpenAI понадобится переменная окружения `OPENAI_API_KEY`.
|
|
||||||
> - Если используете другую модель, замените импорт `ChatOpenAI` на соответствующий провайдер.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚀 Установка
|
## 📦 Установка
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Клонируйте репозиторий (или скопируйте файл solution.py)
|
# Клонируйте репозиторий
|
||||||
git clone https://github.com/yourusername/interactive-adventure.git
|
git clone https://github.com/your-username/text-adventure.git
|
||||||
cd interactive-adventure
|
cd text-adventure
|
||||||
|
|
||||||
# 2. Создайте виртуальное окружение (рекомендуется)
|
# Создайте виртуальное окружение (рекомендуется)
|
||||||
python -m venv .venv
|
python -m venv .venv
|
||||||
source .venv/bin/activate # Windows: .\.venv\Scripts\activate
|
source .venv/bin/activate # Windows: .\.venv\Scripts\activate
|
||||||
|
|
||||||
# 3. Установите зависимости
|
# Установите зависимости
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
`requirements.txt`:
|
`requirements.txt`:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
langchain>=0.2.0
|
|
||||||
langgraph>=0.1.0
|
langgraph>=0.1.0
|
||||||
|
langchain-openai>=0.2.0
|
||||||
questionary>=1.10.0
|
questionary>=1.10.0
|
||||||
rich>=13.0.0
|
rich>=13.0.0
|
||||||
openai>=1.0.0 # если используете OpenAI
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -63,47 +56,55 @@ openai>=1.0.0 # если используете OpenAI
|
|||||||
## ▶️ Запуск
|
## ▶️ Запуск
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Установите переменную окружения с ключом API (пример для Linux/macOS)
|
# Убедитесь, что переменная окружения установлена
|
||||||
export OPENAI_API_KEY="sk-..."
|
export OPENAI_API_KEY="sk-..."
|
||||||
|
|
||||||
# Для Windows:
|
# Запустите игру
|
||||||
set OPENAI_API_KEY=sk-...
|
|
||||||
|
|
||||||
python solution.py
|
python solution.py
|
||||||
```
|
```
|
||||||
|
|
||||||
После запуска вы увидите интерактивный диалог в терминале. Выбирайте варианты, и история будет развиваться.
|
После запуска вы увидите:
|
||||||
|
|
||||||
|
1. Сгенерированное вступление и варианты действий.
|
||||||
|
2. Вопрос с выбором через `questionary`.
|
||||||
|
3. Короткая концовка, основанная на вашем выборе.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📋 Пример работы
|
## 🎮 Пример
|
||||||
|
|
||||||
```text
|
```text
|
||||||
> Начало истории:
|
> python solution.py
|
||||||
Вы просыпаетесь в таинственном лесу. Вокруг слышен шорох ветра.
|
Welcome to the LLM Adventure!
|
||||||
Варианты действий:
|
|
||||||
1) Исследовать ближайший домик
|
|
||||||
2) Пойти к озеру
|
|
||||||
3) Остановиться и послушать тишину
|
|
||||||
|
|
||||||
Выберите номер: 2
|
You find yourself in a dimly lit cavern. A faint glow emanates from a stone altar.
|
||||||
|
What do you do?
|
||||||
|
|
||||||
> Вы выбрали: "Пойти к озеру"
|
1️⃣ Inspect the altar
|
||||||
LLM продолжает историю...
|
2️⃣ Search for an exit
|
||||||
|
3️⃣ Sit and wait
|
||||||
|
|
||||||
|
Your choice: 1
|
||||||
|
|
||||||
|
The altar is covered with ancient runes. As you touch them, a burst of light surrounds you...
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📚 Что дальше?
|
## 📚 Как это работает
|
||||||
|
|
||||||
- Добавьте более сложные ветки и условия.
|
- **StateGraph** управляет состоянием игры.
|
||||||
- Сохраните состояние в файл, чтобы игрок мог возобновить игру позже (`langgraph.checkpoint.file`).
|
- `interrupt` заставляет граф остановиться и передать управление пользователю.
|
||||||
- Интегрируйте голосовой ввод/вывод для более «живого» опыта.
|
- После выбора пользовательского действия состояние обновляется и LLM продолжает генерацию.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🤝 Вклад
|
||||||
|
|
||||||
|
Если хотите улучшить игру (добавить больше веток, использовать другие модели, добавить сохранение прогресса), создайте pull request. Убедитесь, что тесты проходят (`pytest`).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📄 Лицензия
|
## 📄 Лицензия
|
||||||
|
|
||||||
MIT © 2026
|
MIT © 2026
|
||||||
|
|
||||||
---
|
|
||||||
Reference in New Issue
Block a user