сырой текст задания → плоская карточка: README.md

This commit is contained in:
2026-05-27 07:05:18 +00:00
parent 797031c25b
commit 6d46d2b5fc
@@ -1,126 +1,137 @@
# Task Card – превращение сырого текста задания в структурированные данные # Task Card Extractor
## Описание проекта A lightweight Python utility that transforms informal task descriptions into a **flat JSON card** containing the following fields:
`task_card.py` реализует модуль, который принимает неформальное описание задачи (как в переписке или на сайте курса) и преобразует его в **структурированный объект** `TaskCard`. | 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.
|------|-----|----------|
| `title` | `str` | Краткое название задачи |
| `subject` | `str` | Предмет или область знаний |
| `deadline_hint` | `str` | Указание срока сдачи в свободной форме |
| `deliverable_type` | `str` | Тип сдаваемого материала (отчёт, код, презентация и т.д.) |
| `grading_hints` | `List[str]` | Ключевые критерии оценки, упомянутые в тексте |
Модуль использует **LangChain** для общения с LLM и **Pydantic** для гарантированного парсинга результата.
--- ---
## Установка зависимостей ## 📦 Установка зависимостей
```bash ```bash
# Создайте виртуальное окружение (рекомендуется) # Создайте виртуальное окружение (рекомендуется)
python -m venv .venv python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate source .venv/bin/activate # Windows: .\.venv\Scripts\activate
# Установите зависимости # Установите зависимости из requirements.txt
pip install langchain-core langchain-openai pydantic python-dotenv pip install -r requirements.txt
``` ```
> **Важно** `requirements.txt`:
> 1. Для работы с LLM понадобится ключ OpenAI (или другой провайдер).
> 2. Ключ можно задать через переменную окружения `OPENAI_API_KEY` или в файле `.env`. ```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-...
```
--- ---
## Как запустить ## 📁 Структура проекта
### 1️⃣ Запуск скрипта вручную | Файл | Описание |
|------|----------|
| `extract_task_card.py` | Основной скрипт, содержащий модель `TaskCard`, конфигурацию LangChain и пример запуска. |
---
## 🚀 Запуск
### 1️⃣ Простой запуск через CLI
```bash ```bash
# Убедитесь, что переменная OPENAI_API_KEY установлена python extract_task_card.py "Напиши задание по теме «Алгоритмы сортировки». Дедлайн – завтра. Сдача: код + отчёт. Оценка по точности, читаемости и эффективности."
export OPENAI_API_KEY="sk-..."
python task_card.py
``` ```
При запуске скрипт запросит у пользователя ввод текста задания и выведет распарсенный объект `TaskCard`. Вывод будет в формате JSON:
### 2️⃣ Использование как модуля ```json
{
"title": "Алгоритмы сортировки",
"subject": "Тема «Алгоритмы сортировки»",
"deadline_hint": "завтра",
"deliverable_type": "код + отчёт",
"grading_hints": [
"точность",
"читаемость",
"эффективность"
]
}
```
### 2️⃣ Запуск из кода
```python ```python
from task_card import parse_task_text, TaskCard from pathlib import Path
import os
# Импортируем модель и функцию извлечения
from extract_task_card import TaskCard, extract_from_text
raw = """ raw = """
Нужно написать программу на Python, которая будет генерировать отчёт о продажах за последний квартал. Напиши задание по теме «Алгоритмы сортировки». Дедлайн – завтра.
Сдать код и README. Срок сдачи – через две недели после начала проекта. Сдача: код + отчёт. Оценка по точности, читаемости и эффективности.
Оценка будет по качеству кода, читаемости и покрытию тестами.
""" """
card: TaskCard = parse_task_text(raw) card = extract_from_text(raw)
print(card.json(indent=2)) print(card.json(indent=2))
``` ```
--- ---
## Пример использования ## 📚 Пример использования
```bash ```python
$ python task_card.py from extract_task_card import TaskCard, extract_from_text
Введите текст задания:
Нужно написать программу на Python, которая будет генерировать отчёт о продажах за последний квартал.
Сдать код и README. Срок сдачи – через две недели после начала проекта.
Оценка будет по качеству кода, читаемости и покрытию тестами.
Результат: raw_description = """
{ Создать программу, которая генерирует случайный массив из 1000 чисел,
"title": "Генерация отчёта о продажах", сортирует его методом быстрой сортировки и выводит время выполнения.
"subject": "Python", Дедлайн – через неделю. Сдача: код + краткое описание алгоритма.
"deadline_hint": "через две недели после начала проекта", Оценка по скорости, корректности и читаемости кода.
"deliverable_type": "код и README", """
"grading_hints": [
"качество кода", 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
| `task_card.py` | Основной скрипт: определение модели, шаблона промпта и функции парсинга. | llm = ChatOpenAI(model="gpt-4o", temperature=0.2)
| `.env.example` | Пример файла с переменными окружения (ключи API). | ```
- **Температура**: регулирует креативность ответа (по умолчанию 0.2).
--- ---
## Тестирование ## 📜 Лицензия
```bash MIT License – свободно используйте и модифицируйте по своему усмотрению.
# Установите pytest, если ещё не установлен
pip install pytest
# Запустите тесты (если они есть) ---
pytest
```
> *В текущей версии тестов нет, но вы можете добавить свои.*
---
## Вклад в проект
1. Сделайте fork репозитория.
2. Создайте ветку `feature/your-feature`.
3. Добавьте изменения и запустите тесты.
4. Откройте Pull Request.
---
## Лицензия
MIT © 2026