Экзамен: Структурированный вывод (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