Розробка 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 тижні.







