Урок 1. Первый запрос: ключ, SDK, ответ модели
Чат claude.ai — это готовый продукт поверх модели. API — это доступ к самой модели: вы сами собираете запрос и сами решаете, что делать с ответом. В этом уроке мы пройдём весь путь от нуля до первой ответной реплики Claude в вашем терминале: поставим SDK, получим ключ, спрячем его от репозитория, отправим запрос и разберём, что вернулось.
messages.create → объект ответа. Актуальный список SDK и моделей всегда в документации Anthropic.
Устанавливаем SDK
Нужен установленный Python. Проверьте версию:
python --version
Если Python нет — поставьте его с python.org. Дальше ставим пакет anthropic:
# из терминала
pip install anthropic
# из блокнота (Jupyter / Colab)
%pip install anthropic
Всё, библиотека есть. Теперь ей нужен ключ, иначе она не знает, от чьего имени стучаться в API.
Получаем API-ключ
Ключ — это то, чем ваш код доказывает API, что он ваш. Порядок действий:
- Зарегистрируйтесь или войдите в console.anthropic.com.
- Откройте раздел API Keys — через иконку профиля в правом верхнем углу или через вкладку Settings.
- Нажмите Create Key и дайте ключу понятное имя — по проекту или задаче. Ключей можно создать сколько угодно; лимиты запросов и сообщений считаются на уровне аккаунта, а не отдельного ключа.
- Скопируйте ключ сразу. После того как вы уйдёте со страницы, посмотреть его снова уже не получится — только выпустить новый.
Отдельно про деньги: запросы к API платные, тарифы считаются по токенам и зависят от модели. Конкретные цифры быстро устаревают — смотрите актуальные цены и лимиты в документации Anthropic и в консоли.
Храним ключ безопасно
Технически ключ можно вписать прямо в скрипт. Практически — так делать не надо: рано или поздно этот файл уедет в репозиторий. Стандартный способ — держать ключ в файле .env рядом с проектом и подгружать его оттуда.
Создайте файл .env и положите в него строку:
ANTHROPIC_API_KEY=сюда-ваш-ключ
Затем поставьте пакет для чтения этого файла:
pip install python-dotenv
И загрузите ключ в переменные окружения:
from dotenv import load_dotenv
import os
load_dotenv()
my_api_key = os.getenv("ANTHROPIC_API_KEY")
.env в .gitignore. Файл .env — это не защита сам по себе, он всего лишь выносит секрет из кода. Защита начинается тогда, когда он не попадает в историю git.
Где правильно хранить API-ключ Anthropic?
Клиент и первый запрос
Клиент — точка входа в API. Ключ ему можно передать явно:
from anthropic import Anthropic
client = Anthropic(api_key=my_api_key)
Но SDK сам ищет переменную окружения ANTHROPIC_API_KEY. Если она есть — передавать ничего не нужно, и это как раз тот вариант, при котором ключ вообще не встречается в вашем коде:
from anthropic import Anthropic
client = Anthropic()
Теперь первый запрос. Метод — client.messages.create():
our_first_message = client.messages.create(
model="claude-haiku-4-5",
max_tokens=1000,
messages=[
{"role": "user", "content": "Привет! Напиши хайку про домашнюю курицу."}
]
)
print(our_first_message.content[0].text)
Три параметра: model — какая модель отвечает, max_tokens — потолок длины ответа, messages — сам диалог. Подробно каждый разберём в уроке 2.
Про выбор модели по-простому: claude-haiku-4-5 — быстрая и дешёвая, ей хорошо учиться и гонять простые задачи; claude-sonnet-5 — рабочая лошадка для большинства задач; claude-opus-5 — самая сильная, для по-настоящему сложного. Начинайте с Haiku, поднимайтесь выше, когда качества не хватает.
Почему Anthropic() часто работает без единого аргумента?
Что внутри ответа
Метод возвращает не строку, а объект. Мы напечатали response.content[0].text — но полезного там больше. Три поля, которые стоит знать сразу:
content— список блоков ответа, а не одна строка. У обычного текстового ответа блок один, и текст лежит вcontent[0].text. Позже, когда появятся инструменты, в этом списке будут блоки разных типов — поэтому он и список.stop_reason— почему модель остановилась.end_turn— договорила сама, всё в порядке.max_tokens— упёрлась в ваш лимит, ответ оборван на полуслове.usage— сколько токенов ушло:input_tokensна ваш запрос иoutput_tokensна ответ. Это то, за что вы платите, и то, по чему считаются лимиты.
Посмотреть можно так:
print(our_first_message.content[0].text)
print(our_first_message.stop_reason)
print(our_first_message.usage)
Привычка смотреть на stop_reason экономит часы отладки: если ответ обрывается, дело обычно не в модели, а в слишком маленьком max_tokens.
Ответ оборвался на середине фразы. Куда смотреть в первую очередь?
Упражнения
Мы только начали, так что упражнения намеренно простые. Базу полезно потрогать руками.
Упражнение 1.1 — Попросите Claude пошутить
Создайте новый скрипт или блокнот. Импортируйте нужные пакеты, загрузите свой ключ, попросите Claude рассказать шутку и напечатайте результат.
Решение упражненияСначала попробуйте сами — потом сверьтесь
from dotenv import load_dotenv
from anthropic import Anthropic
load_dotenv() # кладёт ANTHROPIC_API_KEY в переменные окружения
client = Anthropic() # SDK подхватывает ключ сам
response = client.messages.create(
model="claude-haiku-4-5",
max_tokens=500,
messages=[
{"role": "user", "content": "Расскажи короткую шутку про программистов."}
]
)
print(response.content[0].text)
Обратите внимание: ключа в коде нет ни одной строкой. Он живёт в .env, а .env — в .gitignore.
Упражнение 1.2 — Прочитайте ответ целиком
Возьмите тот же запрос, но поставьте max_tokens=20. Напечатайте текст, stop_reason и usage. Объясните себе, что произошло.
Решение упражненияСначала попробуйте сами — потом сверьтесь
response = client.messages.create(
model="claude-haiku-4-5",
max_tokens=20,
messages=[
{"role": "user", "content": "Расскажи короткую шутку про программистов."}
]
)
print(response.content[0].text) # шутка обрывается на полуслове
print(response.stop_reason) # max_tokens
print(response.usage) # output_tokens упрётся ровно в 20
Модель не «сломалась» — её прервали. stop_reason честно об этом сообщает, а output_tokens показывает, что лимит выбран полностью. Верните max_tokens побольше — и ответ станет целым.
Что запомнить
- Путь к первому запросу:
pip install anthropic→ ключ в консоли → ключ в.env→Anthropic()→messages.create(). - Ключ показывается один раз при создании. Не сохранили — выпускайте новый.
- Ключ — секрет уровня пароля: переменная окружения или
.envв.gitignore, но никогда не код и не репозиторий. - SDK сам читает
ANTHROPIC_API_KEY— можно вообще не упоминать ключ в коде. - Ответ — объект: текст в
content[0].text, причина остановки вstop_reason, расход токенов вusage. - Начинайте с
claude-haiku-4-5, переходите наclaude-sonnet-5илиclaude-opus-5, когда задача этого требует.
Дочитали и сделали упражнения? Зафиксируйте прогресс — отметка сохранится в вашем браузере.