Разработка AI-ассистента в мобильном приложении на базе GigaChat (Сбер)
GigaChat — языковая модель Сбера, API которой специально ориентирован на B2B-применение с размещением данных в российском контуре. Для финансовых, медицинских и государственных приложений, где хранение данных за рубежом юридически невозможно, GigaChat становится основным вариантом наряду с YandexGPT.
Авторизация: OAuth 2.0 с клиентскими учётными данными
GigaChat API требует OAuth 2.0. Схема: получаем access_token через POST https://ngw.devices.sberbank.ru:9443/api/v2/oauth с Authorization: Basic {base64(client_id:client_secret)} и scope (GIGACHAT_API_PERS для физлиц, GIGACHAT_API_CORP для юрлиц).
Токен живёт 30 минут. На мобильном клиенте его нельзя хранить и тем более получать напрямую — client_id и client_secret должны быть только на сервере. Серверный прокси для GigaChat — обязательный компонент, не опция.
# Серверная сторона (Python) — получение токена
import httpx, base64, time
class GigaChatAuth:
def __init__(self, client_id: str, client_secret: str):
self._credentials = base64.b64encode(
f"{client_id}:{client_secret}".encode()
).decode()
self._token = None
self._expires_at = 0
async def get_token(self) -> str:
if time.time() < self._expires_at - 60:
return self._token
async with httpx.AsyncClient(verify=False) as client: # Сбер использует собственные CA
resp = await client.post(
"https://ngw.devices.sberbank.ru:9443/api/v2/oauth",
headers={"Authorization": f"Basic {self._credentials}"},
data={"scope": "GIGACHAT_API_CORP"}
)
data = resp.json()
self._token = data["access_token"]
self._expires_at = data["expires_at"] / 1000 # ms -> s
return self._token
Обратите внимание: verify=False в Python httpx — Сбер использует корневые сертификаты из реестра Минцифры, которые не входят в системные доверенные хранилища большинства ОС. Для продакшена нужно добавить российские корневые CA явно.
GigaChat API: chat completions
После получения токена — стандартный POST /api/v1/chat/completions:
{
"model": "GigaChat",
"messages": [
{"role": "system", "content": "Ты помощник финансового аналитика."},
{"role": "user", "content": "Объясни показатель P/E ratio"}
],
"stream": true,
"temperature": 0.7,
"max_tokens": 1024
}
Доступные модели: GigaChat (базовая), GigaChat-Plus, GigaChat-Pro. Разница — в качестве ответов и скорости, схожая с тем, как Lite/Pro у Яндекса.
Стриминг — через SSE, формат совместим с OpenAI: data: {...} с delta.content. Это удобно: если у вас уже есть OpenAI-совместимый SSE-парсер, он работает с GigaChat без изменений.
Функции (Function Calling)
GigaChat поддерживает function calling через параметр functions в запросе. Синтаксис отличается от OpenAI: поле называется functions (не tools), а вызов приходит в function_call (не tool_calls). При миграции с OpenAI это первое место, где сломается код.
{
"functions": [{
"name": "get_account_balance",
"description": "Получить баланс счёта клиента",
"parameters": {
"type": "object",
"properties": {
"account_id": {"type": "string"}
},
"required": ["account_id"]
}
}],
"function_call": "auto"
}
Работа с изображениями
GigaChat Pro поддерживает передачу изображений через file_id. Файл сначала загружается через POST /api/v1/files с purpose: general, получаем id, затем используем в сообщении:
{
"role": "user",
"content": [
{"type": "text", "text": "Что на этом документе?"},
{"type": "image_url", "image_url": {"url": "https://gigachat.ru/files/{file_id}/content"}}
]
}
Файл удаляется автоматически через 24 часа.
Ориентиры по срокам
Серверный прокси с OAuth + базовый текстовый ассистент — 1,5–2 недели (с учётом настройки корневых сертификатов и тестирования OAuth). С function calling и изображениями — 3–4 недели.







