Files

154 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Экзамен: Структурированный вывод (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 в репозитории или напишите в чат проекта.
---