Files
dz/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка

Сырой текст задания → плоская карточка

📖 Описание проекта

В рамках курса «Ассистент по учёбе» вы разрабатываете модуль, который принимает неформальное описание задачи (например, сообщение преподавателя в чате) и преобразует его в структурированный объект. Полученный объект можно дальше фильтровать, сохранять или передавать следующему шагу пайплайна.

Что делает программа?

  • Принимает одну строку/абзац с формулировкой задания.
  • С помощью 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 любой
# Создайте виртуальное окружение (рекомендовано)
python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate

# Установите зависимости
pip install langchain-core langchain-openai pydantic python-dotenv

Важно:

  1. Создайте файл .env в корне проекта и добавьте ключи доступа к LLM, например:
OPENAI_API_KEY=sk-...
  1. Если используете другую модель (Azure, Anthropic), настройте соответствующие переменные окружения согласно документации langchain-openai.

📂 Структура проекта

project/
├── .env                # Переменные окружения
├── main.py             # Точка входа – пример использования
├── task_parser.py      # Модуль с Pydantic‑моделью и функцией парсинга
└── README.md           # Это файл

🚀 Запуск

1. Пример запуска через main.py

python main.py

main.py содержит пример входного текста и выводит распарсенный объект.

Вывод

Task(title='Составить отчёт по проекту', subject='Информатика', deadline_hint='до 15.09', deliverable_type='отчёт', grading_hints=['проверка структуры, логики и оформления'])

2. Использование как библиотеки

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, гарантируя типизацию и наличие обязательных полей.

Если модель не может распарсить ответ, выбрасывается исключение с подробным сообщением.

📄 Пример входного текста

"Пожалуйста, подготовьте презентацию по теме «Машинное обучение» до 30 сентября. В оценке учитываются оригинальность и глубина анализа."

Ожидаемый результат (JSON)

{
  "title": "Подготовка презентации",
  "subject": "Машинное обучение",
  "deadline_hint": "до 30 сентября",
  "deliverable_type": "презентация",
  "grading_hints": [
    "оригинальность",
    "глубина анализа"
  ]
}

📚 Полезные ссылки

🤝 Вклад

Если хотите улучшить проект:

  1. Форкните репозиторий.
  2. Создайте ветку с вашим изменением.
  3. Откройте Pull Request и опишите, что было сделано.

Happy parsing!