diff --git a/README.md b/README.md index 6bb03e9..b1af5a2 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,66 @@ -# Task 6a1484a292f7bbc573321443 – "сырой текст задания → плоская карточка" +# Task: "сырой текст задания → плоская карточка" ## Что делает проект -Этот репозиторий содержит решение задачи «Преобразовать свободный текст описания задания в структурированную карточку». В качестве примера используется **LangChain** и **Pydantic** для генерации JSON‑объекта, который можно дальше использовать в пайплайне. +Программа принимает **неформальное описание** задачи (как в переписке или на сайте курса) и превращает его в **структурированный объект** `TaskCard`. Это позволяет дальше работать с данными автоматически – фильтровать, сохранять, передавать в пайплайн. ## Структура репозитория | Файл | Назначение | |------|------------| -| `main.py` | Точка входа. Содержит модель данных, цепочку LangChain и примеры использования. | -| `requirements.txt` | Зависимости проекта (без точных версий). | -| `README.md` | Текущий файл – описание проекта, инструкции по установке и запуску. | +| `models.py` | Pydantic‑модель `TaskCard`. | +| `main.py` | Точка входа: демонстрация цепочки LangChain, вывод примеров. | +| `requirements.txt` | Зависимости проекта. | -## Установка +## Установка и запуск ```bash -# Создайте виртуальное окружение (рекомендуется) +# 1. Клонируйте репозиторий +git clone https://git.brojs.ru/KirillKutlakhmetov/task-6a1484a292f7bbc573321443.git +cd task-6a1484a292f7bbc573321443 + +# 2. Создайте виртуальное окружение (необязательно, но рекомендуется) python -m venv .venv source .venv/bin/activate # Windows: .\.venv\Scripts\activate -# Установите зависимости +# 3. Установите зависимости pip install -r requirements.txt -``` -## Как запустить +# 4. Настройте переменную окружения с токеном BroJS +export JOURNAL_MCP_PAT=YOUR_TOKEN_HERE # Linux/macOS +set JOURNAL_MCP_PAT=YOUR_TOKEN_HERE # Windows CMD +$env:JOURNAL_MCP_PAT="YOUR_TOKEN_HERE" # PowerShell -```bash +# 5. Запустите пример 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()` и печатаются в читаемом виде. - ## Пример вывода -``` +```text Example 1: -Raw text: -Сдайте к пятнице мини‑отчёт по LangChain: 2 страницы, упор на агентов. Оценка: за полноту и за пример кода. +Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов. Оценка: за полноту и за пример кода. -Parsed card: -{ - "title": "Мини‑отчёт по LangChain", - "subject": null, - "deadline_hint": "к пятнице", - "deliverable_type": "отчёт", - "grading_hints": [ - "полнота", - "пример кода" - ] -} +Parsed object (model_dump): {'title': 'мини‑отчёт', 'subject': 'LangChain', 'deadline_hint': 'к пятнице', 'deliverable_type': 'отчёт', 'grading_hints': ['полнота', 'пример кода']} +Human-readable summary: +Title: мини‑отчёт +Subject: LangChain +Deadline hint: к пятнице +Deliverable type: отчёт +Grading hints: полнота, пример кода ``` -## Зависимости +## Как это работает -- `langchain-core>=0.3.0` -- `langchain-openai>=0.3.0` -- `pydantic>=2.0` -- `python-dotenv>=1.0.0` +1. **PromptTemplate** формирует запрос к LLM с инструкцией вернуть данные в формате, описанном `PydanticOutputParser`. +2. **ChatOpenAI** (BroJS) генерирует ответ. +3. Парсер преобразует JSON‑ответ в экземпляр `TaskCard`, гарантируя типизацию. +4. В `main.py` выводятся как сериализованный словарь, так и человекочитаемый резюме. -Все версии указаны с оператором `>=`, как требуется в задании. +## Тесты + +Тестов нет – проект рассчитан на демонстрацию работы цепочки. Для проверки можно запустить `python main.py` и убедиться в корректности вывода. + +--- + +> **Важно**: токен BroJS (`JOURNAL_MCP_PAT`) должен быть действительным, иначе запрос к LLM завершится ошибкой.