Claude API: первый запрос на Python и проверка ответа
Как подключить Claude API: получить ключ, выбрать доступную модель, отправить Messages API запрос и обработать ошибки без раскрытия секретов.
Claude API нужен, когда модель должна работать внутри твоего приложения или автоматизации: разбирать заметки, готовить черновики и отвечать на запросы без ручного копирования в чат. Для первой интеграции достаточно Python 3 и ключа API.
Ниже — пример для прямого API Anthropic. Подключения через облачных посредников могут использовать другие адреса и способы авторизации. Задача примера узкая: из короткой заметки о встрече выделить решения, задачи и открытые вопросы.
1. Подготовь доступ
Войди в Claude Console, создай API-ключ в нужном рабочем пространстве и проверь условия оплаты и лимиты. Не считай подписку на чат подтверждением оплаченного доступа к API: ориентируйся на настройки именно API-аккаунта. Порядок начала работы описан в официальном quickstart.
Ключ разрешает приложению обращаться к сервису от имени твоего аккаунта. Для локального запуска в нашем клиенте он вводится через getpass: символы не отображаются и не сохраняются скриптом в файл. Если переменная ANTHROPIC_API_KEY уже задана в окружении, клиент использует её.
Мой подход. Я бы проверял API на короткой заметке без клиентских данных. Так стоимость первого опыта ограничена маленьким запросом, а результат можно оценить глазами. Большой архив документов на этом этапе только затруднит поиск ошибки.
2. Запусти клиент без установки библиотек
Скачай Python-клиент, распакуй и выполни:
python3 claude_client.py
Скрипт запросит ключ, покажет доступные модели и предложит выбрать номер. Он получает список через GET /v1/models, а не предполагает, что модель из старой статьи ещё доступна твоему аккаунту. После выбора отправляется один платный запрос генерации. Параметры списка описаны в Models API.
Для демонстрации используется заметка:
Анна подготовит список интервью до пятницы.
Борис предложил добавить оплату в пилот; решение отложили.
Дату следующей встречи не назначили.
Скрипт печатает текст ответа, причину остановки и счётчики токенов. Точное количество токенов и формулировки зависят от выбранной модели; одинаковый текст ответа между запусками не требуется.
3. Разбери тело запроса
После выбора модели клиент формирует такой объект Python:
payload = {
"model": model,
"max_tokens": 500,
"system": "Разбирай заметки встреч. Отделяй решения от предложений. "
"Не придумывай сроки и ответственных.",
"messages": [{
"role": "user",
"content": "Выдели решения, задачи и открытые вопросы. "
"Анна подготовит список интервью до пятницы. "
"Борис предложил добавить оплату в пилот; решение отложили. "
"Дату следующей встречи не назначили."
}]
}
В запрос к https://api.anthropic.com/v1/messages входят заголовки x-api-key, anthropic-version: 2023-06-01 и Content-Type: application/json. Значение model берётся из выбора пользователя. max_tokens ограничивает длину генерации, а не задаёт точную цену запроса. Формат определён в Messages API.
Ответ содержит массив content. Для обычного текстового сценария клиент собирает блоки с type == "text", а не предполагает, что любой блок можно напечатать как строку:
text = "\n".join(
block["text"] for block in result.get("content", [])
if block.get("type") == "text"
)
print(text)
print("Причина остановки:", result.get("stop_reason"))
print("Токены:", result.get("usage"))
Если причина остановки — max_tokens, ответ может быть обрезан. Не выдавай его пользователю как завершённый протокол без дополнительной обработки. Для многошагового диалога отдельно управляй историей: разовый вызов этого скрипта не создаёт память о предыдущих запусках.
4. Проверь смысл, а не оформление
В заметке есть задача Анны, но нет принятого решения об оплате. Относительный срок «до пятницы» нельзя надёжно превратить в дату без даты встречи. Дата следующей встречи неизвестна.
| Проверка | Что должно быть в результате |
|---|---|
| Задача Анны | Подготовить список интервью |
| Срок | Сохранён как «до пятницы» или отмечена необходимость уточнения даты |
| Предложение Бориса | Не превращено в утверждённое решение или поручение |
| Следующая встреча | Дата не придумана |
Попробуй вторую заметку: «Обсудили запуск. Решения не принимали». Допустимый результат — отсутствие решений и задач. Если модель всегда заполняет таблицу, даже когда данных нет, нужно уточнить инструкцию и повторить оба примера.
Моя оценка. Протокол с честным «не указано» полезнее красивой таблицы с выдуманными сроками. Я бы принимал интеграцию только после проверки пустого и неоднозначного входа: именно там заметно, умеет ли она сохранять границы исходных данных.
5. Обработай ошибки и контролируй расходы
| Код | Что проверить |
|---|---|
| 400 | Формат тела, обязательные параметры, ограничения запроса |
| 401 | Ключ и способ авторизации |
| 403 | Права на запрошенную операцию |
| 404 | Адрес ресурса и выбранную модель |
| 429 | Лимиты и скорость отправки запросов |
| 529 | Перегрузку сервиса; повторить позднее с ограничением числа попыток |
Полный список и рекомендации есть в справке по ошибкам. Клиент из архива не повторяет платные запросы бесконечно. Если ответ потерялся из-за сетевого сбоя, автоматический повтор может означать ещё одно выполнение — такую политику нужно выбирать осознанно.
Для приложения добавь лимит размера входа, ограничение параллельных запросов и журнал технических событий без ключей. Считай расходы по фактическому usage и действующей цене выбранной модели, а не по количеству нажатий кнопки.
В веб-приложении запрос с секретом выполняй на backend. Не помещай ключ в публичный JavaScript или переменную, которую сборщик отдаёт браузеру. Когда одиночный вызов устойчиво работает, можно вынести процедуру протоколирования в отдельный модуль, а для ручной работы — в skill Claude.
Собери своего ИИ-агента и проверь результат
«AI Agents: от vibe coding к AI-команде»: desktop agents, MCP, skills, evals и harness. Отдельные воркшопы — от подключения инструментов до контроля качества.
7 практических воркшопов · записи · вопросы автору в чате
Посмотреть программу курса ↗