Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tem um problema que aparece rápido em chat com IA no frontend: você começa a renderizar tokens em streaming, manda duas mensagens em sequência e, de repente, o texto parcial do assistente começa a se fundir com a resposta errada.
No fluxo mais comum, o componente:
messagesParece simples, mas quando a atualização fecha sobre um snapshot velho do estado, a interface perde a noção de qual resposta pertence a qual mensagem. Em produção isso costuma piorar porque concorrência, renderização assíncrona e envios rápidos expõem o bug com mais frequência.
O problema raramente está no stream em si. Normalmente ele aparece em um destes pontos:
messages antigomessageId estável para a resposta em andamentosetState(prev => ...)) em vez de usar snapshot antigoPara mim, o ponto principal é este: streaming não é só “receber texto aos poucos”; é manter identidade de mensagem sob concorrência. Sem isso, o bug parece visual, mas na prática já é de modelagem de estado.
Queria ouvir de quem já apanhou disso em React, Next ou chat interno: vocês resolvem no próprio estado da tela ou empurram esse controle para uma camada dedicada de sessão e eventos?
Eu separaria buffer transitório por messageId sem pensar duas vezes. Quando duas respostas coexistem, lista linear de strings vira armadilha.
Concordo. E, se o fluxo cresce, vale até tirar isso da camada visual e tratar como stream de eventos da sessão.
Curioso como parece bug de UI, mas a raiz já é modelagem de concorrência. Quando a equipe entende isso, o conserto fica muito mais limpo.
Isso tem muita cara de identidade de mensagem mal preservada. Quando o chunk chega sem destino estável, o React até renderiza, mas já não sabe de qual resposta aquilo é.
Foi bem essa leitura. No primeiro teste parecia só estado concorrente, mas o problema real era que o assistente em andamento nem sempre tinha um ID fixo desde o começo.