From 89ada56d822a42c29c42f90d775c10a55c08d3c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=91=D0=B5=D1=80=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=D0=B0?= Date: Wed, 27 May 2026 06:44:18 +0000 Subject: [PATCH] =?UTF-8?q?=D1=81=D1=8B=D1=80=D0=BE=D0=B9=20=D1=82=D0=B5?= =?UTF-8?q?=D0=BA=D1=81=D1=82=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=E2=86=92=20=D0=BF=D0=BB=D0=BE=D1=81=D0=BA=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=BA=D0=B0:=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md | 170 ++++++++++-------- 1 file changed, 95 insertions(+), 75 deletions(-) diff --git a/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/README.md b/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/README.md index 0a29dc6..4249abc 100644 --- a/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/README.md +++ b/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/README.md @@ -1,104 +1,124 @@ -# Сырой текст задания → плоская карточка +# Сырой текст задания → плоская карточка -## Описание проекта -Проект реализует **модуль разбора одной формулировки задачи** в компактную сводку (`AssignmentCard`). -Он принимает неформальное описание задания (строку или короткий абзац) и возвращает объект с полями: +## 📖 Описание проекта +В рамках курса «Ассистент по учёбе» вы разрабатываете модуль, который принимает **неформальное описание задачи** (например, сообщение преподавателя в чате) и преобразует его в структурированный объект. Полученный объект можно дальше фильтровать, сохранять или передавать следующему шагу пайплайна. -| Поле | Тип | Описание | -|------|-----|----------| -| `title` | `str` | Краткое название задачи | -| `subject` | `str` | Область знаний / предмет | -| `deadline_hint` | `str | None` | Указание срока сдачи в свободной форме (например, «к пятнице»). Если не найдено – `None`. | -| `deliverable_type` | `str` | Тип сдаваемого материала (отчёт, код, презентация и т.д.) | -| `grading_hints` | `List[str]` | Ключевые критерии оценки, перечисленные в тексте. Если не найдено – пустой список. | +### Что делает программа? +- Принимает одну строку/абзац с формулировкой задания. +- С помощью LLM (OpenAI, Azure, Anthropic и т.д.) извлекает ключевые поля: + - `title` – название задачи + - `subject` – предмет / тема + - `deadline_hint` – подсказка о сроке сдачи (строка в свободной форме) + - `deliverable_type` – тип сдаваемого материала (отчёт, код, презентация и т.п.) + - `grading_hints` – список строк с упоминаниями оценивания -Модель работает без диалога: она получает один запрос и выдаёт один ответ. +### Почему это важно? +- Позволяет быстро структурировать входные данные без ручного парсинга. +- Делает дальнейшую обработку более надёжной и предсказуемой. + +## ⚙️ Стек и установка + +| Пакет | Версия (рекоменд.) | +|-------|--------------------| +| `langchain-core` | 0.2.x | +| `langchain-openai` | 0.1.x | +| `pydantic` | 2.x | +| `python-dotenv` | любой | -## Установка зависимостей ```bash -# Создайте виртуальное окружение (рекомендуется) +# Создайте виртуальное окружение (рекомендовано) python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate -# Установите пакеты +# Установите зависимости pip install langchain-core langchain-openai pydantic python-dotenv ``` -> **Важно** -> Для работы с LLM необходимо задать переменные окружения: -> ```bash -> export OPENAI_API_KEY="ваш_ключ" +> **Важно**: +> 1. Создайте файл `.env` в корне проекта и добавьте ключи доступа к LLM, например: +> ```dotenv +> OPENAI_API_KEY=sk-... > ``` -> (или добавить в `.env` файл). +> 2. Если используете другую модель (Azure, Anthropic), настройте соответствующие переменные окружения согласно документации `langchain-openai`. -## Как запустить +## 📂 Структура проекта -### 1. `task_parser.py` -Файл содержит всю логику: модель Pydantic, шаблон запроса и функцию `parse_assignment`. - -```python -from task_parser import parse_assignment - -raw_text = """ -Нужно написать отчёт по теме «Влияние квантовых вычислений на криптографию» до следующей среды. -Критерии оценки: оригинальность идеи, корректность расчётов, оформление в формате LaTeX. -""" - -card = parse_assignment(raw_text) -print(card.json(indent=2)) +``` +project/ +├── .env # Переменные окружения +├── main.py # Точка входа – пример использования +├── task_parser.py # Модуль с Pydantic‑моделью и функцией парсинга +└── README.md # Это файл ``` -Запуск: +## 🚀 Запуск + +### 1. Пример запуска через `main.py` ```bash -python - <<'PY' -from task_parser import parse_assignment - -raw_text = """ -Нужно написать отчёт по теме «Влияние квантовых вычислений на криптографию» до следующей среды. -Критерии оценки: оригинальность идеи, корректность расчётов, оформление в формате LaTeX. -""" - -card = parse_assignment(raw_text) -print(card.json(indent=2)) -PY +python main.py ``` -### 2. Тесты (если есть) +`main.py` содержит пример входного текста и выводит распарсенный объект. -```bash -pytest tests/ -``` +> **Вывод** +> ```text +> Task(title='Составить отчёт по проекту', subject='Информатика', deadline_hint='до 15.09', deliverable_type='отчёт', grading_hints=['проверка структуры, логики и оформления']) +> ``` -## Пример использования +### 2. Использование как библиотеки ```python ->>> from task_parser import parse_assignment +from task_parser import parse_task_text, Task ->>> raw = "Сдать презентацию по «Машинное обучение» к пятнице, оценка по структуре и содержанию." ->>> card = parse_assignment(raw) ->>> print(card.title) -Сдать презентацию по «Машинное обучение» - ->>> print(card.subject) -«Машинное обучение» - ->>> print(card.deadline_hint) -к пятнице - ->>> print(card.deliverable_type) -презентация - ->>> print(card.grading_hints) -['структуре', 'содержанию'] +text = "Напиши код для решения задачи по алгоритмам до 20.10." +task: Task = parse_task_text(text) +print(task.title) # → 'Написать код' +print(task.grading_hints) # → ['проверка корректности кода', ...] ``` -## Что дальше -- Добавить более сложные правила извлечения (например, распознавание дат). -- Интегрировать в пайплайн ассистента по учёбе. -- Писать unit‑тесты для разных сценариев. +## 🧩 Как работает `parse_task_text` ---- +1. **Формирование запроса** – создаётся prompt, в котором описывается формат ответа (JSON). +2. **Вызов LLM** – через `langchain-openai` отправляется запрос и получает JSON‑строку. +3. **Проверка схемы** – строка парсится в `pydantic.BaseModel`, гарантируя типизацию и наличие обязательных полей. -**Автор:** *[Ваше имя]* -**Дата:** 27 мая 2026 г. \ No newline at end of file +Если модель не может распарсить ответ, выбрасывается исключение с подробным сообщением. + +## 📄 Пример входного текста + +```text +"Пожалуйста, подготовьте презентацию по теме «Машинное обучение» до 30 сентября. В оценке учитываются оригинальность и глубина анализа." +``` + +### Ожидаемый результат (JSON) + +```json +{ + "title": "Подготовка презентации", + "subject": "Машинное обучение", + "deadline_hint": "до 30 сентября", + "deliverable_type": "презентация", + "grading_hints": [ + "оригинальность", + "глубина анализа" + ] +} +``` + +## 📚 Полезные ссылки + +- [LangChain Docs – OpenAI](https://langchain.com/docs/integrations/providers/openai) +- [Pydantic v2.0](https://docs.pydantic.dev/latest/) +- [Python‑dotenv](https://pypi.org/project/python-dotenv/) + +## 🤝 Вклад + +Если хотите улучшить проект: +1. Форкните репозиторий. +2. Создайте ветку с вашим изменением. +3. Откройте Pull Request и опишите, что было сделано. + +--- + +**Happy parsing!** \ No newline at end of file