Source: https://aiprimetech.io/ru/learn/anthropic-python-sdk/ [Главная](/ru/) / [Обучение](/ru/learn/) / Anthropic Python SDK: установка, настройка base_url, потоковая передача и обработка ошибок # Anthropic Python SDK: установка, настройка base_url, потоковая передача и обработка ошибок В anthropic — официальный Python-клиент Anthropic для Claude API. Этот пакет обеспечивает аутентификацию, повторные попытки, потоковую передачу и типизированные ошибки, а также работает без изменений с любой конечной точкой, совместимой с Anthropic: задайте base_url (или ANTHROPIC_BASE_URL), и остальной код останется прежним. ## Установка терминалКопировать ``` pip install anthropic ``` Версии 1.x работают на httpx2 и требуют Python 3.10 или новее. Если вы передаёте собственный клиент HTTP, используйте предоставляемый SDK DefaultHttpxClient , чтобы сохранить его стандартные тайм-ауты и ограничения подключений. ## Создание клиента app.pyКопировать ``` import anthropic client = anthropic.Anthropic( api_key="your_key", # default: ANTHROPIC_API_KEY base_url="https://aiprimetech.io", # default: ANTHROPIC_BASE_URL, else https://api.anthropic.com ) ``` base_url — корневой адрес хоста. SDK добавляет /v1/messages самостоятельно, поэтому https://aiprimetech.io/v1 приведёт к /v1/v1/messages и 404 page not found. Если обе переменные заданы в окружении, anthropic.Anthropic() вообще не требует аргументов: терминалКопировать ``` export ANTHROPIC_API_KEY=your_key export ANTHROPIC_BASE_URL=https://aiprimetech.io ``` ## Отправка сообщения app.pyКопировать ``` message = client.messages.create( model="claude-sonnet-5", max_tokens=1024, messages=[{"role": "user", "content": "Summarise TCP slow start in two sentences."}], ) for block in message.content: if block.type == "text": print(block.text) print(message.usage.input_tokens, message.usage.output_tokens) print(message._request_id) # log this with any failure report ``` content — список блоков (текст, рассуждения, использование инструментов), поэтому проверяйте block.type вместо того, чтобы читать content[0].text без проверки. ## Потоковая передача ответов stream.pyКопировать ``` with client.messages.stream( model="claude-sonnet-5", max_tokens=16000, messages=[{"role": "user", "content": "Write a short story about a lighthouse."}], ) as stream: for text in stream.text_stream: print(text, end="", flush=True) final = stream.get_final_message() ``` Используйте потоковую передачу для любых запросов с большим объёмом входных или выходных данных либо большим значением max_tokens: отдельный запрос без потоковой передачи должен завершиться до истечения тайм-аута, а для потока это не требуется. messages.create(..., stream=True) предоставляет итератор исходных событий, если вспомогательный метод вам не нужен. ## Асинхронный клиент async_app.pyКопировать ``` import asyncio, anthropic client = anthropic.AsyncAnthropic(base_url="https://aiprimetech.io") limit = asyncio.Semaphore(3) # stay within your key's concurrency async def ask(question: str) -> str: async with limit: msg = await client.messages.create( model="claude-haiku-4-5", max_tokens=512, messages=[{"role": "user", "content": question}], ) return next(b.text for b in msg.content if b.type == "text") async def main(): answers = await asyncio.gather(*(ask(q) for q in ["What is DNS?", "What is BGP?"])) print(answers) asyncio.run(main()) ``` Семафор важен. Одновременная отправка сотен запросов с помощью asyncio.gather — самая частая причина ошибок Concurrency limit exceeded , с которыми мы сталкиваемся при работе Python-клиентов. ## Тайм-ауты и повторные попытки По умолчанию: тайм-аут 10 мин. на запрос и 2 автоматических повторных попыток с экспоненциальным увеличением задержки. SDK повторяет запросы при ошибках подключения, ответах 408, 409, 429 и 5xx. Поскольку запросы с истёкшим тайм-аутом тоже повторяются, максимальное общее время равно тайм-ауту, умноженному на число попыток. app.pyКопировать ``` client = anthropic.Anthropic(base_url="https://aiprimetech.io", timeout=60.0, max_retries=4) # override for one call only client.with_options(timeout=300.0).messages.create( model="claude-opus-5-5", max_tokens=4000, messages=[{"role": "user", "content": "Review this design doc..."}], ) ``` ## Обработка ошибок | Статус | Исключение | Повторять? | 400 | anthropic.BadRequestError | Нет: исправьте запрос | 401 | anthropic.AuthenticationError | Нет: ключ неверен или отсутствует | 403 | anthropic.PermissionDeniedError | Нет | 404 | anthropic.NotFoundError | Нет: проверьте ID модели или URL | 429 | anthropic.RateLimitError | Да, после паузы | 5xx, включая 529 — перегрузка | anthropic.InternalServerError | Да | Сбой сети | anthropic.APIConnectionError | Да | Тайм-аут | anthropic.APITimeoutError | Да, либо используйте потоковую передачу errors.pyКопировать ``` try: message = client.messages.create(model="claude-sonnet-5", max_tokens=1024, messages=[{"role": "user", "content": "Hi"}]) except anthropic.NotFoundError as e: print("Bad model ID or URL:", e.message) except anthropic.RateLimitError as e: print("Rate limited, retry after", e.response.headers.get("retry-after")) except anthropic.APIStatusError as e: print(e.status_code, e.type, e.message) except anthropic.APIConnectionError: print("Network problem") ``` Сначала перехватывайте конкретные классы, а APIStatusError — в последнюю очередь; один общий except скрывает различие между ошибками, при которых стоит повторить запрос, и ошибками, требующими изменения кода. e.type возвращает строку с типом ошибки API, например rate_limit_error или overloaded_error. ## ID моделей | Идентификатор модели | Для каких задач | claude-sonnet-5 | Основной выбор для программирования и работы с агентами: быстрая, мощная, со средней стоимостью. | claude-opus-5-5 | Более сложные рассуждения, масштабный рефакторинг, длительная работа агентов. | claude-fable-5-1 | Самая мощная и дорогая; используйте её для наиболее сложных задач. | claude-haiku-4-5 | Недорогая и быстрая: заголовки, краткие изложения, классификация, небольшие шаги. client.models.list() возвращает модели, доступные через конечную точку, поэтому вы можете проверить ID перед использованием. Используйте ID точно в указанном виде: без суффиксов с датой. ## Устранение неполадок при работе через шлюз | Что вы видите | Причина | Решение | NotFoundError на 404 page not found | /v1 в base_url | Используйте корневой адрес хоста | AuthenticationError | Ключ не задан в окружении процесса или вставлен с пробельными символами | Выведите len(os.environ["ANTHROPIC_API_KEY"]) | RateLimitError: Concurrency limit exceeded for user | Слишком много одновременных запросов | Объект asyncio.Semaphore , как показано выше | APITimeoutError при длительных задачах | Запрос без потоковой передачи выполняется дольше тайм-аута | Используйте потоковую передачу или увеличьте timeout | InternalServerError: No available accounts | Временная нехватка ресурсов у вышестоящего сервиса | Дайте SDK повторить запрос; увеличьте max_retries | Insufficient account balance | Баланс исчерпан | [Пополнить баланс](/ru/topup/) Подробнее об ошибках на стороне модели — в [руководстве по ошибкам Claude API](/ru/learn/claude-api-errors-troubleshooting/). ## Часто задаваемые вопросы Как установить Anthropic Python SDK? pip install anthropic. Версия 1.x требует Python 3.10 или новее. Как задать собственный базовый URL в Anthropic Python SDK? Передайте base_url в anthropic.Anthropic() или задайте ANTHROPIC_BASE_URL. Используйте корневой адрес хоста; SDK добавляет /v1/messages. Каковы стандартные тайм-аут и число повторных попыток? 10 мин. на запрос и 2 повторных попыток с экспоненциальным увеличением задержки при ошибках подключения, ответах 408, 409, 429 и 5xx. Как использовать потоковую передачу с Python SDK? Используйте with client.messages.stream(...) as stream: и перебирайте stream.text_stream; stream.get_final_message() возвращает полное сообщение. Начните использовать Claude за несколько минут Получите ключ API — учётная запись Anthropic и запись в лист ожидания не нужны.[Получить ключ API](/register) AI Prime Tech — независимый API-шлюз. Он не связан с Anthropic, не одобрен этой компанией и не является её реселлером. Claude и названия связанных моделей — товарные знаки их соответствующих владельцев. ## Другие руководства по Claude API [Как получить ключ Claude API](/ru/learn/how-to-get-a-claude-api-key/)[Как устроены цены Claude API](/ru/learn/claude-api-pricing-explained/)[Самый дешевый способ использования API Claude](/ru/learn/cheapest-way-to-use-claude-api/)[Безлимитный Cursor с API Claude](/learn/use-claude-api-with-cursor/)[Безлимитный доступ к Claude Code](/ru/learn/use-claude-api-with-claude-code/)[Шлюз API Claude и прямой доступ к Anthropic: сравнение](/ru/learn/claude-api-vs-anthropic-direct/)[Использование Claude через API, совместимый с OpenAI](/ru/learn/openai-compatible-claude-api/)[Объяснение моделей Claude: сравнение Claude Opus, Sonnet, Haiku и Fable — все модели Claude API, названия моделей Anthropic и цены (2026)](/ru/learn/claude-api-models-compared/)[Оплата API Claude криптовалютой](/ru/learn/claude-api-with-crypto-payment/)[Доступ к API Claude без листа ожидания](/ru/learn/claude-api-without-waitlist/)[Как сократить расход токенов Claude](/ru/learn/how-to-reduce-claude-token-usage/)[Безлимитный Cline с API Claude](/ru/learn/use-claude-api-with-cline/)[Безлимитный Roo Code с API Claude](/ru/learn/use-claude-api-with-roo-code/)[Безлимитный Claude в IDE JetBrains](/ru/learn/use-claude-api-with-jetbrains/)[Aider без ограничений с Claude API](/ru/learn/use-claude-api-with-aider/)[Безлимитный Claude в VS Code](/ru/learn/use-claude-api-with-vscode/)[Конфигурация OpenCode для Claude: настройка opencode.json, модели и распространённые ошибки](/ru/learn/use-claude-api-with-opencode/)[Запуск агента Hermes без ограничений на Claude](/ru/learn/run-hermes-agent-with-claude-api/)[Запуск OpenClaw с Claude без ограничений](/ru/learn/run-openclaw-with-claude-api/)[Что означает API, совместимый с Anthropic](/ru/learn/anthropic-compatible-api/)[Ключ API Claude Code — ANTHROPIC_API_KEY: как получить, настроить и когда вместо него использовать claude setup-token](/ru/learn/claude-code-api-key-setup/)[Расходы на API Claude Code — цены и способы их снизить](/ru/learn/claude-code-api-costs/)[Объяснение ошибок API Claude: ошибка сервера 500, перегрузка 529, лимит запросов 429, некорректный запрос 400 — и исправление каждой из них](/ru/learn/claude-api-errors-troubleshooting/)[Как купить кредиты Claude API — и почему кредиты Claude лучше любого предложения «купить аккаунт Claude»](/ru/learn/buy-claude-api-credits/)[Бесплатный API Claude: существует ли бесплатный ключ API Claude и что действительно бесплатно в 2026?](/ru/learn/claude-api-free-trial/)[API Claude или подписка Claude Pro/Max — что выбрать](/ru/learn/claude-api-vs-subscription/)[Запуск Codex CLI на Claude](/ru/learn/use-claude-api-with-codex/)[Подключение Claude к n8n](/ru/learn/use-claude-api-with-n8n/)[Маршрутизация LiteLLM к Claude](/ru/learn/use-claude-api-with-litellm/)[Использование Claude в Kilo Code](/ru/learn/use-claude-api-with-kilo-code/)[Подключение Claude к GitHub Copilot](/ru/learn/use-claude-api-with-github-copilot/)[Подключите Zed к Claude через шлюз](/ru/learn/use-claude-api-with-zed/)[Подключите Cherry Studio к Claude](/ru/learn/use-claude-api-with-cherry-studio/)[ChatAnthropic в LangChain: импорт, base_url, потоковая передача, инструменты и ошибки](/ru/learn/use-claude-api-with-langchain/)[Claude с Vercel AI SDK: baseURL в createAnthropic, потоковая передача и устранение проблем](/ru/learn/use-claude-api-with-vercel-ai-sdk/)[Используйте Factory Droid с Claude](/ru/learn/use-claude-api-with-factory-droid/)[Как устроен API Claude Code](/ru/learn/claude-code-api/)[Интеграция API Claude в ваше приложение](/ru/learn/claude-api-integration/)[Как пользоваться Claude без ограничений — и почему «взломанного Claude Code» не существует](/ru/learn/get-unlimited-claude-usage/)