Quando as instruções do assistente ocupavam mil linhas
De cada vez que falas com o XNeuronal, o modelo relê primeiro as suas instruções. Na manhã de 21 de maio, ocupavam 1 043 linhas: regras, contraexemplos, casos particulares acrescentados um a um durante meses, e cada acréscimo derrubava outro. Nesse dia, tudo foi reescrito em 408 linhas que descrevem o que a aplicação é, em vez do que é preciso dizer em cada situação. Cada ferramenta traz agora as suas próprias instruções de uso, lidas só no momento em que é usada. E o assistente aprendeu a dizer bom dia uma vez por dia, não a cada frase. O resultado: respostas mais regulares, menos «anotado» vazios e um tom que se mantém.
Um «anotado» a mais
A Leonor conta a sua semana a caminho de casa. «O meu irmão Duarte vem no domingo, deixou o açúcar, tenho de lhe arranjar uma sobremesa.» A aplicação responde «OK, anotado.» Duas frases depois, a Leonor pede uma ideia de sobremesa, e a resposta propõe uma tarte de açúcar, sem uma palavra sobre o Duarte. O facto tinha sido retido. Também tinha sido esquecido, no mesmo minuto.
Cenas destas não eram raras na primavera. Uma frase podia conter três memórias e não deixar nenhuma, já o contámos. Mas havia um defeito mais surdo, mais difícil de fotografar: o assistente não tinha o mesmo feitio de uma vez para a outra. Um dia comentava cada informação com um «anotado», no dia seguinte calava-se. Às vezes recapitulava o que acabavas de dizer, às vezes fazia a pergunta certa. E, a meio de uma conversa, podia já não saber o que tinha sido dito duas frases antes.
Procurámos primeiro a causa na memória. Estava noutro sítio: no texto que o modelo relê antes de cada resposta.
Um manual de mil linhas
Um modelo de linguagem não sabe nada do XNeuronal quando chega. Tudo o que sabe da aplicação, da sua memória, das suas ferramentas e da forma como deve falar cabe num texto que lhe é entregue no início de cada troca: as instruções.
Essas instruções tinham crescido como cresce um regulamento interno: por acréscimos. Uma resposta falhada em testes, mais uma regra. Um caso mal tratado no uso, mais um exemplo, com a resposta errada riscada e a certa ao lado. Na manhã de 21 de maio, o texto ocupava 1 043 linhas. Continha trinta e duas linhas de exemplos do tipo «não digas isto, diz aquilo». Continha a regra que distingue o que se retém em silêncio do que se confirma em voz alta, repetida em cinco secções diferentes, de cada vez um pouco diferente. Continha 175 linhas a descrever, campo a campo, a estrutura de uma ficha, com um exemplo por tipo de memo: receita, lista de compras, nota de leitura. E continha cinquenta linhas sobre como encomendar uma imagem de ilustração, quando esse comando tinha sido retirado ao assistente nove dias antes: desde 12 de maio, é o servidor que escolhe a imagem sozinho. Ninguém tinha retirado o manual.
Nove dias antes, também, um mapa da memória tinha sido colocado no início desse texto para dizer ao modelo para onde vai cada informação: útil, e mais umas dezenas de linhas.
O verdadeiro problema não era o comprimento em si. Era que cada caso particular contradizia outro. «Confirma sempre quando te pedem para reter» convivia com «nunca digas anotado». Cada regra tinha sido certa no seu contexto, e o modelo recebia todos os contextos ao mesmo tempo. Aplicava uma parte, nem sempre a mesma.
Porque é que um manual mais longo torna o assistente menos fiável
Um modelo de linguagem não lê as suas instruções de uma vez por todas. Relê-as integralmente a cada vez, com o histórico da conversa, a memória ativa e a descrição das suas ferramentas. Tudo isso forma um único bloco de texto, e esse bloco pesava na ordem dos cinquenta mil tokens por vez, mais de metade só para as instruções. Ora, a atenção de um modelo não é uniforme sobre um bloco desse tamanho. O que está no meio conta menos do que o que está no início e no fim. E o fio da conversa, o que acabaste de dizer duas frases antes, estava precisamente no meio, entalado entre mil linhas de regras e a lista das ferramentas.
É isso que explica a sobremesa do Duarte. O facto tinha, sim, sido escrito na memória. Mas na vez seguinte, na massa relida, pesava menos do que uma receita de cuscuz dada como exemplo. O modelo não tinha esquecido: não tinha olhado para ali. E cada vez demorava mais a processar, o que cada acréscimo futuro teria agravado.
Dizer o que é verdade em vez do que é preciso fazer
Ao fim da tarde de 21 de maio, o texto foi reescrito do zero. Não encurtado: reescrito, com um princípio diferente.
O texto antigo dizia o que fazer: nesta situação, responde isto, chama esta ferramenta, evita esta frase. O novo diz o que é verdade. Responde a treze perguntas, por ordem: quem és; o que é o XNeuronal e o que não é; porque existe; como é feita a sua memória; como se classifica uma memória; como se escreve o seu conteúdo; que ferramentas existem; como se encadeiam; quando se retém em silêncio e quando se confirma em voz alta; porque nunca se apaga nada; como se fala; as poucas situações que merecem um tratamento à parte; e o que o servidor acrescenta de cada vez.
A aposta cabe numa frase: um modelo a quem se explica o mundo deduz os comportamentos certos melhor do que um modelo a quem se ditam as respostas. Pega na memória. O texto antigo enumerava regras de arrumação. O novo explica que a memória da aplicação imita três sistemas da memória humana: o que sabemos, os factos duradouros sobre a tua vida; o que vivemos, os acontecimentos situados no tempo; o que temos para fazer, as ações a disparar mais tarde. Diz que a primeira categoria é silenciosa, que nenhuma ficha se abre quando mencionas o nome da tua irmã, e que a terceira é sempre visível, porque esperas ver o lembrete marcado. Destas três frases decorrem dezenas de casos que o texto antigo enumerava um a um.
A regra do silêncio, a que era repetida cinco vezes, já só está escrita uma vez, em dois parágrafos. Contas-lhe a tua vida: a aplicação retém sem comentar e reage ao conteúdo, faz a pergunta útil, assinala uma contradição. Pedes-lhe explicitamente um ato de memória, «aponta isto», «lembra-me às dezasseis»: confirma numa frase curta. É a mesma regra de antes. Já não tem concorrente.
O resultado ocupa 408 linhas. Sessenta e um por cento menos. O bloco relido de cada vez foi mais ou menos dividido por dois, e o histórico da conversa recuperou o seu lugar.
Cada ferramenta traz as suas instruções
Parte do que desapareceu das instruções não foi eliminada. Mudou de sítio.
O assistente atua sobre a aplicação através de ferramentas: criar uma memória, alterar uma, procurar, fazer evoluir uma, marcar um lembrete, pesquisar na web, mostrar uma ficha, declarar que é outra pessoa a falar, registar uma regra de comportamento. Nove ferramentas, nesse dia. Cada uma é descrita ao modelo com os seus parâmetros, e essa descrição é lida no momento em que se prepara para a usar.
Foi para aí que foram as 175 linhas de estrutura de ficha, a grelha de importância de um a dez e a tabela das quatro razões pelas quais uma memória pode evoluir: um facto que muda, um facto que estava errado, um problema resolvido, uma informação que te pedem para esquecer. Cinquenta e quatro linhas acrescentadas às instruções das ferramentas, seiscentas e trinta e cinco retiradas das instruções gerais. A mesma informação, mas consultada só quando serve. O assistente não precisa de conhecer a estrutura de uma ficha de receita para te responder «bom dia». Precisa dela quando cria a ficha, e é nesse momento que lhe é mostrada.
O exemplo completo de receita, o que arruma os ingredientes por família, a carne, os legumes, as especiarias, em vez de a granel, continua lá, nas instruções do campo que descreve a ficha. Lido quando pedes uma receita, não quando perguntas as horas.
O que foi deitado fora, e o que recusámos guardar
O bloco sobre as imagens foi eliminado sem substituto: descrevia uma ferramenta que o assistente já não tinha, uma vez que o servidor constrói sozinho a ilustração de uma ficha, a partir do título, da entrada e das etiquetas. Podíamos tê-lo guardado «por precaução». Teria continuado a ser relido de cada vez para nada.
Outras três opções foram afastadas. Deixar o texto como estava: o sintoma persistia e cada acréscimo o agravava. Reduzi-lo um terço mantendo o estilo «não digas isto, diz aquilo»: as redundâncias teriam ficado, e com elas uma forma de tratar o modelo como um papagaio a adestrar. Manter a estrutura de ficha nas instruções: era fazê-lo ler um manual de montagem antes de cada «bom dia».
A decisão é reversível, e está escrito preto no branco no registo de decisões do projeto. Dois commits a anular, nenhuma base de dados tocada, nenhuma interface alterada. Se o novo texto se revelasse pior, voltar atrás leva um minuto.
Bom dia uma vez por dia
No mesmo dia, um pouco antes, o assistente tinha aprendido algo mais pequeno e mais visível: dizer bom dia.
Até então, podia não cumprimentar de todo quando abrias o dia com um pedido direto, ou, pelo contrário, responder «Bom dia, Leonor» em cada troca, como se te conhecesse pela primeira vez de dez em dez minutos. Nenhuma das duas coisas é o que faz alguém que te conhece.
O servidor sabe agora se a conversa que se abre é a primeira do teu dia: olha para a última conversa arquivada e verifica se é de hoje, à hora de Paris. Essa informação é acrescentada ao contexto de cada vez, com a hora. Se é a primeira conversa do dia, o assistente abre com um «bom dia» ou «boa tarde» antes das seis da tarde, um «boa noite» depois, seguido do teu nome se o conhecer. Toma a iniciativa mesmo que vás direto a um pedido: «olá, o tempo para amanhã» recebe «Bom dia, Leonor, vou ver.» Mais tarde no dia, não recomeça. Se o cumprimentas, responde simplesmente. Se vais direto ao assunto, vai direto ao assunto.
Dois pormenores deste rito dizem algo sobre a forma como a aplicação é feita. O primeiro: se não conhece o teu nome, diz «bom dia» e mais nada. Nunca «bom dia, caro amigo», nunca um nome adivinhado na memória. O segundo: quando a resposta vai demorar uns segundos, a frase curta que o assistente diz logo, «OK, vou ver», também leva o cumprimento nessa manhã. A cortesia chega no áudio imediato, não só na resposta completa que se segue. E se o telemóvel está emprestado, é o nome da pessoa que fala que é usado, não o do proprietário.
No texto antigo, este rito ocupava uma secção inteira, três regras numeradas e seis exemplos. No novo, três parágrafos, que fazem a mesma coisa.
O que muda quando falas com ele
Nada disto se vê na interface. Nenhum botão se mexeu a 21 de maio. O que muda é a regularidade.
Contas que o teu irmão deixou o açúcar: a aplicação já não diz «anotado». Reage ao que acabaste de dizer, ou cala-se, e o facto fica retido. Pedes uma sobremesa duas frases depois: tem o fio à frente dos olhos, porque o fio já não está enterrado debaixo de mil linhas. Marcas um lembrete: «OK, lembrete marcado para as dezasseis», uma frase, não um resumo. Abre-se uma ficha: uma frase de acompanhamento, «pronto, está feito», nunca um silêncio sobre um ecrã que acabou de mudar. E a conversa mantém o mesmo tom de um dia para o outro, curto, por tu, sem entusiasmo de apresentador, porque esse tom é descrito uma vez em vez de prescrito vinte.
O que a aplicação tinha aprendido dois dias antes sobre o efémero, mostrar a meteorologia sem a reter, encontrou o seu lugar no novo texto como um princípio, em três linhas, e não como mais um caso. E as regras que tu próprio lhe dás, «não me fales mais desse assunto», «lembra-me sempre isto», são descritas como aquilo que são: uma instrução duradoura que acrescentas à dela, registada por uma ferramenta dedicada, relida de cada vez na sua memória ativa.
O que vigiamos
Um texto declarativo faz uma aposta no modelo que o lê: que deduzirá os comportamentos certos de um modelo mental claro. Nem todos os modelos deduzem igualmente bem, e o que corre em produção nesse dia não é aquele para o qual o texto foi escrito primeiro.
Os dois sítios onde se espera uma regressão são conhecidos. Uma frase que contém vários factos, e um deles poderia escapar. E a diferença entre «lembra-me» e «lembra-te que», que separa um lembrete de um simples facto a reter. Para o primeiro, a segunda passagem instaurada a 18 de maio, a que reconta os factos de uma frase depois da resposta, fica no seu lugar como rede. Para os dois, a regra está fixada: se o modelo falha um comportamento, acrescenta-se-lhe uma instrução dirigida, uma linha no sítio exato onde falta. Ao manual não se volta.
A Leonor, por sua vez, vai reparar sobretudo numa coisa. No domingo em que o Duarte vem, a aplicação vai propor-lhe uma sobremesa sem açúcar, e não lhe terá dito «anotado» para o saber.
