Экзамен: Структурированный вывод (Pydantic): README.md
This commit is contained in:
@@ -1,3 +1,154 @@
|
|||||||
# task-6a186500-ekzamen-strukturirovannyy
|
# Экзамен: Структурированный вывод (Pydantic)
|
||||||
|
|
||||||
Решения домашних заданий
|
## 📖 Описание
|
||||||
|
|
||||||
|
В этом проекте реализована цепочка LangChain, которая из произвольного текста извлекает **валидированный объект Pydantic** без ручного разбора строк.
|
||||||
|
Текст может описывать либо человека, либо встречу. На основе простого определения типа текста выбирается подходящая схема (`PersonInfo` или `MeetingNotes`) и выводится структурированный результат.
|
||||||
|
|
||||||
|
### Что умеет проект
|
||||||
|
|
||||||
|
| Функция | Что делает |
|
||||||
|
|---------|------------|
|
||||||
|
| **Определение типа текста** | На основе эвристики (ключевых слов) выбирается схема |
|
||||||
|
| **Pydantic‑модели** | `PersonInfo` и `MeetingNotes` с полями и описаниями |
|
||||||
|
| **Chain** | Prompt → LLM → PydanticOutputParser |
|
||||||
|
| **CLI** | Ввод текста вручную или выбор из двух встроенных примеров |
|
||||||
|
| **Вывод** | `model_dump()` + краткая сводка |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ Установка зависимостей
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Создайте виртуальное окружение (рекомендовано)
|
||||||
|
python -m venv venv
|
||||||
|
source venv/bin/activate # Windows: venv\Scripts\activate
|
||||||
|
|
||||||
|
# Установите зависимости
|
||||||
|
pip install langchain-core langchain-openai pydantic python-dotenv
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Важно**:
|
||||||
|
> - Требуется Python ≥ 3.10.
|
||||||
|
> - Для работы с OpenAI понадобится переменная окружения `OPENAI_API_KEY`.
|
||||||
|
> - Если вы хотите использовать Ollama, замените `ChatOpenAI` на `ChatOllama` и установите `langchain-ollama`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Запуск
|
||||||
|
|
||||||
|
### 1. Запуск скрипта
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python solution.py
|
||||||
|
```
|
||||||
|
|
||||||
|
После запуска появится меню:
|
||||||
|
|
||||||
|
```
|
||||||
|
Выберите вариант:
|
||||||
|
1. Ввести текст вручную
|
||||||
|
2. Использовать пример "Person"
|
||||||
|
3. Использовать пример "Meeting"
|
||||||
|
```
|
||||||
|
|
||||||
|
Выберите нужный номер и следуйте инструкциям. После обработки вы увидите:
|
||||||
|
|
||||||
|
```
|
||||||
|
=== Структурированный вывод ===
|
||||||
|
{
|
||||||
|
"name": "Иван Иванов",
|
||||||
|
"age": 30,
|
||||||
|
"profession": "Разработчик",
|
||||||
|
"skills": ["Python", "FastAPI", "Docker"]
|
||||||
|
}
|
||||||
|
Краткая сводка: 4 поля, 1 необязательное.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Запуск через CLI‑аргументы
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python solution.py --text "Встреча с командой по проекту X..."
|
||||||
|
```
|
||||||
|
|
||||||
|
или
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python solution.py --example person
|
||||||
|
```
|
||||||
|
|
||||||
|
Аргументы:
|
||||||
|
|
||||||
|
| Параметр | Описание |
|
||||||
|
|----------|----------|
|
||||||
|
| `--text` | Текст, который нужно проанализировать |
|
||||||
|
| `--example` | `person` или `meeting` – использовать встроенный пример |
|
||||||
|
| `--model` | Имя модели LLM (по умолчанию `gpt-4o-mini`) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📄 Пример использования
|
||||||
|
|
||||||
|
```python
|
||||||
|
from solution import process_text
|
||||||
|
|
||||||
|
text = """
|
||||||
|
Меня зовут Мария Петрова, мне 28 лет. Я работаю аналитиком данных в компании "DataCorp".
|
||||||
|
Мои навыки: SQL, Python, Tableau, машинное обучение.
|
||||||
|
"""
|
||||||
|
|
||||||
|
result = process_text(text)
|
||||||
|
print(result.model_dump())
|
||||||
|
```
|
||||||
|
|
||||||
|
Вывод:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "Мария Петрова",
|
||||||
|
"age": 28,
|
||||||
|
"profession": "аналитик данных",
|
||||||
|
"skills": ["SQL", "Python", "Tableau", "машинное обучение"]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 Структура проекта
|
||||||
|
|
||||||
|
```
|
||||||
|
.
|
||||||
|
├── solution.py # Основной скрипт
|
||||||
|
├── .env # Переменные окружения (не включено в репозиторий)
|
||||||
|
├── README.md # Это файл
|
||||||
|
└── requirements.txt # (опционально) список зависимостей
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Как это работает
|
||||||
|
|
||||||
|
1. **Определение типа** – простая эвристика ищет ключевые слова (`"встреча"`, `"команда"`, `"протокол"`) для выбора схемы `MeetingNotes`; иначе – `PersonInfo`.
|
||||||
|
2. **Prompt** – шаблон, который подставляет текст и задает формат вывода в JSON.
|
||||||
|
3. **LLM** – генерирует ответ в нужном формате.
|
||||||
|
4. **PydanticOutputParser** – валидирует и преобразует JSON в объект Pydantic.
|
||||||
|
5. **Вывод** – `model_dump()` + краткая сводка.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Зависимости
|
||||||
|
|
||||||
|
| Пакет | Версия | Зачем |
|
||||||
|
|-------|--------|-------|
|
||||||
|
| `langchain-core` | ≥ 1.0.0 | Основные компоненты LangChain |
|
||||||
|
| `langchain-openai` | - | LLM‑интеграция |
|
||||||
|
| `pydantic` | - | Валидация схем |
|
||||||
|
| `python-dotenv` | - | Загрузка переменных окружения |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📬 Поддержка и вопросы
|
||||||
|
|
||||||
|
Если возникли вопросы, откройте issue в репозитории или напишите в чат проекта.
|
||||||
|
|
||||||
|
---
|
||||||
Reference in New Issue
Block a user