Перейти к содержимому
NEWЧат с 15 ИИ-моделями — попробуйте бесплатно / имейте совесть, когда будете делиться или копировать
>AISTUDY_

Модуль 2.8 · Урок 1

Урок 1: GigaChat API — Начало работы

ПрактикаУстановка
2.8 / Урок 1 из 4

Чему вы научитесь

  • Регистрироваться на платформе Sber для разработчиков
  • Получать авторизационные данные (Client ID и Client Secret)
  • Проходить OAuth2 авторизацию и получать access token
  • Работать с российским CA-сертификатом для HTTPS
  • Отправлять первые запросы к GigaChat API на Python
  • Различать модели GigaChat 2 Lite, GigaChat 2 Pro и GigaChat 2 Max
  • Ориентироваться в ценах и лимитах бесплатного тарифа

Содержание

Шаг 1: Регистрация на developers.sber.ru

GigaChat — это LLM от Сбербанка, разработанная с учётом особенностей русского языка. Она работает целиком в инфраструктуре России, что важно для компаний, подпадающих под ФЗ-152 (закон о защите персональных данных).

Чтобы начать работу:

  1. Перейдите на developers.sber.ru
  2. Создайте аккаунт (используйте рабочий email)
  3. Подтвердите email
  4. Перейдите в раздел «API» → «GigaChat»
  5. Нажмите «Создать новое приложение»

Шаг 2: Получение авторизационных данных

После создания приложения вы получите:

ПараметрОписание
Client IDУникальный идентификатор вашего приложения
Client SecretСекретный ключ (храните в переменных окружения!)
ScopeGIGACHAT_API_PERS (физлица), GIGACHAT_API_B2B (юрлица пакет), GIGACHAT_API_CORP (юрлица pay-as-you-go)
RQ-UUIDУникальный идентификатор запроса (генерируется на клиенте)

[!] Никогда не коммитьте Client Secret в репозиторий! Используйте .env файлы или переменные окружения.

Шаг 3: OAuth2 Авторизация и получение access token

GigaChat использует OAuth2. Вот как получить access token:

sequenceDiagram
  participant C as Client
  participant A as Auth Server
  participant G as GigaChat API

  C->>A: POST /oauth
  A-->>C: access_token
  C->>G: POST /chat
  G-->>C: ответ
import requests
import uuid
import base64
import os
from dotenv import load_dotenv

load_dotenv()

# Ваши учётные данные
CLIENT_ID = os.getenv("GIGACHAT_CLIENT_ID")
CLIENT_SECRET = os.getenv("GIGACHAT_CLIENT_SECRET")

# Параметры авторизации
AUTH_URL = "https://ngw.devices.sberbank.ru:9443/api/v2/oauth"
RQ_UUID = str(uuid.uuid4())

# Создаём базовую авторизацию (Client ID:Client Secret в Base64)
credentials = f"{CLIENT_ID}:{CLIENT_SECRET}"
encoded_credentials = base64.b64encode(credentials.encode()).decode()

# Заголовки для авторизации
headers = {
    "Authorization": f"Basic {encoded_credentials}",
    "RQ-UUID": RQ_UUID,
    "Content-Type": "application/x-www-form-urlencoded"
}

# Тело запроса
data = {
    "grant_type": "client_credentials",
    "scope": "GIGACHAT_API_PERS"  # GIGACHAT_API_B2B или GIGACHAT_API_CORP для организаций
}

# Отправляем запрос авторизации
response = requests.post(AUTH_URL, headers=headers, data=data)

if response.status_code == 200:
    token_data = response.json()
    access_token = token_data["access_token"]
    expires_in = token_data["expires_in"]
    print(f"[+] Token получен! Действителен {expires_in} секунд")
    print(f"Token: {access_token[:20]}...")
else:
    print(f"[-] Ошибка авторизации: {response.status_code}")
    print(response.text)

Шаг 4: Работа с российским CA-сертификатом

GigaChat использует российский CA (удостоверяющий центр). В некоторых окружениях может потребоваться явно указать путь к сертификату:

import requests

# Если возникает ошибка SSL, используйте:
response = requests.get(
    url,
    headers=headers,
    verify="/path/to/russian-ca.pem"  # Путь к сертификату
)

# Или отключите проверку ([!] только для разработки!):
response = requests.get(url, headers=headers, verify=False)

В production всегда используйте проверку сертификата.

Шаг 5: Первый запрос к GigaChat API

Теперь отправим простой запрос:

import requests
import json
import uuid

ACCESS_TOKEN = "your_access_token_here"  # Получили на шаге 3
RQ_UUID = str(uuid.uuid4())

API_URL = "https://gigachat.devices.sberbank.ru/api/v1/chat/completions"

headers = {
    "Authorization": f"Bearer {ACCESS_TOKEN}",
    "Content-Type": "application/json",
    "RQ-UUID": RQ_UUID
}

payload = {
    "model": "GigaChat-2",  # или GigaChat-2-Pro, GigaChat-2-Max
    "messages": [
        {
            "role": "user",
            "content": "Привет! Расскажи, что ты умеешь делать?"
        }
    ],
    "temperature": 0.7,
    "max_tokens": 256
}

response = requests.post(API_URL, headers=headers, json=payload)

if response.status_code == 200:
    result = response.json()
    message = result["choices"][0]["message"]["content"]
    print(f"[AI] GigaChat: {message}")
