Создание изображений
GigaChat API вернет изобра жение, если в запросе на генерацию POST /chat/completions
получит соответствующее сообщение, например: «Нарисуй розового кота».
Изображения генерируются в бинарном виде в формате JPG с помощью встроенной функции text2image.
В ответ GigaChat возвращает идентификатор созданного изображения, которое можно скачать с помощью запроса POST /files/:file_id/content
.
Для создания изображения в запросе нужно передать параметр "function_call": "auto"
, с помощью которого модель определяет необходимость вызова функции text2image.
При создании изображений с помощью встроенной функции модель возвращает ответ с результатом "finish_reason": "stop"
.
Вы можете стилизовать изображения с помощью системного промпта.
- GigaChat API
- Python
- TS/JS
Пример запроса на создание изображения:
curl -L -X POST 'https://gigachat.devices.sberbank.ru/api/v1/chat/completions' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <токен_доступа>' \
--data-raw '{
"model": "GigaChat",
"messages": [
{
"role": "system",
"content": "Ты — Василий Кандинский"
},
{
"role": "user",
"content": "Нарисуй розового кота"
}
],
"function_call": "auto"
}'
Пример ответа:
{
"choices": [
{
"message": {
"content": "Запускаю генерацию изображения. Ожидайте результат <img src=\"b28fbd4f-105a-43e0-ba5a-2faa80b1f43c\" fuse=\"true\"/> - вот розовый кот, который у меня получился.",
"role": "assistant"
},
"index": 0,
"finish_reason": "stop"
}
],
"created": 1716367703,
"model": "GigaChat:3.1.25.3",
"object": "chat.completion",
"usage": {
"prompt_tokens": 372,
"completion_tokens": 48,
"total_tokens": 420
}
}
Подробнее о функциях — в разделе Работа с функциями.
from gigachat import GigaChat
from gigachat.models import Chat, Messages, MessagesRole
giga = GigaChat(
credentials="ключ_авторизации",
)
payload = Chat(
messages=[
Messages(
role=MessagesRole.SYSTEM,
content="Ты — Василий Кандинский"
),
Messages(
role=MessagesRole.USER,
content="Нарису й розового кота"
)
],
function_call="auto",
)
response = giga.chat(payload)
print(response.choices[0].message.content)
Пример ответа:
<img src="27055233-d11d-4bab-af8e-8ce1b6b33bb0" fuse="true"/>
import { GigaChat } from 'gigachat';
const giga = new GigaChat({
credentials: 'ключ_авторизации',
});
const resp = await giga.chat({
messages: [
{
"role": "system",
"content": "Ты — Василий Кандинский"
},
{
role: "user",
content: "Нарисуй розового кота",
},
],
function_call: 'auto',
});
console.log(resp.choices[0]?.message.content);
Пример ответа:
<img src="27055233-d11d-4bab-af8e-8ce1b6b33bb0" fuse="true"/>
Скачивание изображения
Ответ модели будет содержать идентификатор получившегося изображения в формате uuid4
.
Идентификатор передается в поле message.content
, в теге <img>
, в атрибуте src
:
{
"message": {
"content": "<img src=\"a598ae3d-d3eb-454e-a8bf-0848193a603e\" fuse=\"true\"/>",
"role": "assistant"
},
"index": 0,
"finish_reason": "stop"
}
Для скачивания изображения передайте полученный идентификатор в запросе GET /files/{file_id}/content
:
- cURL
- Python
- TS/JS
- Postman
curl -L -X GET 'https://gigachat.devices.sberbank.ru/api/v1/files/идентификатор_изображения/content' -o "<имя_файла>.jpg" \
-H 'Accept: application/jpg' \
-H 'Authorization: Bearer <токен_доступа>'
Если запрос на создание изображения содержал заголовок X-Client-ID
, то такой же заголовок нужно передавать в запросе на скачивание файла.
curl -L -X GET 'https://gigachat.devices.sberbank.ru/api/v1/files/<идентификатор_изображения>/content' -o "<имя_файла>.jpg" \
-H 'Accept: application/jpg' \
-H 'X-Client-ID: <идентификатор_пользователя>' \
-H 'Authorization: Bearer <токен_доступа>'
Чтобы извлечь идентификатор созданного изображения вы можете использовать Python-библиотеку Beautiful Soup.
import base64
from gigachat import GigaChat
from gigachat.models import Image, Chat, Messages, MessagesRole
from bs4 import BeautifulSoup
giga = GigaChat(
credentials="ключ_авторизации",
)
payload = Chat(
messages=[
Messages(
role=MessagesRole.SYSTEM,
content="Ты — Василий Кандинский"
),
Messages(
role=MessagesRole.USER,
content="Нарисуй розового кота"
)
],
function_call="auto",
)
response = giga.chat(payload).choices[0].message.content
# Получение идентификатора изоборажения из ответа модели
# с помощью библиотеки BeautifulSoup
file_id = BeautifulSoup(response, "html.parser").find('img').get("src")
image = giga.get_image(file_id)
# Сохранение изображения в файл
with open('image.jpg', mode="wb") as fd:
fd.write(base64.b64decode(image.content))
Для получения изображения по идентификатору вы можете использовать методы detectImage()
и getImage()
, доступные в JavaScript SDK.
import { GigaChat, detectImage } from 'gigachat';
import * as fs from 'fs';
const giga = new GigaChat({
credentials: 'ключ_авторизации',
});
const resp = await giga.chat({
messages: [
{
"role": "system",
"content": "Ты — Василий Кандинский"
},
{
role: "user",
content: "Нарисуй розового кота",
},
],
function_call: 'auto',
});
// Получение изображения по идентификатору
const detectedImage = detectImage(resp.choices[0]?.message.content ?? '');
const image = await giga.getImage(detectedImage.uuid);
// Сохранение изображения в файл
fs.writeFile('generated_image.jpg', image.content, 'binary', err => {
if (err) {
console.error(err);
} else {
console.log('Файл сохранен успешно');
}
});
Если вы используете коллекцию запросов Postman, вы можете сохранить ответ на запрос GET /files/{file_id}/content
в файл с помощью опции Save response to file.
Ответ на запрос будет содержать бинарное представление файла в формате JPG.