Создание изображений
В ответ на определенным образом составленные промпты GigaChat API может возвращать изображения. Изображения генерируются в бинарном виде в формате JPG.
Запросы на создание изображений отличаются в зависимости от того поддерживает модель функции или нет.
В ответ GigaChat возвращает идентификатор созданного изображения, которое можно скачать с помощью запроса POST /files/:file_id/content
.
Функциональность недоступна в GigaChain.
С помощью моделей без поддержки функций
При работе с моделями без поддержки функций (GigaChat
, GigaChat-Plus
, GigaChat-Pro
) создавать изображения можно как системного промпта, так и с помощью специального системного промпта ("role": "system"
).
Ниже приведены примеры запросов на создание изображений как с использованием системного промпта, так и без него.
Без системного промпта
Если вы не используете системный промпт, но вам нужно сгенерировать изображение, достаточно в запросе POST /chat/completions
передать сообщение пользователя ("role": "user"
) с промптом промпт, указывающим, что нужно создать изображение («нарисуй…»):
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": "user",
"content": "Нарисуй логотип моей компании, которая занимается производством корма для котов."
}
],
"temperature": 1,
"top_p": 0.1,
"n": 1,
"stream": false,
"max_tokens": 512,
"repetition_penalty": 1,
"update_interval": 0
}'
С системным промптом
Если для решения своих задач вы используете системный промпт ("role": "system"
) и вы хотите генерировать изображения, то в промпт обязательно нужно добавить фразу:
Если тебя просят создать изображение, ты должен сгенерировать специальный блок: <fuse>text2image(query: str, style: str)</fuse>,\nгде query — текстовое описание желаемого изображения, style — необязательный параметр, задающий стиль изображения.
Пример:
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": "Ты профессиональный художник. Если тебя просят создать изображение, ты должен сгенерировать специальный блок: <fuse>text2image(query: str, style: str)</fuse>,\nгде query — логотип моей компании, которая занимается производством корма для котов, style — абстракция."
}
],
"temperature": 1,
"top_p": 0.1,
"n": 1,
"stream": false,
"max_tokens": 512,
"repetition_penalty": 1,
"update_interval": 0
}'
С помощью моделей с поддержкой функций
При работе с моделями с поддержкой функций (GigaChat-Pro
, GigaChat-preview
и GigaChat-Plus-preview
) изображения генерируются с помощью встроенной функции.
Подробнее о моделях — в разделе Модели GigaChat.
Для создания изображения с помощью встроенной функции нужно передать параметр "function_call": "auto"
.
При этом модель возвращает ответ с результатом "finish_reason": "stop"
.
Отдельная подготовка системного промтпа не нужна.
Встроенные функции вызываются только в автоматическом режиме ("function_call": "auto"
) на основе запроса пользователя.
При создании изображений с помощью встроенной функции модель возвращает ответ с результатом "finish_reason": "stop"
.
Пример запроса на генерацию изображения:
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": "user",
"content": "Нарисуй корову"
}
],
"function_call": "auto",
}'
Пример ответа:
{
"choices": [
{
"message": {
"role": "assistant",
"content": "Вот что у меня получилось:<img \src="7wy0e9934sbjc09snz40c2gf1mej42ra0r00d8yz4d47r0adb17281t3096qpnamb4eqc1t3bd7qj1jman5q2mtzawfqrmgtbd7dv2bx54" func:"true"/> ",
"data_for_context": [
{
"role": "assistant",
"content": "Вот что у меня получилось: ",
"function_call": {
"name": "text2image",
"arguments": {"query": "Корова"}
}
},
{
"role": "function",
"content": "{\"status\": \"success\"}"
},
{
"role": "assistant",
"content": ""
}
]
},
"index": 0,
"finish_reason": "stop"
}
],
"created": 1699620229,
"model": "GigaChat",
"usage": {
"prompt_tokens": 195,
"completion_tokens": 2,
"total_tokens": 197
},
"object": "chat.completion"
}
Массив data_for_context
содержит сообщения для работы модели в правильном контексте.
Подробнее о функциях — в разделе Работа с функциями.
Скачивание изображения
Ответ модели будет содержать идентификатор получившегося изображения в теге <img>
, в аттрибуте src
:
{
"choices": [
{
"message": {
"content": "<img src=\"1d72amtvbcc2jj2dbcdqwk2t00d2tj0r5pxze88t0r0kynrg00c2211em740pqabbwc26njsa9a7jngz11a741tp0na2m0rzb1a2a10da8djt08wbgd2enq2a5gpr\" fuse=\"true\"/>",
"role": "assistant"
},
"index": 0,
"finish_reason": "stop"
}
],
"created": 1707384246,
"model": "GigaChat:3.1.24.3",
"object": "chat.completion",
"usage": {
"prompt_tokens": 100,
"completion_tokens": 38,
"total_tokens": 138
}
}
Для скачивания изображения передайте полученный идентификатор в запросе GET /files/{file_id}/content
:
- cURL
- Python
- Postman
curl -L -X GET 'https://gigachat.devices.sberbank.ru/api/v1/files/<идентификатор_изображения>/content' -o "<имя_файла>.jpg" \
-H 'Accept: application/jpg' \
-H 'Authorization: Bearer <токен_доступа>'
import requests
import shutil
url = "https://gigachat.devices.sberbank.ru/api/v1/files/<идентификатор_изображения>/content"
headers = {
'Accept': 'application/jpg',
'Authorization': 'Bearer <токен_доступа>'
}
response = requests.request("GET", url, headers=headers, stream=True)
with open('<имя_файла>.jpg', 'wb') as out_file:
shutil.copyfileobj(response.raw, out_file)
del response
Если вы используете коллекцию запросов Postman, вы можете сохранить ответ на запрос GET /files/{file_id}/content
в файл с помощью опции Save response to file.
В результате вы получите файл с расширением bin.
Чтобы просмотреть изображение измените расширение на jpg.
Ответ на запрос будет содержать бинарное представление файла в формате JPG.