# 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. --- ## 📦 Установка зависимостей ```bash # Создайте виртуальное окружение (рекомендуется) python -m venv .venv source .venv/bin/activate # Windows: .\.venv\Scripts\activate # Установите зависимости из requirements.txt pip install -r requirements.txt ``` `requirements.txt`: ```text langchain-core>=0.2.0 langchain-openai>=0.1.0 pydantic>=2.0 openai>=1.0 # для ChatOpenAI ``` > **Важно**: > Установите переменную окружения `OPENAI_API_KEY` с вашим ключом OpenAI, иначе модель не сможет работать. ```bash export OPENAI_API_KEY="sk-..." # Windows: set OPENAI_API_KEY=sk-... ``` --- ## 📁 Структура проекта | Файл | Описание | |------|----------| | `extract_task_card.py` | Основной скрипт, содержащий модель `TaskCard`, конфигурацию LangChain и пример запуска. | --- ## 🚀 Запуск ### 1️⃣ Простой запуск через CLI ```bash python extract_task_card.py "Напиши задание по теме «Алгоритмы сортировки». Дедлайн – завтра. Сдача: код + отчёт. Оценка по точности, читаемости и эффективности." ``` Вывод будет в формате JSON: ```json { "title": "Алгоритмы сортировки", "subject": "Тема «Алгоритмы сортировки»", "deadline_hint": "завтра", "deliverable_type": "код + отчёт", "grading_hints": [ "точность", "читаемость", "эффективность" ] } ``` ### 2️⃣ Запуск из кода ```python 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)) ``` --- ## 📚 Пример использования ```python 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`. При необходимости можно изменить в коде: ```python llm = ChatOpenAI(model="gpt-4o", temperature=0.2) ``` - **Температура**: регулирует креативность ответа (по умолчанию 0.2). --- ## 📜 Лицензия MIT License – свободно используйте и модифицируйте по своему усмотрению. ---