Экзамен: Структурированный вывод (Pydantic): README.md

This commit is contained in:
2026-05-29 06:54:28 +00:00
parent 53a8596c25
commit f78c243a15
+153 -2
View File
@@ -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 в репозитории или напишите в чат проекта.
---