# Сырой текст задания → плоская карточка ## 📖 Описание проекта В рамках курса «Ассистент по учёбе» вы разрабатываете модуль, который принимает **неформальное описание задачи** (например, сообщение преподавателя в чате) и преобразует его в структурированный объект. Полученный объект можно дальше фильтровать, сохранять или передавать следующему шагу пайплайна. ### Что делает программа? - Принимает одну строку/абзац с формулировкой задания. - С помощью LLM (OpenAI, Azure, Anthropic и т.д.) извлекает ключевые поля: - `title` – название задачи - `subject` – предмет / тема - `deadline_hint` – подсказка о сроке сдачи (строка в свободной форме) - `deliverable_type` – тип сдаваемого материала (отчёт, код, презентация и т.п.) - `grading_hints` – список строк с упоминаниями оценивания ### Почему это важно? - Позволяет быстро структурировать входные данные без ручного парсинга. - Делает дальнейшую обработку более надёжной и предсказуемой. ## ⚙️ Стек и установка | Пакет | Версия (рекоменд.) | |-------|--------------------| | `langchain-core` | 0.2.x | | `langchain-openai` | 0.1.x | | `pydantic` | 2.x | | `python-dotenv` | любой | ```bash # Создайте виртуальное окружение (рекомендовано) python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # Установите зависимости pip install langchain-core langchain-openai pydantic python-dotenv ``` > **Важно**: > 1. Создайте файл `.env` в корне проекта и добавьте ключи доступа к LLM, например: > ```dotenv > OPENAI_API_KEY=sk-... > ``` > 2. Если используете другую модель (Azure, Anthropic), настройте соответствующие переменные окружения согласно документации `langchain-openai`. ## 📂 Структура проекта ``` project/ ├── .env # Переменные окружения ├── main.py # Точка входа – пример использования ├── task_parser.py # Модуль с Pydantic‑моделью и функцией парсинга └── README.md # Это файл ``` ## 🚀 Запуск ### 1. Пример запуска через `main.py` ```bash python main.py ``` `main.py` содержит пример входного текста и выводит распарсенный объект. > **Вывод** > ```text > Task(title='Составить отчёт по проекту', subject='Информатика', deadline_hint='до 15.09', deliverable_type='отчёт', grading_hints=['проверка структуры, логики и оформления']) > ``` ### 2. Использование как библиотеки ```python from task_parser import parse_task_text, Task text = "Напиши код для решения задачи по алгоритмам до 20.10." task: Task = parse_task_text(text) print(task.title) # → 'Написать код' print(task.grading_hints) # → ['проверка корректности кода', ...] ``` ## 🧩 Как работает `parse_task_text` 1. **Формирование запроса** – создаётся prompt, в котором описывается формат ответа (JSON). 2. **Вызов LLM** – через `langchain-openai` отправляется запрос и получает JSON‑строку. 3. **Проверка схемы** – строка парсится в `pydantic.BaseModel`, гарантируя типизацию и наличие обязательных полей. Если модель не может распарсить ответ, выбрасывается исключение с подробным сообщением. ## 📄 Пример входного текста ```text "Пожалуйста, подготовьте презентацию по теме «Машинное обучение» до 30 сентября. В оценке учитываются оригинальность и глубина анализа." ``` ### Ожидаемый результат (JSON) ```json { "title": "Подготовка презентации", "subject": "Машинное обучение", "deadline_hint": "до 30 сентября", "deliverable_type": "презентация", "grading_hints": [ "оригинальность", "глубина анализа" ] } ``` ## 📚 Полезные ссылки - [LangChain Docs – OpenAI](https://langchain.com/docs/integrations/providers/openai) - [Pydantic v2.0](https://docs.pydantic.dev/latest/) - [Python‑dotenv](https://pypi.org/project/python-dotenv/) ## 🤝 Вклад Если хотите улучшить проект: 1. Форкните репозиторий. 2. Создайте ветку с вашим изменением. 3. Откройте Pull Request и опишите, что было сделано. --- **Happy parsing!**