Demonstração do assistente de casa inteligente
Código da demonstração: um assistente de casa inteligente que usa a TypeSafe para avaliar pedidos do utilizador.
Vê-o em ação
Como funciona
Fan-out especulativo
O padrão principal aqui demonstrado é o fan-out especulativo. Cada pedido do utilizador é avaliado contra uma longa lista de perguntas, incluindo muitas que acabam por ser irrelevantes para a maioria dos pedidos.
Consideremos o seguinte pedido do utilizador:
“Apaga todas as luzes da casa”
Este é um pedido muito simples, e o nosso código só precisa de considerar as respostas às seguintes perguntas:
- “Que categoria de pedido é esta?” (comando de casa inteligente)
- “A que domínio se destina este pedido?” (casa inteira)
- “A que tipo de dispositivo se destina este pedido?” (luzes)
- “Que ação deve ser executada sobre as luzes?” (apagar)
Repara que a última pergunta está escrita partindo do princípio de que o utilizador está a emitir um comando sobre as luzes, e fazemo-la antes de sabermos o que o utilizador está realmente a pedir. É a isto que chamamos uma “pergunta especulativa”: fazemo-la antes mesmo de sabermos se é relevante, o que nos permite avaliar todas as perguntas em paralelo e contar com o código para filtrar os resultados irrelevantes depois. Este é um padrão fundamental para construir sistemas capazes de lidar com uma grande variedade de pedidos do utilizador com um único conjunto de perguntas.
A forma errada: chamadas sequenciais à API
A forma errada de o fazer seria separar as perguntas em várias chamadas à API, esperando para fazer as perguntas só quando tiveres a certeza de que precisas da resposta:
- “Que categoria de pedido é esta?” (comando de casa inteligente)
Depois, só quando souberes que é um comando de casa inteligente:
- “A que domínio se destina este pedido?” (casa inteira)
- “A que tipo de dispositivo se destina este pedido?” (luzes)
Depois, só quando souberes que se destina às luzes:
- “Que ação deve ser executada sobre as luzes?” (apagar)
Esta abordagem otimiza para um número mínimo de perguntas, mas acaba por ser muito mais lenta e mais cara do que agrupar todas as perguntas numa única chamada inicial à API.
Combinar a TypeSafe com LLMs
Esta demonstração também mostra como a TypeSafe pode ser combinada com LLMs para lidar com um sistema que por vezes exige uma etapa de geração de texto:
Dividir um pedido composto do utilizador: Uma das perguntas nesta demonstração é uma pergunta Noul que identifica se o pedido do utilizador pede mais de uma ação distinta. Se for esse o caso, o sistema usa um LLM para dividir o pedido numa lista de comandos atómicos. Os pedidos divididos são depois avaliados individualmente pela TypeSafe.
Recorrer a um LLM conversacional: Quando a TypeSafe determina que o pedido do utilizador é um pedido de informação geral ou de conversa, o sistema chama um LLM para gerar uma resposta em texto livre. Isto permite que um sistema interativo trate pedidos com um comportamento determinístico conhecido de forma rápida e económica, mantendo ainda a flexibilidade proporcionada por um LLM generativo quando é necessária. A resposta inicial da TypeSafe é tão rápida em comparação com a resposta do LLM que acrescenta uma latência insignificante ao sistema no seu todo.
Executa-o tu mesmo
Esta demonstração é uma aplicação simples de página única em Vite/React que usa a API da TypeSafe para avaliar pedidos do utilizador. O código-fonte completo estará disponível no GitHub no lançamento. O seu README inclui instruções para executar a demonstração localmente e uma visão geral de que partes do código-fonte são responsáveis por que partes da demonstração.