Интеграция Anthropic Claude API с сайтом
Claude API от Anthropic предоставляет доступ к семейству Claude 3 (Haiku, Sonnet, Opus). Claude отличается длинным контекстным окном (200K токенов у Claude 3), точностью следования инструкциям и хорошей работой с кодом и структурированным текстом.
Базовая интеграция
use Anthropic\Anthropic;
$client = new Anthropic(['apiKey' => config('services.anthropic.api_key')]);
$message = $client->messages->create([
'model' => 'claude-3-5-haiku-20241022',
'max_tokens' => 1024,
'system' => 'Вы — помощник по работе с документацией продукта.',
'messages' => [
['role' => 'user', 'content' => $userQuestion],
],
]);
$answer = $message->content[0]->text;
Streaming
import anthropic
client = anthropic.Anthropic()
async def stream_response(user_message: str):
with client.messages.stream(
model='claude-3-5-haiku-20241022',
max_tokens=1024,
messages=[{'role': 'user', 'content': user_message}],
) as stream:
for text in stream.text_stream:
yield text
Structured Output через инструменты (tool_use)
Claude поддерживает tool_use для получения структурированного JSON:
tools = [{
'name': 'extract_product_info',
'description': 'Извлечь информацию о товаре из текста',
'input_schema': {
'type': 'object',
'properties': {
'name': {'type': 'string'},
'price': {'type': 'number'},
'sku': {'type': 'string'},
'description': {'type': 'string'},
'features': {'type': 'array', 'items': {'type': 'string'}},
},
'required': ['name', 'price'],
},
}]
response = client.messages.create(
model='claude-3-5-sonnet-20241022',
max_tokens=1024,
tools=tools,
messages=[{
'role': 'user',
'content': f'Извлеки информацию о товаре:\n\n{product_description}',
}],
)
# Извлекаем результат tool_use
for block in response.content:
if block.type == 'tool_use' and block.name == 'extract_product_info':
product_data = block.input
break
Длинный контекст (200K токенов)
Уникальное преимущество Claude — возможность передать в контекст весь документ или кодовую базу:
# Анализ длинного PDF-документа (конвертируем в текст)
with open('contract.txt', 'r') as f:
document = f.read()
response = client.messages.create(
model='claude-3-5-sonnet-20241022',
max_tokens=2048,
messages=[{
'role': 'user',
'content': f"Прочитай договор и ответь: каковы условия расторжения?\n\nДоговор:\n{document}",
}],
)
Vision: анализ изображений
import base64
with open('screenshot.png', 'rb') as f:
image_data = base64.standard_b64encode(f.read()).decode('utf-8')
response = client.messages.create(
model='claude-3-5-sonnet-20241022',
max_tokens=1024,
messages=[{
'role': 'user',
'content': [
{'type': 'image', 'source': {'type': 'base64', 'media_type': 'image/png', 'data': image_data}},
{'type': 'text', 'text': 'Опиши что изображено на скриншоте'},
],
}],
)
Сравнение с OpenAI
| Параметр | Claude 3.5 Sonnet | GPT-4o |
|---|---|---|
| Контекст | 200K токенов | 128K токенов |
| Следование инструкциям | Высокое | Высокое |
| Код | Очень хорошо | Очень хорошо |
| Цена (input) | $3 / 1M | $2.50 / 1M |
Сроки
Базовая интеграция с чатом: 1–2 дня. Structured output + vision: +2 дня.







