GigaChat – это генеративная языковая модель, созданная Сбером (аналог ChatGPT). Вы можете использовать ее в своих проектах для решения задач и ответа на возникающие вопросы. Разберёмся как использовать ее API и какие есть бесплатные лимиты.
Регистрация
Для начала нужно зарегестрироваться. Для этого переходим по ссылке и нажимаем “Войти” либо “Попробовать”:
Затем нам нужно будет войти по Сбер ID либо СберБизнесс ID:
Разница в том, что у вас будут разные тарифы и льготы.
Для личного пользования:
Для ИП и ЮрЛиц:
Токен – это такая единица измерения. Токен может быть символом, несколькими символами, кусочком слова или словом целиком. В среднем в одном токене 3—4 символа, включая пробелы, знаки препинания и специальные символы. Подробнее о тарифах читайте тут.
Также важное отличие в том, что для личного пользования у вас будет всего один поток. А несколько потоков могут приобрести только владельцы бизнесс-аккаунтов.
Затем вы попадёте на страницу личного кабинета:
Тут можно сразу перейти в документацию чтобы почитать о возможностях.
Но вы здесь для того чтобы я упростил задачу на пару шагов, поэтому приступаем.
Для начала нам нужно составить запросы. Выглядеть схема работы будет так:
Запрос на получение токена -> сохранение токена -> запрос к гигачат
Получение токена
Для получения токена нам нужен Client Secret – его получаем, нажав на “Создать новый”. Увидим такое окно:
Вам высветится Client Secret и данные авторизации – скопируйте их и сохраните куда-нибудь, потому что больше вы тут их не увидите.
Работать я буду в python, но схема одинаковая для всех систем.
import requests
def get_token():
url = "https://ngw.devices.sberbank.ru:9443/api/v2/oauth"
payload='scope=GIGACHAT_API_PERS'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json',
'RqUID': '<ВАШ Client Secret>',
'Authorization': 'Basic <ВАШИ Данные Авторизации>'
}
response = requests.request("POST", url, headers=headers, data=payload, verify='chain.pem')
return response.json()
Обратите внимание на verify='chain.pem'
– в документации об этом говорится вскользь и примеров нормальных нет. Но вам нужно скачать с госуслуг сертификат минцифры, чтобы запросы проходили нормально и соответственно указать путь к нему.
(Если вы под windows вам нужно будет просто объединить два файла в один)
Сделав запрос и получив токен, сохраните его и вы можете приступать к непосредственно работе с gigachat.
Запросы к gigachat
Для обращения напишем ещё функцию:
def get_answer(text, access_token):
payload = json.dumps({
"model": "GigaChat", #есть еще GigaChat-Pro (50к бесплатных) и GigaChat-Plus (платный)
"messages": [
{
"role": "user",
"content": text #ваш запрос
}
],
"temperature": 1,
"top_p": 0.1,
"n": 1,
"stream": False,
"max_tokens": 512, #максимальное кол-во использованных токенов
"repetition_penalty": 1
})
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': f'Bearer {access_token}' #токен доступа
}
response = requests.request("POST", url, headers=headers, data=payload, verify='chain.pem')
return response.json()
Все важное я прокомментировал в коде – тут мы уже получаем ответ на вопрос, вот в таком формате:
{
"choices": [
{
"message": {
"content": "Ответ GigaChat",
"role": "assistant"
},
"index": 0,
"finish_reason": "stop"
}
],
"created": 1714602175,
"model": "GigaChat:3.1.24.3",
"object": "chat.completion",
"usage": {
"prompt_tokens": 23,
"completion_tokens": 128,
"total_tokens": 151,
"system_tokens": 204
}
}
Создание изображений
Для того, чтобы генерировать изображения, используется та же языковая модель, но с доп сообщением (пример из доки):
def get_img_info(text, access_token):
payload = json.dumps({
"model": "GigaChat",
"messages": [
{
"role": "system",
"content": "Ты — Василий Кандинский"
},
{
"role": "user",
"content": text
}
],
"function_call": "auto"
})
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': f'Bearer {access_token}'
}
response = requests.request(
"POST", url, headers=headers, data=payload, verify='chain.pem')
return response.json()
(На базовой модели – изображения такие себе)
Также нам нужна функция скачивания изображения:
def get_img(fileid, access_token):
url = f"https://gigachat.devices.sberbank.ru/api/v1/files/{fileid}/content"
payload={}
headers = {
'Accept': 'application/jpg',
'Authorization': f'Bearer {access_token}'
}
response = requests.request("GET", url, headers=headers, data=payload, verify='chain.pem')
return response.content
Мы получаем ответ в виде текста + тега img – нам нужно вытащить именно тег img и то что у него в src. Для этого используем bs4:
answer = get_img_info(message_text, access_token)
answ = answer['choices'][0]['message']['content']
images = re.findall(r'', answ)
src = BeautifulSoup(image, 'html.parser').find('img').get('src')
with open(f"newimg.png", "wb+") as img_file:
img_file.write(get_img(src, access_token))
Итог
Сама модель – хуже GPT почти по всем фронтам, но хороша тем, что API работает без VPN и есть довольно много бесплатных запросов.
Теперь вы можете использовать api gigachat, встраивать его в ваши приложения, сайты и боты.
Я как раз написал бота в телеграм – просто для примера.
Также выложил код в GitVerse.
Связанные статьи: Бесплатный SSL в TimeWeb | Приложение из сайта (WebApp) | Монетизация телеграм-бота | Тёмная тема Safari |