Добавлен README.md
This commit is contained in:
@@ -1,110 +1,95 @@
|
|||||||
# Text Adventure with LLM and Interrupts
|
# Мини‑игра «Выбери свою историю»
|
||||||
*A minimal “choose‑your‑own‑story” game powered by LangGraph, LangChain & OpenAI*
|
|
||||||
|
|
||||||
---
|
## Описание
|
||||||
|
|
||||||
## 📖 Описание
|
Проект реализует интерактивную текстовую игру на основе больших языковых моделей (LLM).
|
||||||
|
Сценарий игры строится следующим образом:
|
||||||
|
|
||||||
`solution.py` реализует простую интерактивную историю, где:
|
1. **LLM** генерирует начальную завязку и несколько вариантов действий для главного героя.
|
||||||
|
2. С помощью **LangGraph** выполнение модели ставится в состояние *прерывания* – пользователь получает список вариантов через консольный интерфейс.
|
||||||
|
3. Пользователь выбирает один из вариантов при помощи `questionary`.
|
||||||
|
4. После выбора LLM дописывает короткую концовку, учитывая выбранный путь.
|
||||||
|
|
||||||
1. **LLM** генерирует начальный сюжет и несколько вариантов действий.
|
Таким образом игрок участвует в создании истории в реальном времени, а модель реагирует на его решения.
|
||||||
2. Граф приостанавливает выполнение (interrupt) и выводит варианты пользователю через `questionary`.
|
|
||||||
3. После выбора пользовательского действия LLM дописывает короткую концовку.
|
|
||||||
|
|
||||||
Таким образом игрок видит цепочку:
|
## Предварительные требования
|
||||||
`LLM → пауза → выбор → LLM`.
|
|
||||||
|
|
||||||
---
|
| Пакет | Версия |
|
||||||
|
|-------|--------|
|
||||||
|
| Python | 3.10+ |
|
||||||
|
| pip | любой актуальный |
|
||||||
|
|
||||||
## ⚙️ Предварительные требования
|
Для работы с OpenAI API понадобится ключ `OPENAI_API_KEY`.
|
||||||
|
Установите переменную окружения:
|
||||||
| Технология | Версия |
|
|
||||||
|------------|--------|
|
|
||||||
| Python | ≥ 3.10 |
|
|
||||||
| pip | – |
|
|
||||||
|
|
||||||
**API‑ключ OpenAI** должен быть доступен в переменной окружения `OPENAI_API_KEY` (или вы можете задать его вручную в коде).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📦 Установка
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Клонируйте репозиторий
|
|
||||||
git clone https://github.com/your-username/text-adventure.git
|
|
||||||
cd text-adventure
|
|
||||||
|
|
||||||
# Создайте виртуальное окружение (рекомендуется)
|
|
||||||
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-openai>=0.2.0
|
|
||||||
questionary>=1.10.0
|
|
||||||
rich>=13.0.0
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ▶️ Запуск
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Убедитесь, что переменная окружения установлена
|
|
||||||
export OPENAI_API_KEY="sk-..."
|
export OPENAI_API_KEY="sk-..."
|
||||||
|
```
|
||||||
|
|
||||||
# Запустите игру
|
## Установка
|
||||||
|
|
||||||
|
1. Клонируйте репозиторий (или скачайте файлы):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/yourname/text-adventure.git
|
||||||
|
cd text-adventure
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Создайте и активируйте виртуальное окружение:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python -m venv .venv
|
||||||
|
source .venv/bin/activate # Linux/macOS
|
||||||
|
.\.venv\Scripts\activate # Windows
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Установите зависимости из `requirements.txt` (или вручную):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Если файла нет, установите пакеты по отдельности:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install langgraph langchain langchain-openai questionary rich
|
||||||
|
```
|
||||||
|
|
||||||
|
## Запуск
|
||||||
|
|
||||||
|
После установки и настройки переменной окружения просто запустите скрипт:
|
||||||
|
|
||||||
|
```bash
|
||||||
python solution.py
|
python solution.py
|
||||||
```
|
```
|
||||||
|
|
||||||
После запуска вы увидите:
|
Вы увидите в консоли начальную историю, список вариантов действий и сможете выбрать один из них. После выбора LLM сгенерирует короткую концовку.
|
||||||
|
|
||||||
1. Сгенерированное вступление и варианты действий.
|
## Пример работы
|
||||||
2. Вопрос с выбором через `questionary`.
|
|
||||||
3. Короткая концовка, основанная на вашем выборе.
|
|
||||||
|
|
||||||
---
|
```
|
||||||
|
> Запуск игры...
|
||||||
|
|
||||||
## 🎮 Пример
|
Начальная сцена:
|
||||||
|
Вы просыпаетесь в темном лесу. Вокруг слышен шорох ветвей.
|
||||||
|
Что вы будете делать?
|
||||||
|
|
||||||
```text
|
1) Пойти к свету
|
||||||
> python solution.py
|
2) Остановиться и послушать шумы
|
||||||
Welcome to the LLM Adventure!
|
3) Спрятаться за деревом
|
||||||
|
|
||||||
You find yourself in a dimly lit cavern. A faint glow emanates from a stone altar.
|
Выберите номер варианта: 1
|
||||||
What do you do?
|
|
||||||
|
|
||||||
1️⃣ Inspect the altar
|
Вы выбрали: "Пойти к свету"
|
||||||
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...
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
> **Важно**
|
||||||
|
> Если при запуске возникнет ошибка `openai.error.AuthenticationError`, проверьте корректность переменной `OPENAI_API_KEY`.
|
||||||
## 📚 Как это работает
|
|
||||||
|
|
||||||
- **StateGraph** управляет состоянием игры.
|
|
||||||
- `interrupt` заставляет граф остановиться и передать управление пользователю.
|
|
||||||
- После выбора пользовательского действия состояние обновляется и LLM продолжает генерацию.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🤝 Вклад
|
*Автор: [Ваше имя]*
|
||||||
|
*Дата: 2026‑05‑28*
|
||||||
Если хотите улучшить игру (добавить больше веток, использовать другие модели, добавить сохранение прогресса), создайте pull request. Убедитесь, что тесты проходят (`pytest`).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📄 Лицензия
|
|
||||||
|
|
||||||
MIT © 2026
|
|
||||||
Reference in New Issue
Block a user