main
Экзамен: Структурированный вывод (Pydantic)
📖 Описание
В этом проекте реализована цепочка LangChain, которая из произвольного текста извлекает валидированный объект Pydantic без ручного разбора строк.
Текст может описывать либо человека, либо встречу. На основе простого определения типа текста выбирается подходящая схема (PersonInfo или MeetingNotes) и выводится структурированный результат.
Что умеет проект
| Функция | Что делает |
|---|---|
| Определение типа текста | На основе эвристики (ключевых слов) выбирается схема |
| Pydantic‑модели | PersonInfo и MeetingNotes с полями и описаниями |
| Chain | Prompt → LLM → PydanticOutputParser |
| CLI | Ввод текста вручную или выбор из двух встроенных примеров |
| Вывод | model_dump() + краткая сводка |
⚙️ Установка зависимостей
# Создайте виртуальное окружение (рекомендовано)
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. Запуск скрипта
python solution.py
После запуска появится меню:
Выберите вариант:
1. Ввести текст вручную
2. Использовать пример "Person"
3. Использовать пример "Meeting"
Выберите нужный номер и следуйте инструкциям. После обработки вы увидите:
=== Структурированный вывод ===
{
"name": "Иван Иванов",
"age": 30,
"profession": "Разработчик",
"skills": ["Python", "FastAPI", "Docker"]
}
Краткая сводка: 4 поля, 1 необязательное.
2. Запуск через CLI‑аргументы
python solution.py --text "Встреча с командой по проекту X..."
или
python solution.py --example person
Аргументы:
| Параметр | Описание |
|---|---|
--text |
Текст, который нужно проанализировать |
--example |
person или meeting – использовать встроенный пример |
--model |
Имя модели LLM (по умолчанию gpt-4o-mini) |
📄 Пример использования
from solution import process_text
text = """
Меня зовут Мария Петрова, мне 28 лет. Я работаю аналитиком данных в компании "DataCorp".
Мои навыки: SQL, Python, Tableau, машинное обучение.
"""
result = process_text(text)
print(result.model_dump())
Вывод:
{
"name": "Мария Петрова",
"age": 28,
"profession": "аналитик данных",
"skills": ["SQL", "Python", "Tableau", "машинное обучение"]
}
📚 Структура проекта
.
├── solution.py # Основной скрипт
├── .env # Переменные окружения (не включено в репозиторий)
├── README.md # Это файл
└── requirements.txt # (опционально) список зависимостей
🔧 Как это работает
- Определение типа – простая эвристика ищет ключевые слова (
"встреча","команда","протокол") для выбора схемыMeetingNotes; иначе –PersonInfo. - Prompt – шаблон, который подставляет текст и задает формат вывода в JSON.
- LLM – генерирует ответ в нужном формате.
- PydanticOutputParser – валидирует и преобразует JSON в объект Pydantic.
- Вывод –
model_dump()+ краткая сводка.
📦 Зависимости
| Пакет | Версия | Зачем |
|---|---|---|
langchain-core |
≥ 1.0.0 | Основные компоненты LangChain |
langchain-openai |
- | LLM‑интеграция |
pydantic |
- | Валидация схем |
python-dotenv |
- | Загрузка переменных окружения |
📬 Поддержка и вопросы
Если возникли вопросы, откройте issue в репозитории или напишите в чат проекта.
Description
Languages
Python
100%