Примеры подключения и использования

Обновлено 25.06.2026

1.4.1 Базовый Chat Completions

Python (httpx):
import httpx
BASE_URL = "https://ainergy01-api-am2.itglobal.com/v1"
API_KEY = "***"
headers = {
    "Authorization": f"Bearer {API_KEY}",
    "X-AIN-USERNAME": "ваш_логин",
    "X-AIN-SOURCEID": "название_системы",
}
client = httpx.Client(base_url=BASE_URL, headers=headers, timeout=120.0)
# Запроск DeepSeek Pro
resp = client.post("/chat/completions", json={
    "model": "opr.deepseek4_pro.chat_completions",
    "messages": [{"role": "user", "content": "Привет! Расскажи о себе."}],
    "max_tokens": 512,
    "temperature": 0.7,
})
print(resp.json()["choices"][0]["message"]["content"])
Python (openai SDK):
from openai import OpenAI
client = OpenAI(
    base_url="https://ainergy01-api-am2.itglobal.com/v1",
    api_key=***
    default_headers={
        "X-AIN-USERNAME": "ваш_логин",
        "X-AIN-SOURCEID": "название_системы",
    }
)
response = client.chat.completions.create(
    model="opr.claude-sonnet4.6.chat_completions",
    messages=[{"role": "user", "content": "Напиши краткоерезюме статьи..."}]
)
print(response.choices[0].message.content)

1.4.2Прокси для GigaChat

Данный сценарий описывает развёртывание OpenAI-совместимого прокси-сервера на базе FastAPI, который транслирует запросы к GigaChat API Сбера. Прокси позволяет использовать GigaChat через стандартный интерфейс OpenAI /v1/chat/completions, автоматически управляя OAuth-аутентификацией и кешированием токенов.

Архитектура

Клиент (OpenAI SDK / httpx)
    → http://localhost:8010/v1/chat/completions
        → Прокси (FastAPI)
            → https://ngw.devices.sberbank.ru/api/v2/oauth (OAuth, токен)
            → https://gigachat.devices.sberbank.ru/api/v1/chat/completions

Полный код прокси (main.py)

#!/usr/bin/env python3

GigaChat OpenAI-compatible proxy.

Автоматическое обновление OAuth-токена (живёт ~30 мин).

import os
import uuid
from datetime import datetime, timedelta
from typing import Optional
from dotenv import load_dotenv
from fastapi import FastAPI, HTTPException, Request
from fastapi.responses import StreamingResponse, JSONResponse
import httpx
load_dotenv()
GIGACHAT_API_KEY = ***"GIGACHAT_API_KEY")
if not GIGACHAT_API_KEY:
    *** RuntimeError("GIGACHAT_API_KEY is required in .env")
OAUTH_URL = "https://ngw.devices.sberbank.ru:9443/api/v2/oauth"
CHAT_URL = "https://gigachat.devices.sberbank.ru/api/v1/chat/completions"
app = FastAPI(title="GigaChat Proxy", version="1.0")
# Кештокена
_access_token: Optional[str] = None
_token_expires_at: Optional[datetime] = None
# Маппингмоделей
MODEL_MAP = {
    "gigachat-lite": "GigaChat",
    "gigachat-pro": "GigaChat-Pro",
    "gigachat": "GigaChat",
    "GigaChat": "GigaChat",
    "GigaChat-Pro": "GigaChat-Pro",
}
async def get_access_token() -> str:
    """Получить или вернуть из кеша OAuth-токен."""
    global _access_token, _token_expires_at
    if _access_token and _token_expires_at and datetime.utcnow() < _token_expires_at:
        return _access_token
    headers = {
        "Authorization": f"Basic {GIGACHAT_API_KEY}",
        "RqUID": str(uuid.uuid4()),
        "Content-Type": "application/x-www-form-urlencoded",
        "Accept": "application/json",
    }
    data = {"scope": "GIGACHAT_API_PERS"}
    async with httpx.AsyncClient(verify=False, timeout=30.0) as client:
        resp = await client.post(OAUTH_URL, headers=headers, data=data)
        if resp.status_code != 200:
            raise HTTPException(status_code=502, detail=f"OAuth failed: {resp.text}")
        token_data = resp.json()
        _access_token = token_data["access_token"]
        expires_in = token_data.get("expires_in", 1800)
        _token_expires_at = datetime.utcnow() + timedelta(seconds=expires_in - 60)
        return _access_token
