70 lines
3.2 KiB
Markdown
70 lines
3.2 KiB
Markdown
# Task 6a1484a292f7bbc573321443 – "сырой текст задания → плоская карточка"
|
||
|
||
## Что делает проект
|
||
|
||
Этот репозиторий содержит решение задачи «Преобразовать свободный текст описания задания в структурированную карточку». В качестве примера используется **LangChain** и **Pydantic** для генерации JSON‑объекта, который можно дальше использовать в пайплайне.
|
||
|
||
## Структура репозитория
|
||
|
||
| Файл | Назначение |
|
||
|------|------------|
|
||
| `main.py` | Точка входа. Содержит модель данных, цепочку LangChain и примеры использования. |
|
||
| `requirements.txt` | Зависимости проекта (без точных версий). |
|
||
| `README.md` | Текущий файл – описание проекта, инструкции по установке и запуску. |
|
||
|
||
## Установка
|
||
|
||
```bash
|
||
# Создайте виртуальное окружение (рекомендуется)
|
||
python -m venv .venv
|
||
source .venv/bin/activate # Windows: .\.venv\Scripts\activate
|
||
|
||
# Установите зависимости
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
## Как запустить
|
||
|
||
```bash
|
||
python main.py
|
||
```
|
||
|
||
Скрипт выполнит три примера преобразования текста в карточку и выведет результат.
|
||
|
||
## Архитектура решения
|
||
|
||
1. **Pydantic‑модель** `TaskCard` описывает структуру выходных данных: название, предмет, подсказка по сроку, тип сдачи и список критериев оценки.
|
||
2. **PromptTemplate + PydanticOutputParser** – шаблон запроса к LLM с инструкцией вернуть JSON в соответствии с моделью.
|
||
3. **ChatOpenAI** – подключение к модели BroJS (см. `model`, `base_url` и переменную окружения `JOURNAL_MCP_PAT`).
|
||
4. Асинхронная функция `parse_task()` объединяет цепочку: шаблон → LLM → парсер.
|
||
5. В блоке `__main__` три примера текста, которые проходят через `parse_task()` и печатаются в читаемом виде.
|
||
|
||
## Пример вывода
|
||
|
||
```
|
||
Example 1:
|
||
Raw text:
|
||
Сдайте к пятнице мини‑отчёт по LangChain: 2 страницы, упор на агентов. Оценка: за полноту и за пример кода.
|
||
|
||
Parsed card:
|
||
{
|
||
"title": "Мини‑отчёт по LangChain",
|
||
"subject": null,
|
||
"deadline_hint": "к пятнице",
|
||
"deliverable_type": "отчёт",
|
||
"grading_hints": [
|
||
"полнота",
|
||
"пример кода"
|
||
]
|
||
}
|
||
```
|
||
|
||
## Зависимости
|
||
|
||
- `langchain-core>=0.3.0`
|
||
- `langchain-openai>=0.3.0`
|
||
- `pydantic>=2.0`
|
||
- `python-dotenv>=1.0.0`
|
||
|
||
Все версии указаны с оператором `>=`, как требуется в задании.
|