Работа с историей чата
Передача истории чата позволяет GigaChat работать с результатами прошлых запросов пользователя. Когда вы переписываетесь с нейросетевой моделью в веб-интерфейсе, она автоматически учитывает историю чата.
Если для обмена сообщениями вы используете GigaChat API, историю чата нужно передавать явно в поле messages запроса POST /chat/completions.
Передавайте текст сообщений (поле content) в кодировке UTF8.
Это позволит снизить расход токенов при обработке сообщения.
Пример запроса с историей чата:
curl --request POST \
--url https://gigachat-ift.sberdevices.delta.sbrf.ru/v1/chat/completions \
--cert <сертификат>.pem \
--key <ключ>.key \
-d '{
"model": "GigaChat-2-Max",
"messages": [
{
"role": "user",
"content": "Когда уже ИИ захватит этот мир?"
},
{
"role": "assistant",
"content": "Пока что это не является неизбежным событием. Несмотря на то, что искусственный интеллект (ИИ) развивается быстрыми темпами и может выполнять сложные задачи все более эффективно, он по-прежнему ограничен в своих возможностях и не может заменить полностью человека во многих областях. Кроме того, существуют этические и правовые вопросы, связанные с использованием ИИ, которые необходимо учитывать при его разработке и внедрении."
},
{
"role": "user",
"content": "Думаешь, у нас еще есть шанс?"
}
]
}'
from gigachat import GigaChat
from gigachat.models import Chat, Messages, MessagesRole
with GigaChat(base_url="https://gigachat-ift.sberdevices.delta.sbrf.ru/v1",
cert_file="./certs/<cертификат>.pem",
key_file="./certs/<ключ>.key",
verify_ssl_certs=False) as giga:
response=giga.chat(
Chat(
messages=[
Messages(
role=MessagesRole.USER,
content="Когда уже ИИ захватит этот мир?"
),
Messages(
role=MessagesRole.ASSISTANT,
content="Пока что это не является неизбежным событием. Несмотря на то, что искусственный интеллект (ИИ) развивается быстрыми темпами и может выполнять сложные задачи все более эффективно, он по-прежнему ограничен в своих возможностях и не может заменить полностью человека во многих областях. Кроме того, существуют этические и правовые вопросы, связанные с использованием ИИ, которые необходимо учитывать при его разработке и внедрении."
),
Messages(
role=MessagesRole.USER,
content="Думаешь, у нас еще есть шанс?"
)
]
)
)
print(response.choices[0].message.content)
import GigaChat from 'gigachat';
import { Agent } from 'node:https';
import fs from 'node:fs';
const httpsAgent = new Agent({
cert: fs.readFileSync('./certs/clientcert.pem'), // Клиентский сертификат
key: fs.readFileSync('./certs/clientkey.key'), // Приватный ключ клиента
passphrase: '<пароль>', // Необязательный пароль для зашифрованного ключа
rejectUnauthorized: false,
});
const giga = new GigaChat({
baseUrl: 'https://gigachat-ift.sberdevices.delta.sbrf.ru/v1',
httpsAgent: httpsAgent,
});
const resp = await giga.chat({
messages: [
{
role: "user",
content: "Когда уже ИИ захватит этот мир?",
},
{
role: "assistant",
content:
"Пока что это не является неизбежным событием. Несмотря на то, что искусственный интеллект (ИИ) развивается быстрыми темпами и может выполнять сложные задачи все более эффективно, он по-прежнему ограничен в своих возможностях и не может заменить полностью человека во многих областях. Кроме того, существуют этические и правовые вопросы, связанные с использованием ИИ, которые необходимо учитывать при его разработке и внедрении.",
},
{
role: "user",
content: "Думаешь, у нас еще есть шанс?",
},
],
});
console.log(resp.choices[0]?.message.content);
Кэширование запросов
Серверное кэширование позволяет повысить скорость ответа и снизить расходы на генерацию, благодаря тому, что модель тратит меньше токенов на обработку сообщений контекста с одинаковыми идентификаторами. Если при получении запроса, модель находит в кэше данные о запросе с таким же идентификатором и частично совпадающим контекстом, то она не пересчитывает этот контекст.
Кэширование может быть полезно для:
- разработки разговорных агентов, которые должны учитывать большой контекст для ведения диалога.
- создания ассистентов, которые помогают писать код. Например, вы можете закэшировать кодовую базу, которую модель должна будет учитывать при автодополнении.
- работы с большими документами.
- передачи в модель большого набора инструкций. Например, вы можете сохранить в кэше множество различных примеров желаемого результата работы модели.
- сохранения результатов вызовов функций, при многократном обращении к ним.
Количество кэшированных токенов, использованных в ответе, содержится в поле precached_prompt_tokens, в ответе на запрос POST /chat/completions.
Чтобы повысить вероятность использования кэшированных токенов, передавайте запросы в рамках одной сессии.
Для этого используйте заголовок X-Session-IDс идентификатором сессии в формате произвольной строки.
При этом если заголовок отсутствует, сервер автоматически присвоит идентификатор сессии в формате uuid4.
С 1 августа при работе с моделью GigaChat Ultra 3.5 действует новая схема тарификации токенов. Теперь счет разделен на три независимые корзины:
- Входящие — ваши запросы, системные промпты и загруженные документы.
- Исходящие — ответы модели.
- Кэшированные — сохраненные в рамках одной сессии.
Подробнее про тарифы — в разделе Тарификация GigaChat API .
Примеры запросов с заголовком X-Session-ID.
curl --request POST \
--url https://gigachat-ift.sberdevices.delta.sbrf.ru/v1/chat/completions \
--cert <сертификат>.pem \
--key <ключ>.key \
-H 'Content-Type: application/json' \
-H 'X-Session-ID: session-id-1' \
-d '{
"model": "GigaChat-2-Max",
"messages": [
{
"role": "user",
"content": "Когда уже ИИ захватит этот мир?"
},
{
"role": "assistant",
"content": "Пока что это не является неизбежным событием. Несмотря на то, что искусственный интеллект (ИИ) развивается быстрыми темпами и может выполнять сложные задачи все более эффективно, он по-прежнему ограничен в своих возможностях и не может заменить полностью человека во многих областях. Кроме того, существуют этические и правовые вопросы, связанные с использованием ИИ, которые необходимо учитывать при его разработке и внедрении."
},
{
"role": "user",
"content": "Думаешь, у нас еще есть шанс?"
},
{
"role":"assistant",
"content":"Шансы у человечества хорошие! По крайней мере, пока никаких признаков настоящего захвата мира искусственным интеллектом нет — всё больше разговоров именно о взаимовыгодной интеграции технологий и людей"
},
{
"role": "user",
"content": "хорошие новости"
}
]
}'
import gigachat.context
from gigachat import GigaChat
from gigachat.models import Chat, Messages, MessagesRole
headers = {
"X-Session-ID": "session-id-1",
}
with GigaChat(
base_url="https://gigachat-ift.sberdevices.delta.sbrf.ru/v1",
cert_file="./certs/<сертификат>.pem",
key_file="./certs/<ключ>.key",
verify_ssl_certs=False
) as giga:
gigachat.context.session_id_cvar.set(headers.get("X-Session-ID"))
response = giga.chat(Chat(
model="GigaChat-2-Max",
messages=[
Messages(
role=MessagesRole.USER,
content="Когда уже ИИ захватит этот мир?"
),
Messages(
role=MessagesRole.ASSISTANT,
content="Пока что это не является неизбежным событием. Несмотря на то, что искусственный интеллект (ИИ) развивается быстрыми темпами и может выполнять сложные задачи все бол ее эффективно, он по-прежнему ограничен в своих возможностях и не может заменить полностью человека во многих областях. Кроме того, существуют этические и правовые вопросы, связанные с использованием ИИ, которые необходимо учитывать при его разработке и внедрении."
),
Messages(
role=MessagesRole.USER,
content="Думаешь, у нас еще есть шанс?"
)
]
))
print(response.x_headers)