Structured Outputs by Example Star on GitHub
Stay updated when new content is added and get tips from the Instructor team
LLM Providers

Anthropic Integration

Edit
Use Instructor with Anthropic's Claude models for structured data extraction.
import instructor
from anthropic import Anthropic
from pydantic import BaseModel


class User(BaseModel):
    name: str
    age: int

Create patched client
client = instructor.from_anthropic(Anthropic())

Claude 3 Haiku (faster, cheaper)
user = client.messages.create(
    model="claude-3-haiku-20240307",
    max_tokens=1000,
    response_model=User,
    messages=[{"role": "user", "content": "Extract: John is 25 years old."}],
)

Claude 3 Sonnet (balanced)
user = client.messages.create(
    model="claude-3-sonnet-20240229",
    max_tokens=1000,
    response_model=User,
    messages=[{"role": "user", "content": "Extract: John is 25 years old."}],
)

Claude 3 Opus (most capable)
user = client.messages.create(
    model="claude-3-opus-20240229",
    max_tokens=1000,
    response_model=User,
    messages=[{"role": "user", "content": "Extract: John is 25 years old."}],
)

user = client.messages.create(
    model="claude-3-haiku-20240307",
    max_tokens=1000,
    response_model=User,
    system="You are an expert at data extraction. Always extract all details accurately.",
    messages=[{"role": "user", "content": "Extract: John is 25 years old."}],
)

user = client.messages.create(
    model="claude-3-haiku-20240307",
    max_tokens=1000,
    temperature=0.2,  # Lower temperature for more consistent results
    response_model=User,
    messages=[{"role": "user", "content": "Extract: John is 25 years old."}],
)

Default: ANTHROPIC_TOOLS mode
client = instructor.from_anthropic(Anthropic())

JSON mode
json_client = instructor.from_anthropic(Anthropic(), mode=instructor.Mode.JSON)

Markdown JSON mode
md_client = instructor.from_anthropic(Anthropic(), mode=instructor.Mode.MD_JSON)

import asyncio
from anthropic import AsyncAnthropic

async_client = instructor.from_anthropic(AsyncAnthropic())


async def extract_user():
    return await async_client.messages.create(
        model="claude-3-haiku-20240307",
        max_tokens=1000,
        response_model=User,
        messages=[{"role": "user", "content": "Extract: John is 25 years old."}],
    )


user = asyncio.run(extract_user())

Running the Example

First, install Instructor and any dependencies
$ pip install instructor pydantic
Run the Python script
$ python anthropic.py

Further Information