Урок 1. Первый запрос: ключ, SDK, ответ модели

Чат claude.ai — это готовый продукт поверх модели. API — это доступ к самой модели: вы сами собираете запрос и сами решаете, что делать с ответом. В этом уроке мы пройдём весь путь от нуля до первой ответной реплики Claude в вашем терминале: поставим SDK, получим ключ, спрячем его от репозитория, отправим запрос и разберём, что вернулось.

Примеры — на Python, но у Anthropic есть официальные SDK и для TypeScript, и для других языков. Логика везде одинаковая: клиент → messages.create → объект ответа. Актуальный список SDK и моделей всегда в документации Anthropic.

Устанавливаем SDK

Нужен установленный Python. Проверьте версию:

python --version

Если Python нет — поставьте его с python.org. Дальше ставим пакет anthropic:

# из терминала
pip install anthropic

# из блокнота (Jupyter / Colab)
%pip install anthropic

Всё, библиотека есть. Теперь ей нужен ключ, иначе она не знает, от чьего имени стучаться в API.

Получаем API-ключ

Ключ — это то, чем ваш код доказывает API, что он ваш. Порядок действий:

  1. Зарегистрируйтесь или войдите в console.anthropic.com.
  2. Откройте раздел API Keys — через иконку профиля в правом верхнем углу или через вкладку Settings.
  3. Нажмите Create Key и дайте ключу понятное имя — по проекту или задаче. Ключей можно создать сколько угодно; лимиты запросов и сообщений считаются на уровне аккаунта, а не отдельного ключа.
  4. Скопируйте ключ сразу. После того как вы уйдёте со страницы, посмотреть его снова уже не получится — только выпустить новый.
API-ключ — это пароль от вашего аккаунта и от вашего счёта. Не показывайте его на скринах и стримах, не вставляйте в код, не коммитьте в git. Если ключ утёк — идите в консоль и отзывайте его, не раздумывая.

Отдельно про деньги: запросы к 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.
Квиз 1

Где правильно хранить 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, поднимайтесь выше, когда качества не хватает.

Квиз 2

Почему 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.

Квиз 3

Ответ оборвался на середине фразы. Куда смотреть в первую очередь?

Упражнения

Мы только начали, так что упражнения намеренно простые. Базу полезно потрогать руками.

Упражнение 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 → ключ в консоли → ключ в .envAnthropic()messages.create().
  • Ключ показывается один раз при создании. Не сохранили — выпускайте новый.
  • Ключ — секрет уровня пароля: переменная окружения или .env в .gitignore, но никогда не код и не репозиторий.
  • SDK сам читает ANTHROPIC_API_KEY — можно вообще не упоминать ключ в коде.
  • Ответ — объект: текст в content[0].text, причина остановки в stop_reason, расход токенов в usage.
  • Начинайте с claude-haiku-4-5, переходите на claude-sonnet-5 или claude-opus-5, когда задача этого требует.

Дочитали и сделали упражнения? Зафиксируйте прогресс — отметка сохранится в вашем браузере.

Перевод и адаптация урока «Getting Started» курса Anthropic API Fundamentals © Anthropic, лицензия CC BY-NC 4.0. Перевод: Дарья Воронкина (@aishipuchka). Материал изменён: переведён на русский, названия моделей и примеры актуализированы, добавлены квизы и упражнения. Используется некоммерчески.