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