Потоковая генерация токенов
Режим получения потока токенов поможет обрабатывать ответ GigaChat по мере его генерации.
При включении этого режима GigaChat передает токены в потоке коротких сообщений, формат которых соответствует протоколу server-sent events
. Последним в потоке будет событие data: [DONE]
.
- GigaChat API
- Python
Вы можете включить потоковую генерацию токенов.
Для этого в запросе POST /chat/completions
нужно передать параметр "stream": true
.
Пример запроса:
curl https://gigachat.devices.sberbank.ru/api/v1/chat/completions \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer Token ***' \
-d '{
"model": "GigaChat",
"messages": [{"role": "user", "content": "Say this is a test!"}],
"stream": true
}'
Пример потока событий:
data:
{
"choices":
[
{
"delta":
{
"content": "GigaСhat",
"role": "assistant"
},
"index": 0
}
],
"created": 1683034756,
"model": "GigaChat",
"object": "chat.completion"
}
data:
{
"choices":
[
{
"delta":
{
"content": " спешит"
},
"index": 0
}
],
"created": 1683034756,
"model": "GigaChat",
"object": "chat.completion"
}
data:
{
"choices":
[
{
"delta":
{
"content": " на"
},
"index": 0
}
],
"created": 1683034756,
"model": "GigaChat",
"object": "chat.completion"
}
data:
{
"choices":
[
{
"delta":
{
"content": " помощь"
},
"index": 0
}
],
"created": 1683034756,
"model": "GigaChat",
"object": "chat.completion"
}
data: [DONE]
Запуск потоковой генерации в Python-библиотеках gigachat и langchain-gigachat отличается.
- gigachat
- langchain-gigachat
Для запуска потоковой генерации с помощью библиотеки gigachat, используйте метод stream()
:
from gigachat import GigaChat
for chunk in GigaChat(credentials="ключ_авторизации", verify_ssl_certs=False).stream("Напиши смешной рассказ про кота и слона."):
print(chunk.choices[0].delta.content, end="", flush=True)
Для запуска потоковой генерации токенов с помощью библиотеки langchain-gigachat нужно унаследоваться от класса BaseCallbackHandler
и инициализировать модуль GigaChat в режиме обработки потока токенов streaming=True
:
from langchain.schema import HumanMessage
from langchain.callbacks.base import BaseCallbackHandler
from langchain_gigachat.chat_models import GigaChat
class StreamHandler(BaseCallbackHandler):
def __init__(self, initial_text=""):
pass
def on_llm_new_token(self, token: str, **kwargs) -> None:
print(f"{token} -", end="", flush=True)
chat = GigaChat(credentials='ключ_авторизации', streaming=True, callbacks=[StreamHandler()])
chat([HumanMessage(content="Напиши краткое содержание романа «Евгений Онегин»")])