feat: initial solution for task 2 - structured output with Pydantic and LangChain

This commit is contained in:
2026-05-08 15:57:33 +03:00
commit 6cd179333a
4 changed files with 185 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
# Задание 2: Сырой текст задания → плоская карточка
## Описание
Модуль разбора одного формулировки задания в компактную структурированную сводку.
Использует LLM-цепочку (LangChain) + PydanticOutputParser для извлечения полей из неструктурированного текста.
## Стек
- Python 3.10+
- langchain-core, langchain-openai, pydantic, python-dotenv
## Установка
```bash
pip install -r requirements.txt
cp .env.example .env
# Заполнить OPENAI_API_KEY в .env
```
## Запуск
```bash
python main.py
```
## Что делает
1. Описывает Pydantic-модель `TaskCard` с полями: `title`, `subject`, `deadline_hint`, `deliverable_type`, `grading_hints`
2. Собирает цепочку: шаблон промпта → LLM → PydanticOutputParser
3. В промпте явно просит модель вернуть данные в формате, ожидаемом парсером
4. Выводит валидированный объект (`model_dump()`) и краткую человекочитаемую сводку
5. Один запрос — один проход, без уточняющих вопросов
## Пример вывода
```
📝 Входной текст:
"Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов. Оценка: за полноту и за пример кода."
=== Карточка задания ===
Название: Мини-отчёт по LangChain
Предмет: LangChain
Дедлайн: к пятнице
Тип результата: отчёт
Критерии: полнота, пример кода
=== JSON (model_dump) ===
{'title': 'Мини-отчёт по LangChain', 'subject': 'LangChain', ...}
```