3.1 KiB
3.1 KiB
Парсер задания: сырой текст → TaskCard
Модуль принимает неформальное описание учебного задания и возвращает
структурированный объект TaskCard — без диалога, за один запрос к модели.
Стек
| Компонент | Библиотека |
|---|---|
| Языковая модель | BroJS (openai/gpt-oss-20b:free) |
| LLM-клиент | langchain-openai → ChatOpenAI |
| Промпт | langchain-core → PromptTemplate |
| Парсер | langchain-core → PydanticOutputParser |
| Модель данных | pydantic → BaseModel |
Структура TaskCard
class TaskCard(BaseModel):
title: str # Краткое название (2–6 слов)
subject: str # Область знаний / технология
deadline_hint: str # Срок в свободной форме
deliverable_type: str # Что сдать: отчёт, код, презентация…
grading_hints: list[str] # Критерии оценки
notes: Optional[str] # Дополнительные заметки
Цепочка обработки
task_text
│
▼
PromptTemplate ← format_instructions от PydanticOutputParser
│
▼
ChatOpenAI (BroJS, один запрос)
│
▼
PydanticOutputParser
│
▼
TaskCard (валидированный объект)
Установка
pip install -r requirements.txt
Переменные окружения
| Переменная | Описание |
|---|---|
JOURNAL_MCP_PAT |
Токен доступа к BroJS LLM |
Создай .env:
JOURNAL_MCP_PAT=jrnl_...
Запуск
# Встроенный пример
python main.py
# Своё описание задания
python main.py "Сдайте до понедельника презентацию по RAG: 10 слайдов. Оценка: за полноту и визуализацию."
Пример вывода
Вход:
Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов.
Оценка: за полноту и за пример кода.
─── Валидированный объект (model_dump) ─────────────────────
{
"title": "Мини-отчёт по LangChain",
"subject": "LangChain",
"deadline_hint": "к пятнице",
"deliverable_type": "отчёт",
"grading_hints": ["полнота", "пример кода"],
"notes": null
}
─── Человекочитаемая сводка ─────────────────────────────────
Задача: Мини-отчёт по LangChain
Тема: LangChain
Срок: к пятнице
Тип сдачи: отчёт
Критерии: полнота, пример кода