80 lines
2.1 KiB
Markdown
80 lines
2.1 KiB
Markdown
---
|
|
authors:
|
|
- jxnl
|
|
categories:
|
|
- Anthropic
|
|
comments: true
|
|
date: 2024-03-20
|
|
description: Learn how to integrate Anthropic's powerful language models into your projects using Instructor, with step-by-step guidance on installation, client setup, and creating structured outputs with Pydantic models.
|
|
draft: false
|
|
tags:
|
|
- Anthropic
|
|
- API Development
|
|
- Pydantic
|
|
- Python
|
|
- LLM Techniques
|
|
---
|
|
|
|
# Structured Outputs with Anthropic
|
|
|
|
A special shoutout to [Shreya](https://twitter.com/shreyaw_) for her contributions to the anthropic support. As of now, all features are operational with the exception of streaming support.
|
|
|
|
For those eager to experiment, simply patch the client with `ANTHROPIC_JSON`, which will enable you to leverage the `anthropic` client for making requests.
|
|
|
|
```
|
|
pip install instructor[anthropic]
|
|
```
|
|
|
|
!!! warning "Missing Features"
|
|
|
|
Just want to acknowledge that we know that we are missing partial streaming and some better re-asking support for XML. We are working on it and will have it soon.
|
|
|
|
```python
|
|
from pydantic import BaseModel
|
|
from typing import List
|
|
import anthropic
|
|
import instructor
|
|
|
|
# Patching the Anthropics client with the instructor for enhanced capabilities
|
|
anthropic_client = instructor.from_openai(
|
|
create=anthropic.Anthropic().messages.create,
|
|
mode=instructor.Mode.JSON
|
|
)
|
|
|
|
class Properties(BaseModel):
|
|
name: str
|
|
value: str
|
|
|
|
class User(BaseModel):
|
|
name: str
|
|
age: int
|
|
properties: List[Properties]
|
|
|
|
user_response = anthropic_client(
|
|
model="claude-3-haiku-20240307",
|
|
max_tokens=1024,
|
|
max_retries=0,
|
|
messages=[
|
|
{
|
|
"role": "user",
|
|
"content": "Create a user for a model with a name, age, and properties.",
|
|
}
|
|
],
|
|
response_model=User,
|
|
) # type: ignore
|
|
|
|
print(user_response.model_dump_json(indent=2))
|
|
"""
|
|
{
|
|
"name": "John",
|
|
"age": 25,
|
|
"properties": [
|
|
{
|
|
"key": "favorite_color",
|
|
"value": "blue"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
We're encountering challenges with deeply nested types and eagerly invite the community to test, provide feedback, and suggest necessary improvements as we enhance the anthropic client's support. |