Работа с историей чата
Передача истории чата позволяет GigaChat работать с результатами прошлых запросов пользователя. Когда вы переписываетесь с нейросетевой моделью в веб-интерфейсе, она автоматически учитывает историю чата.
Если для обмена сообщениями вы используете GigaChat API, историю чата нужно передавать явно в поле messages
запроса POST /chat/completions
.
- GigaChat API
- Python
Пример запроса с историей чата:
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)
Кэширование запросов
Вы можете использовать необязательный идентификатор сессии X-Session-ID
для кэширования контекста разговора с GigaChat.
Идентификатор передается в заголовке запроса и может содержать произвольную строку.
Если при получении запроса, модель находит в кэше данные о запросе с таким же идентификатором и частично совпадающим контекстом, то она не пересчитывает этот контекст.
Такой подход позволяет снизить время на генерацию ответа.
Кэширование позволяет снизить расходы на генерацию, благодаря тому, что модель тратит меньше токенов на обработку сообщений контекста с одинаковыми идентификаторами.
Кэширование может быть полезно для:
- разработки разговорных агентов, которые должны учитывать большой контекст для ведения диалога.
- создания ассистентов, которые помогают писать код. Например, вы можете закэшировать кодовую базу, которую модель должна будет учитывать при автодополнении.
- работы с большими документами.
- передачи в модель большого набора инструкций. Например, вы можете сохранить в кэше множество различных примеров желаемого результата работы модели.
- сохранения результатов вызовов функций, при многократном обращении к ним.
Пример запроса с заголовком X-Session-ID
, в котором передан идентификатор в формате uuid4:
- GigaChat API
- Python
Пример запроса с историей чата:
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)