diff --git a/README.md b/README.md index 24bab9b..6bb03e9 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,69 @@ -# task-6a1484a292f7bbc573321443 +# 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` + +Все версии указаны с оператором `>=`, как требуется в задании.