From f78c243a1500ff85f58d9d6820b1dd74ad286248 Mon Sep 17 00:00:00 2001 From: lonpatovaadelina Date: Fri, 29 May 2026 06:54:28 +0000 Subject: [PATCH] =?UTF-8?q?=D0=AD=D0=BA=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD:=20?= =?UTF-8?q?=D0=A1=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=B2=D1=8B=D0=B2?= =?UTF-8?q?=D0=BE=D0=B4=20(Pydantic):=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 153 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dc52223..232dee5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,154 @@ -# task-6a186500-ekzamen-strukturirovannyy +# Экзамен: Структурированный вывод (Pydantic) -Решения домашних заданий \ No newline at end of file +## 📖 Описание + +В этом проекте реализована цепочка LangChain, которая из произвольного текста извлекает **валидированный объект Pydantic** без ручного разбора строк. +Текст может описывать либо человека, либо встречу. На основе простого определения типа текста выбирается подходящая схема (`PersonInfo` или `MeetingNotes`) и выводится структурированный результат. + +### Что умеет проект + +| Функция | Что делает | +|---------|------------| +| **Определение типа текста** | На основе эвристики (ключевых слов) выбирается схема | +| **Pydantic‑модели** | `PersonInfo` и `MeetingNotes` с полями и описаниями | +| **Chain** | Prompt → LLM → PydanticOutputParser | +| **CLI** | Ввод текста вручную или выбор из двух встроенных примеров | +| **Вывод** | `model_dump()` + краткая сводка | + +--- + +## ⚙️ Установка зависимостей + +```bash +# Создайте виртуальное окружение (рекомендовано) +python -m venv venv +source venv/bin/activate # Windows: venv\Scripts\activate + +# Установите зависимости +pip install langchain-core langchain-openai pydantic python-dotenv +``` + +> **Важно**: +> - Требуется Python ≥ 3.10. +> - Для работы с OpenAI понадобится переменная окружения `OPENAI_API_KEY`. +> - Если вы хотите использовать Ollama, замените `ChatOpenAI` на `ChatOllama` и установите `langchain-ollama`. + +--- + +## 🚀 Запуск + +### 1. Запуск скрипта + +```bash +python solution.py +``` + +После запуска появится меню: + +``` +Выберите вариант: +1. Ввести текст вручную +2. Использовать пример "Person" +3. Использовать пример "Meeting" +``` + +Выберите нужный номер и следуйте инструкциям. После обработки вы увидите: + +``` +=== Структурированный вывод === +{ + "name": "Иван Иванов", + "age": 30, + "profession": "Разработчик", + "skills": ["Python", "FastAPI", "Docker"] +} +Краткая сводка: 4 поля, 1 необязательное. +``` + +### 2. Запуск через CLI‑аргументы + +```bash +python solution.py --text "Встреча с командой по проекту X..." +``` + +или + +```bash +python solution.py --example person +``` + +Аргументы: + +| Параметр | Описание | +|----------|----------| +| `--text` | Текст, который нужно проанализировать | +| `--example` | `person` или `meeting` – использовать встроенный пример | +| `--model` | Имя модели LLM (по умолчанию `gpt-4o-mini`) | + +--- + +## 📄 Пример использования + +```python +from solution import process_text + +text = """ +Меня зовут Мария Петрова, мне 28 лет. Я работаю аналитиком данных в компании "DataCorp". +Мои навыки: SQL, Python, Tableau, машинное обучение. +""" + +result = process_text(text) +print(result.model_dump()) +``` + +Вывод: + +```json +{ + "name": "Мария Петрова", + "age": 28, + "profession": "аналитик данных", + "skills": ["SQL", "Python", "Tableau", "машинное обучение"] +} +``` + +--- + +## 📚 Структура проекта + +``` +. +├── solution.py # Основной скрипт +├── .env # Переменные окружения (не включено в репозиторий) +├── README.md # Это файл +└── requirements.txt # (опционально) список зависимостей +``` + +--- + +## 🔧 Как это работает + +1. **Определение типа** – простая эвристика ищет ключевые слова (`"встреча"`, `"команда"`, `"протокол"`) для выбора схемы `MeetingNotes`; иначе – `PersonInfo`. +2. **Prompt** – шаблон, который подставляет текст и задает формат вывода в JSON. +3. **LLM** – генерирует ответ в нужном формате. +4. **PydanticOutputParser** – валидирует и преобразует JSON в объект Pydantic. +5. **Вывод** – `model_dump()` + краткая сводка. + +--- + +## 📦 Зависимости + +| Пакет | Версия | Зачем | +|-------|--------|-------| +| `langchain-core` | ≥ 1.0.0 | Основные компоненты LangChain | +| `langchain-openai` | - | LLM‑интеграция | +| `pydantic` | - | Валидация схем | +| `python-dotenv` | - | Загрузка переменных окружения | + +--- + +## 📬 Поддержка и вопросы + +Если возникли вопросы, откройте issue в репозитории или напишите в чат проекта. + +--- \ No newline at end of file