Skip to content

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:

php
$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

php
$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:

  1. Usando executePromptStream() em vez de executePrompt() para habilitar o streaming
  2. Processando respostas em chunks conforme chegam do modelo
  3. 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:

php
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:

php
// 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:

php
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:

php
$timeout = 30; // segundos
$startTime = time();

foreach ($chat as $response) {
    if (time() - $startTime > $timeout) {
        throw new Exception('Tempo limite do stream excedido');
    }
    echo $response->response;
}

Lançado sob a Licença MIT.