by Jason Liu (community) Python, любые OpenAI-совместимые LLM
Python-библиотека для получения структурированных данных из LLM. Использует Pydantic-модели как схему — модель возвращает валидированный Python-объект вместо сырого текста. Возможности: - Автоматическая валидация через Pydantic - Retry при ошибках валидации (автоматически повторяет запрос) - Поддержка OpenAI, Anthropic, Gemini, Ollama, Cohere - Streaming структурированных объектов - Partial objects: объект заполняется по мере генерации - Асинхронная поддержка (async/await) - Hooks для логирования и отладки
# pip:
pip install instructor
# Пример:
import instructor
from anthropic import Anthropic
from pydantic import BaseModel
client = instructor.from_anthropic(Anthropic())
class User(BaseModel):
name: str
age: int
user = client.messages.create(
model="claude-opus-4-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Извлеки данные: Иван, 30 лет"}],
response_model=User,
)
print(user) # name="Иван" age=30
Получайте надёжный JSON от любой LLM. Построено на Pydantic для валидации, типобезопасности и поддержки IDE.
import instructor
from pydantic import BaseModel
# Define what you want
class User(BaseModel):
name: str
age: int
# Extract it from natural language
client = instructor.from_provider("openai/gpt-4o-mini")
user = client.chat.completions.create(
response_model=User,
messages=[{"role": "user", "content": "John is 25 years old"}],
)
print(user) # User(name='John', age=25)
Вот и всё. Никакого парсинга JSON, никакой обработки ошибок, никаких повторных попыток. Просто определите модель и получите структурированные данные.
Используйте Instructor для быстрого извлечения данных, обращайтесь к PydanticAI, когда вам нужны агенты. Instructor сохраняет простоту и дешевизну рабочих процессов с фокусом на схеме. Если вашему приложению нужны более богатые запуски агентов, встроенная наблюдаемость или общие трассировки, попробуйте PydanticAI. PydanticAI — это официальная среда выполнения агентов от команды Pydantic, добавляющая типизированные инструменты, воспроизводимые наборы данных, оценки и панели мониторинга для продакшена при использовании тех же моделей Pydantic. Погрузитесь в документацию PydanticAI, чтобы узнать, как она расширяет рабочие процессы в стиле Instructor.
Получение структурированных данных от LLM — непростая задача. Вам нужно:
Instructor решает всё это одним простым интерфейсом:
| Без Instructor | С Instructor |
|
|
pip install instructor
Или с помощью вашего менеджера пакетов:
uv add instructor
poetry add instructor
Используйте один и тот же код с любым LLM-провайдером:
# OpenAI
client = instructor.from_provider("openai/gpt-4o")
# Anthropic
client = instructor.from_provider("anthropic/claude-3-5-sonnet")
# Google
client = instructor.from_provider("google/gemini-pro")
# Ollama (локально)
client = instructor.from_provider("ollama/llama3.2")
# С API-ключами напрямую (без переменных окружения)
client = instructor.from_provider("openai/gpt-4o", api_key="sk-...")
client = instructor.from_provider("anthropic/claude-3-5-sonnet", api_key="sk-ant-...")
client = instructor.from_provider("groq/llama-3.1-8b-instant", api_key="gsk_...")
# Все используют один и тот же API!
user = client.chat.completions.create(
response_model=User,
messages=[{"role": "user", "content": "..."}],
)
Неудачные валидации автоматически повторяются с сообщением об ошибке:
from pydantic import BaseModel, field_validator
class User(BaseModel):
name: str
age: int
@field_validator('age')
def validate_age(cls, v):
if v < 0:
raise ValueError('Age must be positive')
return v
# Instructor automatically retries when validation fails
user = client.chat.completions.create(
response_model=User,
messages=[{"role": "user", "content": "..."}],
max_retries=3,
)
Передавайте частичные объекты по мере их генерации:
from instructor import Partial
for partial_user in client.chat.completions.create(
response_model=Partial[User],
messages=[{"role": "user", "content": "..."}],
stream=True,
):
print(partial_user)
# User(name=None, age=None)
# User(name="John", age=None)
# User(name="John", age=25)
Извлекайте сложные вложенные структуры данных:
from typing import List
class Address(BaseModel):
street: str
city: str
country: str
class User(BaseModel):
name: str
age: int
addresses: List[Address]
# Instructor handles nested objects automatically
user = client.chat.completions.create(
response_model=User,
messages=[{"role": "user", "content": "..."}],
)
Нам доверяют более 100 000 разработчиков и компаний, создающих AI-приложения:
Среди компаний, использующих Instructor, — команды в OpenAI, Google, Microsoft, AWS и множество стартапов из YC.
Извлекайте структурированные данные из любого текста:
from pydantic import BaseModel
import instructor
client = instructor.from_provider("openai/gpt-4o-mini")
class Product(BaseModel):
name: str
price: float
in_stock: bool
product = client.chat.completions.create(
response_model=Product,
messages=[{"role": "user", "content": "iPhone 15 Pro, $999, available now"}],
)
print(product)
# Product(name='iPhone 15 Pro', price=999.0, in_stock=True)
Простой API Instructor доступен на многих языках:
Против сырого JSON-режима: Instructor обеспечивает автоматическую валидацию, повторные попытки, потоковую передачу и поддержку вложенных объектов. Никакого ручного написания схем.
Против LangChain/LlamaIndex: Instructor сосредоточен на одной вещи — структурированном извлечении. Он легче, быстрее и проще для отладки.
Против пользовательских решений: Проверено тысячами разработчиков. Обрабатывает пограничные случаи, о которых вы даже не думали.
Мы приветствуем вклад! Ознакомьтесь с нашими задачами для начинающих, чтобы начать.
Лицензия MIT — подробности смотрите в LICENSE.
Построено сообществом Instructor. Особая благодарность Джейсону Лю и всем контрибьюторам.