Обновлено 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 python3GigaChat 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/transcriptions1.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())