@app.post("/v1/chat/completions")
async def chat_completions(request: Request):
    body = await request.json()
    # Маппингмодели
    model = body.get("model", "gigachat-lite")
    body["model"] = MODEL_MAP.get(model, "GigaChat")
    token = await get_access_token()
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json",
        "Accept": "application/json",
    }
    stream = body.get("stream", False)
    async with httpx.AsyncClient(verify=False, timeout=120.0) as client:
        if stream:
            async def stream_response():
            async with client.stream("POST", CHAT_URL, headers=headers, json=body) as resp:
            if resp.status_code != 200:
            content = await resp.aread()
            raise HTTPException(status_code=resp.status_code, detail=content.decode())
            async for chunk in resp.aiter_bytes():
            yield chunk
            return StreamingResponse(stream_response(), media_type="text/event-stream")
        else:
            resp = await client.post(CHAT_URL, headers=headers, json=body)
            if resp.status_code != 200:
            raise HTTPException(status_code=resp.status_code, detail=resp.text)
            return JSONResponse(content=resp.json())
@app.get("/v1/models")
async def list_models():
    return {
        "object": "list",
        "data": [
            {"id": "gigachat-lite", "object": "model", "owned_by": "sber"},
            {"id": "gigachat-pro", "object": "model", "owned_by": "sber"},
        ]
    }
@app.get("/health")
async def health():
    return {"status": "ok", "models": list(MODEL_MAP.keys())}
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8010)

Зависимости (requirements.txt)

fastapi

uvicorn[standard]

httpx

python-dotenv

python-multipart

Конфигурация (.env)

GIGACHAT_API_KEY=<Authorization Key из Sber Studio>

Важно: GIGACHAT_API_KEY — этоготовая Base64-строка client_id:client_secret, полученная в личномкабинете Sber Studio. Дополнительное кодирование не требуется.

Запуск

pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8010

Использование прокси

from openai import OpenAI
client = OpenAI(
    base_url="http://localhost:8010/v1",
    api_key=***  # прокси не проверяет API-ключ
)
# GigaChat (Lite)
response = client.chat.completions.create(
    model="gigachat-lite",
    messages=[{"role": "user", "content": "Привет!"}],
)
print(response.choices[0].message.content)
# GigaChat-Pro
response = client.chat.completions.create(
    model="gigachat-pro",
    messages=[{"role": "user", "content": "Напиши профессиональныйответ..."}],
)
print(response.choices[0].message.content)

Streaming

response = client.chat.completions.create(
    model="gigachat-pro",
    messages=[{"role": "user", "content": "Расскажидлинный ответ..."}],
    stream=True,
)
for chunk in response:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Ограничения

Scope: GIGACHAT_API_PERS (физические лица). Для юрлиц/ИП требуется изменить на GIGACHAT_API_B2B или GIGACHAT_API_CORP.

SSL: verify=False — требуется при использовании корпоративных сертификатов Минцифры.

Таймауты: OAuth — 30 сек, Chat — 120 сек.

1.4.3 OCR — распознавание текста из документов

Сервис OCR на базе AInergy позволяет извлекать текст из PDF и других форматов документов через специализированные эндпоинты.

Эндпоинт

POST https://ainergy01-api-am2.itglobal.com/v1/v2/doc-to-text

Пример запроса (curl)

curl -sS -X POST \
  -H "Authorization: Bearer ВАШ_API_КЛЮЧ" \
  -H "X-AIN-USERNAME: ваше_имя" \
  -H "X-AIN-SOURCEID: название_системы" \
  -F "model=itg.ocr.v2.doc-to-text" \
  -F "file=@document.pdf" \
  "https://ainergy01-api-am2.itglobal.com/v1/v2/doc-to-text"

Ответ:

{
  "text": "Извлечённый текст документа..."
}

Пример запроса (Python / httpx)

