5.7 KiB
5.7 KiB
Сырой текст задания → плоская карточка
📖 Описание проекта
В рамках курса «Ассистент по учёбе» вы разрабатываете модуль, который принимает неформальное описание задачи (например, сообщение преподавателя в чате) и преобразует его в структурированный объект. Полученный объект можно дальше фильтровать, сохранять или передавать следующему шагу пайплайна.
Что делает программа?
- Принимает одну строку/абзац с формулировкой задания.
- С помощью LLM (OpenAI, Azure, Anthropic и т.д.) извлекает ключевые поля:
title– название задачиsubject– предмет / темаdeadline_hint– подсказка о сроке сдачи (строка в свободной форме)deliverable_type– тип сдаваемого материала (отчёт, код, презентация и т.п.)grading_hints– список строк с упоминаниями оценивания
Почему это важно?
- Позволяет быстро структурировать входные данные без ручного парсинга.
- Делает дальнейшую обработку более надёжной и предсказуемой.
⚙️ Стек и установка
| Пакет | Версия (рекоменд.) |
|---|---|
langchain-core |
0.2.x |
langchain-openai |
0.1.x |
pydantic |
2.x |
python-dotenv |
любой |
# Создайте виртуальное окружение (рекомендовано)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Установите зависимости
pip install langchain-core langchain-openai pydantic python-dotenv
Важно:
- Создайте файл
.envв корне проекта и добавьте ключи доступа к LLM, например:OPENAI_API_KEY=sk-...
- Если используете другую модель (Azure, Anthropic), настройте соответствующие переменные окружения согласно документации
langchain-openai.
📂 Структура проекта
project/
├── .env # Переменные окружения
├── main.py # Точка входа – пример использования
├── task_parser.py # Модуль с Pydantic‑моделью и функцией парсинга
└── README.md # Это файл
🚀 Запуск
1. Пример запуска через main.py
python main.py
main.py содержит пример входного текста и выводит распарсенный объект.
Вывод
Task(title='Составить отчёт по проекту', subject='Информатика', deadline_hint='до 15.09', deliverable_type='отчёт', grading_hints=['проверка структуры, логики и оформления'])
2. Использование как библиотеки
from task_parser import parse_task_text, Task
text = "Напиши код для решения задачи по алгоритмам до 20.10."
task: Task = parse_task_text(text)
print(task.title) # → 'Написать код'
print(task.grading_hints) # → ['проверка корректности кода', ...]
🧩 Как работает parse_task_text
- Формирование запроса – создаётся prompt, в котором описывается формат ответа (JSON).
- Вызов LLM – через
langchain-openaiотправляется запрос и получает JSON‑строку. - Проверка схемы – строка парсится в
pydantic.BaseModel, гарантируя типизацию и наличие обязательных полей.
Если модель не может распарсить ответ, выбрасывается исключение с подробным сообщением.
📄 Пример входного текста
"Пожалуйста, подготовьте презентацию по теме «Машинное обучение» до 30 сентября. В оценке учитываются оригинальность и глубина анализа."
Ожидаемый результат (JSON)
{
"title": "Подготовка презентации",
"subject": "Машинное обучение",
"deadline_hint": "до 30 сентября",
"deliverable_type": "презентация",
"grading_hints": [
"оригинальность",
"глубина анализа"
]
}
📚 Полезные ссылки
🤝 Вклад
Если хотите улучшить проект:
- Форкните репозиторий.
- Создайте ветку с вашим изменением.
- Откройте Pull Request и опишите, что было сделано.
Happy parsing!