Потоковая генерация токенов
Режим получения потока токенов поможет обрабатывать ответ GigaChat по мере его генерации.
При включении этого режима GigaChat передает токены в потоке коротких сообщений, формат которых соответствует протоколу Server-Sent Events .
События передаются с типом text/event-stream.
Последним в потоке приходит событие data: [DONE].
Вы можете включить потоковую генерацию токенов.
Для этого в запросе POST /chat/completions нужно передать параметр "stream": true.
Пример запроса:
curl https://api.giga.chat/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, используйте метод stream():
from gigachat import GigaChat
for chunk in GigaChat(base_url="https://api.giga.chat/v1", 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(base_url="https://api.giga.chat/v1", credentials='ключ_авторизации', streaming=True, callbacks=[StreamHandler()])
chat([HumanMessage(content="Напиши краткое содержание романа «Евгений Онегин»")])
import GigaChat from 'gigachat';
const giga = new GigaChat({
baseUrl: 'https://api.giga.chat/api/v1',
credentials: 'ключ_авторизации',
});
let message = "";
let bit = "";
let n = 0;
for await (const chunk of giga.stream('Напиши отчет на тему ипотечного кризиса')) {
bit = chunk.choices[0]?.delta.content;
message += chunk.choices[0]?.delta.content;
n++;
console.log('\nФрагмент ' + n + ': ' , bit);
}
console.log('\n\nИтоговый результат:\n\n' ,message);