import httpx
BASE_URL = "https://ainergy01-api-am2.itglobal.com/v1"
API_KEY = "***"
headers = {
    "Authorization": f"Bearer {API_KEY}",
    "X-AIN-USERNAME": "ваш_логин",
    "X-AIN-SOURCEID": "название_системы",
}
with open("document.pdf", "rb") as f:
    data = {"model": "itg.ocr.v2.doc-to-text"}
    files = {"file": ("document.pdf", f, "application/pdf")}
    resp = httpx.post(
        f"{BASE_URL}/v2/doc-to-text",
        headers=headers,
        data=data,
        files=files,
        timeout=120.0,
    )
    result = resp.json()
    print(result["text"])

1.4.4 Конвертация документов через Docling

import httpx
BASE_URL = "https://ainergy01-api-am2.itglobal.com/v1"
API_KEY = "***"
headers = {"Authorization": f"Bearer {API_KEY}"}
with open("document.pdf", "rb") as f:
    files = {"files": ("document.pdf", f, "application/pdf")}
    data = {"model": "itg.docling.convert_sync"}
    resp = httpx.post(
        f"{BASE_URL}/v1/convert/file",
        headers=headers,
        data=data,
        files=files,
    )
    print(resp.json())

1.4.5 WhisperX — транскрипция аудио

Сервис транскрипции на базе WhisperX позволяет преобразовывать аудио в текст.

1.4.6 Эндпоинт

POST https://ainergy01-api-am2.itglobal.com/v1/audio/transcriptions

1.4.7 Пример запроса (curl)

curl -sS -X POST \
  -H "Authorization: Bearer ВАШ_API_КЛЮЧ" \
  -H "X-AIN-USERNAME: ваше_имя" \
  -H "X-AIN-SOURCEID: название_системы" \
  -F "model=itg.whisperx-prod.audio_transcriptions" \
  -F "file=@recording.mp3" \
  "https://ainergy01-api-am2.itglobal.com/v1/audio/transcriptions"

1.4.8 Пример запроса (Python / httpx)

import httpx
BASE_URL = "https://ainergy01-api-am2.itglobal.com/v1"
API_KEY = "***"
headers = {
"Authorization": f"Bearer {API_KEY}",
"X-AIN-USERNAME": "ваш_логин",
"X-AIN-SOURCEID": "название_системы",
}
with open("recording.mp3", "rb") as f:
data = {"model": "itg.whisperx-prod.audio_transcriptions"}
files = {"file": ("recording.mp3", f, "audio/mpeg")}
resp = httpx.post(
f"{BASE_URL}/audio/transcriptions",
headers=headers,
data=data,
files=files,
timeout=120.0,
)
result = resp.json()
print(result["text"]

1.4.9 Генерация речи (TTS через Gemini)

import httpx
BASE_URL = "https://ainergy01-api-am2.itglobal.com/v1"
API_KEY = "***"
headers = {
"Authorization": f"Bearer {API_KEY}",
"X-AIN-USERNAME": "ваш_логин",
"X-AIN-SOURCEID": "название_системы",
}
resp = httpx.post(
f"{BASE_URL}/audio/speech",
headers=headers,
json={
"model": "opr.gemini-3.1-flash-tts-preview.audio_speech",
"input": "Привет! Это тестовая генерация речи.",
"voice": "default",
},
timeout=60.0,
)
with open("output.mp3", "wb") as f:
f.write(resp.content)

1.4.10 PII Detection — обнаружение персональных данных

Сервис на базе GLiNER позволяет обнаруживать, маскировать и восстанавливать персональные данные в тексте. Подробная инструкция доступна по запросу.

1.4.11 Embeddings и Reranker

Получение эмбеддингов

import httpx
BASE_URL = "https://ainergy01-api-am2.itglobal.com/v1"
API_KEY = "***"
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = httpx.post(
f"{BASE_URL}/embeddings",
headers=headers,
json={
"model": "itg.qwen3-embedding-4b.embeddings",
"input": "Текст для векторизации",
},
)
print(resp.json())

Реранкинг

resp = httpx.post(
f"{BASE_URL}/rerank",
headers=headers,
json={
"model": "itg.qwen3-reranker-4b.rerank",
"query": "Поисковый запрос",
"documents": ["Документ 1", "Документ 2", "Документ 3"],
},
)
print(resp.json())

1.4.12 Перевод через DeepL

API_KEY = "***"
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = httpx.post(
f"{BASE_URL}/translate",
headers=headers,
json={
"model": "ain.deepl.translate",
"text": "Hello world",
"source_lang": "EN",
"target_lang": "RU",
},
)
print(resp.json())