97 lines
3.1 KiB
Markdown
97 lines
3.1 KiB
Markdown
# Парсер задания: сырой текст → TaskCard
|
|
|
|
Модуль принимает неформальное описание учебного задания и возвращает
|
|
структурированный объект `TaskCard` — без диалога, за один запрос к модели.
|
|
|
|
## Стек
|
|
|
|
| Компонент | Библиотека |
|
|
|-----------|------------|
|
|
| Языковая модель | BroJS (`openai/gpt-oss-20b:free`) |
|
|
| LLM-клиент | `langchain-openai` → `ChatOpenAI` |
|
|
| Промпт | `langchain-core` → `PromptTemplate` |
|
|
| Парсер | `langchain-core` → `PydanticOutputParser` |
|
|
| Модель данных | `pydantic` → `BaseModel` |
|
|
|
|
## Структура TaskCard
|
|
|
|
```python
|
|
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 (валидированный объект)
|
|
```
|
|
|
|
## Установка
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
## Переменные окружения
|
|
|
|
| Переменная | Описание |
|
|
|------------|----------|
|
|
| `JOURNAL_MCP_PAT` | Токен доступа к BroJS LLM |
|
|
|
|
Создай `.env`:
|
|
```
|
|
JOURNAL_MCP_PAT=jrnl_...
|
|
```
|
|
|
|
## Запуск
|
|
|
|
```bash
|
|
# Встроенный пример
|
|
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
|
|
Срок: к пятнице
|
|
Тип сдачи: отчёт
|
|
Критерии: полнота, пример кода
|
|
```
|