Работа с историей чата
Передача истори и чата позволяет GigaChat работать с результатами прошлых запросов пользователя. Когда вы переписываетесь с нейросетевой моделью в веб-интерфейсе, она автоматически учитывает историю чата.
Если для обмена сообщениями вы используете GigaChat API, историю чата нужно передавать явно в поле messages
запроса POST /chat/completions
.
Передвайте текст сообщений (поле content
) в кодировке UTF8.
Это позволит снизить расход токенов при обработке сообщения.
- GigaChat API
- Python
- TS/JS
Пример запроса с историей чата:
curl https://gigachat.devices.sberbank.ru/api/v1/chat/completions \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer access_token' \
-d '{
"model": "GigaChat",
"messages": [
{
"role": "user",
"content": "Когда уже ИИ захватит этот мир?"
},
{
"role": "assistant",
"content": "Пока что это не является неизбежным событием. Несмотря на то, что искусственный интеллект (ИИ) развивается быстрыми темпами и может выполнять сложные задачи все более эффективно, он по-прежнему ограничен в своих возможностях и не может заменить полностью человека во многих областях. Кроме того, существуют этические и правовые вопросы, связанные с использованием ИИ, которые необходимо учитывать при его разработке и внедрении."
},
{
"role": "user",
"content": "Думаешь, у нас еще есть шанс?"
}
],
}'
- gigachat
- langchain-gigachat
from gigachat import GigaChat
from gigachat.models import Chat, Messages, MessagesRole
with GigaChat(credentials="ключ_авторизации", 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)
from langchain_core.messages import HumanMessage, AIMessage
from langchain_gigachat.chat_models import GigaChat
giga = GigaChat(
credentials="ключ_авторизации",
verify_ssl_certs=False,
)
messages = [
HumanMessage(
content="Когда уже ИИ захватит этот мир?"
),
AIMessage(
content="Пока что это не является неизбежным событием. Несмотря на то, что искусственный интеллект (ИИ) развивается быстрыми темпами и может выполнять сложные задачи все более эффективно, он по-прежнему ограничен в своих возможностях и не может заменить полностью человека во многих областях. Кроме того, существуют этические и правовые вопросы, связанные с использованием ИИ, которые необходимо учитывать при его разработке и внедрении."
),
HumanMessage(
content="Думаешь, у нас еще есть шанс?"
)
]
response = giga.invoke(messages)
print(response.content)
import GigaChat from "gigachat";
const giga = new GigaChat({
credentials="ключ_авторизации",
});
const resp = await giga.chat({
messages: [
{
role: "user",
content: "Когда уже ИИ захватит этот мир?",
},
{
role: "assistant",
content:
"Пока что это не является неизбежным событием. Несмотря на то, что искусственный интеллект (ИИ) развивается быстрыми темпами и может выполнять сложные задачи все более эффективно, он по-прежнему ограничен в своих возможностях и не может заменить полностью человека во многих областях. Кроме того, существуют этические и правовые вопросы, связанные с использованием ИИ, которые необходимо учитывать при его разработке и внедрении.",
},
{
role: "user",
content: "Думаешь, у нас еще есть шанс?",
},
],
});
console.log(resp.choices[0]?.message.content);
Кэширование запросов
Вы можете использовать необязательный идентификатор сессии X-Session-ID
для кэширования контекста разговора с GigaChat.
Идентификатор передается в заголовке запроса и может содержать произвольную строку.
Если при получении запроса, модель находит в кэше данные о запросе с таким же идентификатором и частично совпадающим контекстом, то она не пересчитывает этот контекст.
Количество к эшированных токенов, которые не учитываются в расчете стоимости, содержится в поле precached_prompt_tokens
, в ответе на запрос POST /chat/completions
.
Кэширование позволяет повысить скорость ответа и снизить расходы на генерацию, благодаря тому, что модель тратит меньше токенов на обработку сообщений контекста с одинаковыми идентификаторами.
Подробнее о расчете стоимости — в разделе Подсчет токенов.
Кэширование может быть полезно для:
- разработки разговорных агентов, которые должны учитывать большой контекст для ведения диалога.
- создания ассистентов, которые помогают писать код. Например, вы можете закэшировать кодовую базу, которую модель должна будет учитывать при автодополнении.
- работы с большими документами.
- передачи в модель большого набора инструкций. Например, вы можете сохранить в кэше множество различных примеров желаемого результата работы модели.
- сохранения результатов вызовов функций, при многократном обращении к ним.
Примеры запросов с заголовком X-Session-ID
, в котором передан идентификатор в формате uuid4.
Добавление необязательных заголовков поддерживается только в Python-библиотеках GigaChat.
- GigaChat API
- Python
- TS/JS
Пример запроса с историей чата:
curl https://gigachat.devices.sberbank.ru/api/v1/chat/completions \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer access_token' \
-H 'X-Session-ID: dfa87a40-99a9-42c4-b810-6c7caa1e1e8b' \
-d '{
"model": "GigaChat",
"messages": [
{
"role": "user",
"content": "Запрос пользователя"
},
{
"role": "assistant",
"content": "Ответ модели"
},
{
"role": "user",
"content": "Запрос пользователя"
}
],
}'
- gigachat
- langchain-gigachat
import gigachat.context
from gigachat import GigaChat
headers = {
"X-Session-ID": "8324244b-7133-4d30-a328-31d8466e5502",
}
with GigaChat(
credentials="ключ_авторизации",
verify_ssl_certs=False
) as giga:
gigachat.context.session_id_cvar.set(headers.get("X-Session-ID"))
response = giga.chat("Какие факторы влияют на стоимость страховки на дом?")
print(response.choices[0].message.content)
import gigachat.context
from langchain_core.messages import HumanMessage, AIMessage
from langchain_gigachat.chat_models import GigaChat
headers = {
"X-Session-ID": "8324244b-7133-4d30-a328-31d8466e5502",
}
gigachat.context.session_id_cvar.set(headers.get("X-Session-ID"))
giga = GigaChat(
credentials="ключ_авторизации",
verify_ssl_certs=False
)
messages = [
HumanMessage(
content="Какие факторы влияют на стоимость страховки на дом?"
)
]
response = giga.invoke(messages)
print(response.content)
Чтобы явно задать модель, которая будет обрабатывать запросы, передайте необязательный параметр model
при инициализации GigaChat
. По умолчанию запросы предаются в модель GigaChat Lite.
Импорт объекта зависит от того, какую библиотеку вы используете.
import GigaChat from 'gigachat';
const giga = new GigaChat({
credentials: 'ключ_авторизации',
model: 'название_модели',
});