Streaming
O LabsLLM fornece capacidades de streaming para processamento de respostas em tempo real dos modelos de IA. Este recurso é particularmente útil para requisições de longa duração ou quando você deseja mostrar o progresso aos usuários enquanto as respostas são geradas.
WARNING
Ao usar o provedor Google, o streaming não pode ser utilizado em conjunto com saída estruturada devido a limitações da API.
Uso Básico do Streaming
Você pode usar streaming para processar respostas conforme elas são geradas:
$chat = LabsLLM::text()
->using(new Google('SUA_CHAVE_API'))
->withSystemMessage('Você é um professor especialista em história. Você precisa criar uma lista de perguntas com 3 alternativas para cada pergunta, sendo uma correta e duas incorretas. A resposta correta deve ser a primeira alternativa.')
->executePromptStream('gere 3 perguntas');
foreach ($chat as $response) {
echo $response->response;
}
Streaming de Chat
$messages = MessagesBag::create([
Message::user('Me fale sobre computação quântica.')
]);
$chat = LabsLLM::text()
->using(new OpenAI('SUA_CHAVE_API', 'gpt-4o'))
->executeChatStream($messages);
foreach ($chat as $response) {
echo $response->response;
}
Como o Streaming Funciona
O streaming no LabsLLM funciona:
- Usando
executePromptStream()
em vez deexecutePrompt()
para habilitar o streaming - Processando respostas em chunks conforme chegam do modelo
- Tratando cada chunk da resposta separadamente
Isso é particularmente útil para:
- Geração de conteúdo longo
- Aplicações de chat em tempo real
- Indicadores de progresso para usuários
- Processamento eficiente de respostas grandes
Trabalhando com Chamadas de Função em Streams
Ao usar streaming com chamadas de função, você pode verificar chamadas de função em cada chunk:
foreach ($chat as $response) {
echo $response->response;
if ($response->isCalledFunction('get_current_host')) {
echo 'get_current_host_called:';
echo PHP_EOL;
echo json_encode($response->calledTools);
echo PHP_EOL;
}
if ($response->isCalledFunction('send_user_email')) {
echo 'send_user_email_called';
echo PHP_EOL;
echo json_encode($response->calledTools);
echo PHP_EOL;
}
}
Entendendo as Respostas do Stream
Cada chunk no stream contém um objeto de resposta com:
// O chunk atual de texto do modelo
echo $response->response;
// Informações sobre quaisquer funções chamadas neste chunk
if (!empty($response->calledTools)) {
// Tratar chamadas de função
}
// Verificar se uma função específica foi chamada
if ($response->isCalledFunction('nome_da_funcao')) {
// Tratar chamada de função específica
}
Para uma explicação detalhada da estrutura da resposta, veja o guia Objeto de Resposta da API.
Melhores Práticas
Tratamento de Erros
Sempre implemente tratamento de erros adequado para streams:
try {
foreach ($chat as $response) {
echo $response->response;
}
} catch (Exception $e) {
// Tratar erros de streaming
echo "Erro: " . $e->getMessage();
}
Gerenciamento de Timeout
Considere implementar timeouts para streams de longa duração:
$timeout = 30; // segundos
$startTime = time();
foreach ($chat as $response) {
if (time() - $startTime > $timeout) {
throw new Exception('Tempo limite do stream excedido');
}
echo $response->response;
}