сырой текст задания → плоская карточка: README.md
This commit is contained in:
+90
-79
@@ -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` | Ключевые критерии оценки |
|
||||
|
||||
| Поле | Тип | Описание |
|
||||
|------|-----|----------|
|
||||
| `title` | `str` | Краткое название задачи |
|
||||
| `subject` | `str` | Предмет или область знаний |
|
||||
| `deadline_hint` | `str` | Указание срока сдачи в свободной форме |
|
||||
| `deliverable_type` | `str` | Тип сдаваемого материала (отчёт, код, презентация и т.д.) |
|
||||
| `grading_hints` | `List[str]` | Ключевые критерии оценки, упомянутые в тексте |
|
||||
|
||||
Модуль использует **LangChain** для общения с LLM и **Pydantic** для гарантированного парсинга результата.
|
||||
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
|
||||
source .venv/bin/activate # Windows: .\.venv\Scripts\activate
|
||||
|
||||
# Установите зависимости
|
||||
pip install langchain-core langchain-openai pydantic python-dotenv
|
||||
# Установите зависимости из requirements.txt
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
> **Важно**
|
||||
> 1. Для работы с LLM понадобится ключ OpenAI (или другой провайдер).
|
||||
> 2. Ключ можно задать через переменную окружения `OPENAI_API_KEY` или в файле `.env`.
|
||||
`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-...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Как запустить
|
||||
## 📁 Структура проекта
|
||||
|
||||
### 1️⃣ Запуск скрипта вручную
|
||||
| Файл | Описание |
|
||||
|------|----------|
|
||||
| `extract_task_card.py` | Основной скрипт, содержащий модель `TaskCard`, конфигурацию LangChain и пример запуска. |
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Запуск
|
||||
|
||||
### 1️⃣ Простой запуск через CLI
|
||||
|
||||
```bash
|
||||
# Убедитесь, что переменная OPENAI_API_KEY установлена
|
||||
export OPENAI_API_KEY="sk-..."
|
||||
|
||||
python task_card.py
|
||||
python extract_task_card.py "Напиши задание по теме «Алгоритмы сортировки». Дедлайн – завтра. Сдача: код + отчёт. Оценка по точности, читаемости и эффективности."
|
||||
```
|
||||
|
||||
При запуске скрипт запросит у пользователя ввод текста задания и выведет распарсенный объект `TaskCard`.
|
||||
Вывод будет в формате JSON:
|
||||
|
||||
### 2️⃣ Использование как модуля
|
||||
```json
|
||||
{
|
||||
"title": "Алгоритмы сортировки",
|
||||
"subject": "Тема «Алгоритмы сортировки»",
|
||||
"deadline_hint": "завтра",
|
||||
"deliverable_type": "код + отчёт",
|
||||
"grading_hints": [
|
||||
"точность",
|
||||
"читаемость",
|
||||
"эффективность"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 2️⃣ Запуск из кода
|
||||
|
||||
```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 = """
|
||||
Нужно написать программу на Python, которая будет генерировать отчёт о продажах за последний квартал.
|
||||
Сдать код и README. Срок сдачи – через две недели после начала проекта.
|
||||
Оценка будет по качеству кода, читаемости и покрытию тестами.
|
||||
Напиши задание по теме «Алгоритмы сортировки». Дедлайн – завтра.
|
||||
Сдача: код + отчёт. Оценка по точности, читаемости и эффективности.
|
||||
"""
|
||||
|
||||
card: TaskCard = parse_task_text(raw)
|
||||
card = extract_from_text(raw)
|
||||
print(card.json(indent=2))
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Пример использования
|
||||
## 📚 Пример использования
|
||||
|
||||
```bash
|
||||
$ python task_card.py
|
||||
Введите текст задания:
|
||||
Нужно написать программу на Python, которая будет генерировать отчёт о продажах за последний квартал.
|
||||
Сдать код и README. Срок сдачи – через две недели после начала проекта.
|
||||
Оценка будет по качеству кода, читаемости и покрытию тестами.
|
||||
```python
|
||||
from extract_task_card import TaskCard, extract_from_text
|
||||
|
||||
Результат:
|
||||
{
|
||||
"title": "Генерация отчёта о продажах",
|
||||
"subject": "Python",
|
||||
"deadline_hint": "через две недели после начала проекта",
|
||||
"deliverable_type": "код и README",
|
||||
"grading_hints": [
|
||||
"качество кода",
|
||||
"читаемость",
|
||||
"покрытие тестами"
|
||||
]
|
||||
}
|
||||
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))
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Структура файлов
|
||||
## 🔧 Настройка модели
|
||||
|
||||
| Файл | Описание |
|
||||
|------|----------|
|
||||
| `task_card.py` | Основной скрипт: определение модели, шаблона промпта и функции парсинга. |
|
||||
| `.env.example` | Пример файла с переменными окружения (ключи API). |
|
||||
|
||||
---
|
||||
|
||||
## Тестирование
|
||||
|
||||
```bash
|
||||
# Установите pytest, если ещё не установлен
|
||||
pip install pytest
|
||||
|
||||
# Запустите тесты (если они есть)
|
||||
pytest
|
||||
- **Модель**: по умолчанию используется `gpt-4o-mini`. При необходимости можно изменить в коде:
|
||||
```python
|
||||
llm = ChatOpenAI(model="gpt-4o", temperature=0.2)
|
||||
```
|
||||
|
||||
> *В текущей версии тестов нет, но вы можете добавить свои.*
|
||||
- **Температура**: регулирует креативность ответа (по умолчанию 0.2).
|
||||
|
||||
---
|
||||
|
||||
## Вклад в проект
|
||||
## 📜 Лицензия
|
||||
|
||||
1. Сделайте fork репозитория.
|
||||
2. Создайте ветку `feature/your-feature`.
|
||||
3. Добавьте изменения и запустите тесты.
|
||||
4. Откройте Pull Request.
|
||||
MIT License – свободно используйте и модифицируйте по своему усмотрению.
|
||||
|
||||
---
|
||||
|
||||
## Лицензия
|
||||
|
||||
MIT © 2026
|
||||
Reference in New Issue
Block a user