else:
    print(f"[-] Ошибка: {response.status_code}")
    print(response.text)

Шаг 6: Сравнение моделей GigaChat

Актуальная линейка — GigaChat 2 (выпущена в 2025 году). Более ранние названия GigaChat, GigaChat-Plus, GigaChat-Pro устарели.

ХарактеристикаGigaChat-2 (Lite)GigaChat-2-ProGigaChat-2-Max
СкоростьБыстраяСредняяМедленная
Качество[+] Хорошее[+][+] Лучше[+][+][+] Лучшее
Размер контекста128K токенов128K токенов128K токенов
Стоимость за 1K токенов0,40 ₽3,00 ₽3,90 ₽
Мультимодальность[-][+] Vision[+] Vision
Рекомендуется дляЧаты, простые задачиАналитика, обработкаRAG, сложные задачи

GigaChat 2 Max занял 1-е место в независимом бенчмарке MERA для русского языка (2025).

Шаг 7: Лимиты и цены

Бесплатный тир (Freemium):

  • 1 000 000 токенов бесплатно для физических лиц
  • Лимит на параллельные запросы ≤ 5
  • Достаточно для прототипирования и обучения

Платные тарифы — стоимость за 1K токенов:

  • GigaChat-2 (Lite): 0,40 ₽
  • GigaChat-2-Pro: 3,00 ₽
  • GigaChat-2-Max: 3,90 ₽

Пакет для юрлиц:

  • 400 ₽ за пакет → 10 млн токенов
  • Enterprise: контактируйте sales@sber.ru

Отслеживайте использование в личном кабинете: Приложения → Статистика.


Попробуйте сами

Создайте файл .env:

GIGACHAT_CLIENT_ID=your_client_id
GIGACHAT_CLIENT_SECRET=your_client_secret

Установите зависимости:

pip install requests python-dotenv

Запустите полный скрипт:

import requests
import uuid
import base64
import os
import json
from dotenv import load_dotenv

load_dotenv()

class GigaChatClient:
    def __init__(self, client_id, client_secret):
        self.client_id = client_id
        self.client_secret = client_secret
        self.access_token = None
        self.auth_url = "https://ngw.devices.sberbank.ru:9443/api/v2/oauth"
        self.api_url = "https://gigachat.devices.sberbank.ru/api/v1/chat/completions"

    def get_token(self):
        """Получить access token"""
        credentials = f"{self.client_id}:{self.client_secret}"
        encoded = base64.b64encode(credentials.encode()).decode()

        headers = {
            "Authorization": f"Basic {encoded}",
            "RQ-UUID": str(uuid.uuid4()),
            "Content-Type": "application/x-www-form-urlencoded"
        }

        data = {
            "grant_type": "client_credentials",
            "scope": "GIGACHAT_API_PERS"
        }

        response = requests.post(self.auth_url, headers=headers, data=data)
        if response.status_code == 200:
            self.access_token = response.json()["access_token"]
            return True
        else:
            print(f"Ошибка авторизации: {response.text}")
            return False

    def chat(self, message, model="GigaChat-2"):
        """Отправить сообщение"""
        if not self.access_token:
            if not self.get_token():
                return None

        headers = {
            "Authorization": f"Bearer {self.access_token}",
            "Content-Type": "application/json",
            "RQ-UUID": str(uuid.uuid4())
        }

        payload = {
            "model": model,
            "messages": [{"role": "user", "content": message}],
            "temperature": 0.7,
            "max_tokens": 256
        }

        response = requests.post(self.api_url, headers=headers, json=payload)

        if response.status_code == 200:
            return response.json()["choices"][0]["message"]["content"]
        else:
            print(f"Ошибка запроса: {response.status_code} - {response.text}")
            return None

# Использование
client = GigaChatClient(
    os.getenv("GIGACHAT_CLIENT_ID"),
    os.getenv("GIGACHAT_CLIENT_SECRET")
)

result = client.chat("На русском: напиши шутку про программистов")
print(f"Ответ: {result}")

Задачи для упражнения:

  1. Создайте клиент и отправьте сообщение на русском языке
  2. Сравните ответы для одного вопроса между моделями (GigaChat-2 vs GigaChat-2-Pro)
  3. Отслеживайте время ответа и используемые токены
  4. Попробуйте увеличить max_tokens до 1024 и задайте более сложный вопрос

Ключевые выводы

[+] Запомните:

  1. OAuth2 — стандарт авторизации; Client Secret нужно хранить в переменных окружения
  2. access_token действует ограниченное время (обычно 30 минут), требует обновления
  3. RQ-UUID — уникальный идентификатор каждого запроса, помогает отслеживать запросы в логах
  4. Три модели — GigaChat-2, GigaChat-2-Pro, GigaChat-2-Max — выбирайте по соотношению скорость/качество для вашей задачи
  5. Цены в рублях — большой плюс для российских стартапов и компаний
  6. Бесплатный тир — 1 млн токенов бесплатно, достаточно для прототипирования

Дополнительные материалы:


Следующий урок

В Уроке 2: YandexGPT API мы изучим альтернативу от Яндекса — её особенности, интеграцию с Yandex Cloud и Python SDK для удобной работы.

Узнаем, почему YandexGPT популярна в финтеке и когда её стоит выбирать вместо GigaChat.

Скачать урок

Есть идея или нашли ошибку?

// Обсуждение

Можно писать анонимно. Укажите email, чтобы получать уведомления об ответах.