From e1d38f334539c5304b81d35b150c1199f9b005b3 Mon Sep 17 00:00:00 2001 From: lonpatovaadelina Date: Thu, 28 May 2026 13:24:09 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 99 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 50 insertions(+), 49 deletions(-) diff --git a/README.md b/README.md index d750446..da12047 100644 --- a/README.md +++ b/README.md @@ -1,61 +1,54 @@ -# Interactive Text Adventure with LLM & Interrupts -**Solution:** `solution.py` +# Text Adventure with LLM and Interrupts +*A minimal “choose‑your‑own‑story” game powered by LangGraph, LangChain & OpenAI* --- ## 📖 Описание -`solution.py` реализует мини‑игру «Выбери свою историю» на основе больших языковых моделей (LLM). +`solution.py` реализует простую интерактивную историю, где: -1. **Генерация начала** – LLM создаёт завязку и несколько вариантов действий. -2. **Пауза (interrupt)** – граф LangGraph ставит паузу, ожидая выбора игрока. -3. **Выбор пользователя** – через консольный интерфейс `questionary` пользователь выбирает вариант. -4. **Продолжение истории** – после выбора LLM дописывает дальнейший сюжет. +1. **LLM** генерирует начальный сюжет и несколько вариантов действий. +2. Граф приостанавливает выполнение (interrupt) и выводит варианты пользователю через `questionary`. +3. После выбора пользовательского действия LLM дописывает короткую концовку. -Граф построен с помощью `langgraph`, а состояние сохраняется в памяти (`InMemorySaver`). Для вывода текста используется `rich`. +Таким образом игрок видит цепочку: +`LLM → пауза → выбор → LLM`. --- ## ⚙️ Предварительные требования -| Пакет | Версия | -|-------|--------| -| Python | 3.10+ | -| langchain | ≥0.2.0 | -| langgraph | ≥0.1.0 | -| questionary | ≥1.10.0 | -| rich | ≥13.0.0 | -| openai (или любая LLM‑провайдер) | – | +| Технология | Версия | +|------------|--------| +| Python | ≥ 3.10 | +| pip | – | -> **Важно**: -> - Для работы с OpenAI понадобится переменная окружения `OPENAI_API_KEY`. -> - Если используете другую модель, замените импорт `ChatOpenAI` на соответствующий провайдер. +**API‑ключ OpenAI** должен быть доступен в переменной окружения `OPENAI_API_KEY` (или вы можете задать его вручную в коде). --- -## 🚀 Установка +## 📦 Установка ```bash -# 1. Клонируйте репозиторий (или скопируйте файл solution.py) -git clone https://github.com/yourusername/interactive-adventure.git -cd interactive-adventure +# Клонируйте репозиторий +git clone https://github.com/your-username/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`: ```text -langchain>=0.2.0 langgraph>=0.1.0 +langchain-openai>=0.2.0 questionary>=1.10.0 rich>=13.0.0 -openai>=1.0.0 # если используете OpenAI ``` --- @@ -63,47 +56,55 @@ openai>=1.0.0 # если используете OpenAI ## ▶️ Запуск ```bash -# Установите переменную окружения с ключом API (пример для Linux/macOS) +# Убедитесь, что переменная окружения установлена export OPENAI_API_KEY="sk-..." -# Для Windows: -set OPENAI_API_KEY=sk-... - +# Запустите игру python solution.py ``` -После запуска вы увидите интерактивный диалог в терминале. Выбирайте варианты, и история будет развиваться. +После запуска вы увидите: + +1. Сгенерированное вступление и варианты действий. +2. Вопрос с выбором через `questionary`. +3. Короткая концовка, основанная на вашем выборе. --- -## 📋 Пример работы +## 🎮 Пример ```text -> Начало истории: -Вы просыпаетесь в таинственном лесу. Вокруг слышен шорох ветра. -Варианты действий: - 1) Исследовать ближайший домик - 2) Пойти к озеру - 3) Остановиться и послушать тишину +> python solution.py +Welcome to the LLM Adventure! -Выберите номер: 2 +You find yourself in a dimly lit cavern. A faint glow emanates from a stone altar. +What do you do? -> Вы выбрали: "Пойти к озеру" -LLM продолжает историю... +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... ``` --- -## 📚 Что дальше? +## 📚 Как это работает -- Добавьте более сложные ветки и условия. -- Сохраните состояние в файл, чтобы игрок мог возобновить игру позже (`langgraph.checkpoint.file`). -- Интегрируйте голосовой ввод/вывод для более «живого» опыта. +- **StateGraph** управляет состоянием игры. +- `interrupt` заставляет граф остановиться и передать управление пользователю. +- После выбора пользовательского действия состояние обновляется и LLM продолжает генерацию. + +--- + +## 🤝 Вклад + +Если хотите улучшить игру (добавить больше веток, использовать другие модели, добавить сохранение прогресса), создайте pull request. Убедитесь, что тесты проходят (`pytest`). --- ## 📄 Лицензия -MIT © 2026 - ---- \ No newline at end of file +MIT © 2026 \ No newline at end of file