Três dias depois de xingar interface de chat, cá estou eu buildando o FlowForm, uma ferramenta de formulário conversacional usando LLM. Eu sei da ironia. O que me fez tentar foi a estrutura que um formulário já tem e que falta num chat aberto.
O FlowForm pega um schema, com campos tipados e validação, e envolve em linguagem natural. O usuário acha que tá batendo papo, mas cada resposta vai pra um campo: nome no campo nome, email validado, telefone formatado. A LLM coleta dado estruturado com cara amigável; as decisões ficam no schema.
Tu define o schema do formulário em JSON. O FlowForm gera o prompt inicial, coleta respostas turno a turno, valida cada uma contra o schema e pede correção quando a validação falha. A LLM cuida de formular a conversa, e o schema determina o que é válido.
Buildei isso porque na Yooga a gente lida com onboarding de restaurante. O dono precisa preencher 30+ campos. CNPJ, dados bancários, categorias do cardápio, horário de funcionamento. Formulário tradicional é aquela muralha de input que faz o cara fechar a aba na hora. Chatbot puro ia alucinar metade dos dados. O FlowForm fica no meio termo.
O core é TypeScript e não depende de framework. A integração com LLM é plugável, com suporte a Claude API, OpenAI e modelo local. A validação usa Zod schema, com type safety ponta a ponta.
Os edge cases deram mais trabalho que a integração com LLM. Tem usuário que manda duas respostas numa mensagem só ou corrige uma resposta anterior. Outro viaja no assunto, ou cola um textão e espera que tu faça o parse. Cada caso precisa de estratégia; jogar tudo pra LLM resolver não dá conta.
Status atual: biblioteca core funcionando, adapters React e Vue em andamento, demo CLI disponível. Open source, MIT. Solto o link do repo quando arrumar a doc.
Continuo puto com chat UI substituindo interface que já funciona. Fiz o FlowForm pra formulário longo e chato que ninguém quer preencher. É nessa situação, com uma alternativa ruim, que a conversa faz sentido pra mim.