Files

4.3 KiB

Task Card Extractor

A lightweight Python utility that transforms informal task descriptions into a flat JSON card containing the following fields:

Field Description
title Название задания
subject Тема/область задачи
deadline_hint Подсказка по дедлайну
deliverable_type Тип сдачи (отчёт, код и т.д.)
grading_hints Ключевые критерии оценки

The extractor uses LangChain with an OpenAI model to parse the raw text and output a validated TaskCard Pydantic object.


📦 Установка зависимостей

# Создайте виртуальное окружение (рекомендуется)
python -m venv .venv
source .venv/bin/activate   # Windows: .\.venv\Scripts\activate

# Установите зависимости из requirements.txt
pip install -r requirements.txt

requirements.txt:

langchain-core>=0.2.0
langchain-openai>=0.1.0
pydantic>=2.0
openai>=1.0  # для ChatOpenAI

Важно:
Установите переменную окружения OPENAI_API_KEY с вашим ключом OpenAI, иначе модель не сможет работать.

export OPENAI_API_KEY="sk-..."
# Windows:
set OPENAI_API_KEY=sk-...

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

Файл Описание
extract_task_card.py Основной скрипт, содержащий модель TaskCard, конфигурацию LangChain и пример запуска.

🚀 Запуск

1️⃣ Простой запуск через CLI

python extract_task_card.py "Напиши задание по теме «Алгоритмы сортировки». Дедлайн – завтра. Сдача: код + отчёт. Оценка по точности, читаемости и эффективности."

Вывод будет в формате JSON:

{
  "title": "Алгоритмы сортировки",
  "subject": "Тема «Алгоритмы сортировки»",
  "deadline_hint": "завтра",
  "deliverable_type": "код + отчёт",
  "grading_hints": [
    "точность",
    "читаемость",
    "эффективность"
  ]
}

2️⃣ Запуск из кода

from pathlib import Path
import os

# Импортируем модель и функцию извлечения
from extract_task_card import TaskCard, extract_from_text

raw = """
Напиши задание по теме «Алгоритмы сортировки». Дедлайн – завтра.
Сдача: код + отчёт. Оценка по точности, читаемости и эффективности.
"""

card = extract_from_text(raw)
print(card.json(indent=2))

📚 Пример использования

from extract_task_card import TaskCard, extract_from_text

raw_description = """
Создать программу, которая генерирует случайный массив из 1000 чисел,
сортирует его методом быстрой сортировки и выводит время выполнения.
Дедлайн – через неделю. Сдача: код + краткое описание алгоритма.
Оценка по скорости, корректности и читаемости кода.
"""

task_card = extract_from_text(raw_description)

print("Title:", task_card.title)
print("Subject:", task_card.subject)
print("Deadline hint:", task_card.deadline_hint)
print("Deliverable type:", task_card.deliverable_type)
print("Grading hints:", ", ".join(task_card.grading_hints))

🔧 Настройка модели

  • Модель: по умолчанию используется gpt-4o-mini. При необходимости можно изменить в коде:
    llm = ChatOpenAI(model="gpt-4o", temperature=0.2)
    
  • Температура: регулирует креативность ответа (по умолчанию 0.2).

📜 Лицензия

MIT License – свободно используйте и модифицируйте по своему усмотрению.