Перейти к основному содержимому

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

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())