Task Parser – “Raw Text → Flat Card”
📖 Описание
task_parser.py — это модуль, который принимает неформальное описание задания (строку или короткий абзац) и преобразует его в структурированный объект TaskCard.
Полученный объект содержит только те поля, которые нужны дальше в пайплайне: название задачи, предмет, подсказки по дедлайну, тип сдачи и указания по оценке. Всё это делается без диалога с моделью – один запрос → один ответ.
🚀 Установка
# Создайте виртуальное окружение (рекомендуется)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Установите зависимости
pip install langchain-core langchain-openai pydantic python-dotenv
Важно
OPENAI_API_KEY(или другой ключ для выбранной модели) должен быть в переменных окружения.- Можно хранить его в файле
.envрядом с проектом:
# .env
OPENAI_API_KEY=sk-xxxxxxxxxxxxxx
📦 Как запустить
1️⃣ Вариант через REPL / Jupyter
from task_parser import parse_task_text
raw = """
Напиши мини‑отчёт по LangChain: проработай пример с ChatOpenAI, покажи выводы и сделай выводы о производительности. Срок сдачи – 3 дня после получения задания. Оценка будет по качеству кода и полноте отчёта.
"""
card = parse_task_text(raw)
print(card.json(indent=2))
2️⃣ Через командную строку
Добавьте в task_parser.py (или создайте отдельный скрипт) функцию main():
if __name__ == "__main__":
import sys
raw = " ".join(sys.argv[1:])
card = parse_task_text(raw)
print(card.json(indent=2))
Тогда можно вызвать так:
python task_parser.py "Напиши мини‑отчёт по LangChain: проработай пример с ChatOpenAI, покажи выводы и сделай выводы о производительности. Срок сдачи – 3 дня после получения задания."
📄 Пример использования
from task_parser import parse_task_text
raw = """
Создать презентацию по теме «Введение в LangChain». Включить примеры кода, графики и выводы.
Срок: до пятницы. Оценка будет зависеть от оригинальности идей и качества оформления слайдов.
"""
card = parse_task_text(raw)
# card – это объект TaskCard
print(card.title) # "Создать презентацию по теме «Введение в LangChain»"
print(card.subject) # "LangChain"
print(card.deadline_hint) # "до пятницы"
print(card.deliverable_type) # "презентация"
print(card.grading_hints) # ["оригинальность идей", "качество оформления слайдов"]
📚 Что дальше
- Фильтрация: можно отфильтровать задачи по предмету или типу сдачи.
- Сохранение: сериализовать в JSON и хранить в базе данных.
- Пайплайн: передать
TaskCardследующему шагу, например, генератору чек‑листов.
Если возникнут вопросы – откройте issue или свяжитесь с автором проекта.