OpenAI Dev Day

Preciso falar esta semana do keynote da OpenAI no evento para desenvolvedores (https://www.youtube.com/watch?v=U9mJuUkhUzk). Havia uma percepção que o ChatGPT estava em declínio, que as respostas não estavam tao boas. Neste tweet, Mike Young lista várias threads no Reddit com a mesma queixa (https://twitter.com/mikeyoung44/status/1672971689573990400); este paper (https://arxiv.org/pdf/2307.09009.pdf) quantifica a queda de precisão no algoritmo); e, nesta entrevista (https://olhardigital.com.br/2023/08/22/pro/chatgpt-ja-esta-em-declinio-afirma-neurocientista-da-unifesp/), o neurocientista Álvaro Dias também diz que o ChatGPT está piorando. Some-se a isto os processos em andamento por uso indevido (https://www.bbc.com/news/technology-66164228#:~:text=US%20comedian%20Sarah%20Silverman%20is,of%20the%20firms’%20AI%20systems.
, https://llmlitigation.com, https://www.ft.com/content/aec1679b-5a34-4dad-9fc9-f4d8cdd124b9, https://www.npr.org/2023/08/16/1194202562/new-york-times-considers-legal-action-against-openai-as-copyright-tensions-swirl). Nao parecia um bom momento mas as novas noticias do evento colocam o ChatGPT novamente nas manchetes.

Agora há a possibilidade de criar versões personalizadas do ChatGPT para necessidades específicas, sem precisar saber codificar. Já disse que meu parâmetro aqui é meu filho de 16 anos que usa o chat todo dia. Ele sentou comigo na sexta e fizemos um chat personalizado, que recebe um texto escrito por ele e o corrige usando os padrões estabelecidos pela escola. Fizemos um teste e as recomendações são muito mais precisas comparando o modelo “normal” e o modelo “international school”. E ele pode compartilhar isto com os colegas, é uma versão em esteroides dos prompts customizados. A OpenAI entendeu que o usuário comum precisa ter sua vida facilitada.

Outro exemplo disto é a possibilidade de enviar anexos (no momento, limitado a 10 arquivos). Antes você precisava usar um plugin, que enviava o documento para um serviço e a partir dai o ChatGPT analisava. Testamos isto com um arquivo de dados meteorológicos, 80MB e zipado em bzip. Ele foi capaz de abrir o arquivo e fazer as análises. O que me leva a outra novidade, o agente “Data Analysis”. Isto já podia ser feito antes, mas este chat personalizado torna ainda mais fácil descobrir tendencias, anomalias. Naquele meu arquivo, eu devo admitir que os gráficos que ele montou ficaram melhores que os meus ¯\_(ツ)_/¯

E para o mundo corporativo, duas mensagens: Sam frisou que o ChatGPT Enterprise não usa as informações submetidas para treinamento do modelo, i.e., não ha o risco da sua planilha com os dados de venda do ultimo trimestre aparecer para o seu concorrente. E que a OpenAI tem uma iniciativa, chamada “Copyright Shield”, em que ela irá arcar com custos jurídicos de acoes por violação de direitos autorais. A empresa defende seu uso de dados sob a alegação de “fair use” sob a lei de direitos autorais dos EUA, uma norma que permite uma interpretação mais liberal da lei de direitos autorais em sintonia com os ideais americanos de livre expressão.

Excitante!

CSS mais fácil

Damien Riehl é um advogado especializado em tecnologia e também um músico. E ele não concorda como os processos de violação de direitos autorais, para ele música pode ser vista como matemática. E se você lembrar que há apenas 8 notas musicais, Damien teve a brilhante ideia de fazer um algoritmo que fizesse todas as combinações e colocou no domínio público. Segundo ele, isto pode ajudar naqueles casos em que alguém é processado apenas porque usou uma combinação usada por outro, e a segunda pessoa nem sabia. Veja o faq em http://allthemusic.info/ para entender melhor.

Não sou um advogado, nem estou defendendo a pirataria, o que me chamou a atenção foi a sacada de notar que há um espaço finito de possibilidades. Acho que há um fascinio em poder dizer ‘aqui está tudo sobre o tema X’, pessoalmente foi o que me atraiu no mestrado. Não vou ser arrogante de dizer que sei tudo sobre Design Thinking mas eu abordei meus estudos com este objetivo. E agora sei uma ou duas coisas a respeito …

Outro tema: Pense no design de uma página HTML ou SPA, quantos modos diferentes há de fazê-la? Usamos CSS para controlar o que será exibido. As cores são finitas, vão de #000000 até #FFFFFF; as bordas são top-bottom-left-right; e por aí vai. Adam Wathan notou isto e desenvolveu o TailwindCSS. Com o TailWind, você escreve seu CSS sem sair da sua pagina HTML. Veja a diferença, antes, se eu queria que meu texto fosse azul e negrito, eu faria isto:

style.css

 .info{
        color: blue;
        font-weight: bold;
    }

index.html

<p class="info">
    Lorem Ipsum
</p>

E voilà, texto azul e negrito. O TailWindCSS permite que você escreva diretamente e ele tem uma biblioteca com centenas e centenas de possibilidades. Assim que você usa no seu html ele gera o CSS automaticamente. Este é um detalhe, uma aplicativo roda no seu terminal e varre as suas páginas para saber o que gerar:

index.html

<p class="text-blue font-bold">
    Lorem Ipsum
</p>

ou texto bem grande, negrito, sublinhado, azul-celeste e centralizado na página:

<p class="text-3xl font-bold underline text-sky-400 text-center">
    Lorem Ipsum
</p>

UnoCSS leva a ideia adiante e elimina completamente o arquivo css. No UnoCSS há um script que analisa as suas páginas em runtime e gera as classes para você. E nāo é necessário um aplicativo rodando em background. Mágico! Note que o modo de escrever é exatamente igual ao TailWindCSS.

index.html

<p class="text-blue font-bold">
    Lorem Ipsum
</p>

Tenho usado muito UnoCSS. Mas tenho minhas críticas, o grande número de classes pode tornar o código HTML verboso, e é um fato, seu HTML fica difícil de entender. E o CSS gerado pelo TailWindCSS é legível apenas pelos desenvolvedores do … TailWind 😀.

Além disso, a dependência do framework em classes utilitárias pode levar a uma falta de consistência no design em todo o site, já que diferentes desenvolvedores podem usar classes diferentes para alcançar efeitos semelhantes. E uma vez que não há um arquivo CSS mantido pelo time, a necessidade de documentar as escolhas de estilo é essential.

Ainda assim, a praticidade parece para mim mostrar que frameworks assim serão cada vez mais populares.

Radar de Tecnologia

Uma nova edição do Technology Radar da ThoughtWorks foi publicada ontem

https://www.thoughtworks.com/content/dam/thoughtworks/documents/radar/2023/09/tr_technology_radar_vol_29_en.pdf

Para surpresa de ninguém, IA é o grande tema desta edição, eu entretanto fui atraído por 2 itens:

Mermaid

Mermaid está no quadrante de adoção.

https://mermaid.js.org/

No meu projeto atual usamos documentação-como-código desde o inicio, exceto que a nossa escolha foi PlantUML. O que eu posso comentar da minha experiência, em 3 aspectos:

  • Consistência: Ao tratar a documentação como código, torna-se mais fácil manter a consistência entre o código e sua documentação, especialmente no que tange à arquitetura de software. Utilizamos C4 e quando fazemos mudanças estruturais, os diagramas e o novo código são versionados no mesmo PR, mostrando exatamente a evolução do sistema;
  • Colaboração: Entre engenheiros é ótimo pois soa mais natural editar a documentação no mesmo fluxo com que o software é editado. Fora do mundo dos engenheiros, há uma barreira pois é necessário saber o markup e uma interface point-and-click é mais intuitiva. Isto fica evidente na discussão do contexto do software, em que é necessária a interação com os colegas de negócio;
  • Automação: Aqui é o ponto em que a documentação-como-código brilha. Se a cultura dos times incentiva comentários no seu codebase, vários diagramas podem ser gerados automaticamente.

Complexidade

Para mim é difícil concordar com o argumento de que devemos abraçar a complexidade em desenvolvimento de software. Complexidade é algo que deve ser combatido no seu design, na sua implementação, no seu processo. Utilizando o Cynefin, nosso objetivo é transicionar do complexo para o complicado e, veja, o artigo utiliza AI como um exemplo de complexidade porém AI opera no complicado, ao utilizar padrões e conhecimento para tomar decisões.

Neste tópico, eu lembro do Dumbledore falando para o Harry: “Soon we must all face the choice, between what is right and what is easy”. O trabalho de um arquiteto, e todos os engenheiros são arquitetos em alguma escala, é resistir à tentação da solução fácil; é comum nestas situações introduzir complexidade acidental. Se estamos falando de complexidade essencial, ok, ainda assim, devemos lutar para diminuí-la. Mas eu não culpo a ThoughtWorks pela abordagem, o Dijkstra já dizia “complexity sells better”.

https://www.thoughtworks.com/en-us/insights/blog/technology-strategy/why-embracing-complexity-real-challenge-software-today

Leiam o Radar, sempre é interessante especialmente confiram o que está próximo do nível de adoção.

APIDays

Esta semana estive em Londres atendendo o evento ApiDays. Uma vez ao ano eu participo de um evento externo, em adição a estudar sozinho, é importante encontrar colegas de profissão e conversar sobre o que acontece nas trincheiras. Para a minha surpresa, IA não foi o tema central, assisti por volta de 30 palestras e apenas 4 eram especificamente sobre IA. Dois grandes temas no evento:

Governança de API’s: Ênfase dada ao ciclo de vida das API’s: definição->design->desenvolvimento-> testes->publicação->operação. O que eu vou levar para casa:

  • A importância da documentação, ela é o ponto central da sua API, seja ela consumida pelos desenvolvedores, seja ela lida por robôs.
  • O papel dos padrões no design. Este é um mercado em ascensão e seus consumidores esperam que você siga OpenAPI, AsyncAPI, Semantic Versioning, HTTP response codes, Protocol Buffers definition language.
  • Sua operação tem que prever liberdade de escolha, não assuma um cloud provider, não force um gateway.

Democratização de API’s: Aqui há 2 visōes que estão convergindo, por um lado experts dizem que devemos desenvolver as API’s pensando em devops e gitops. Esta visão coloca uma grande importância nos aspectos de governança mencionados no item anterior; em adição, esta visão ressalta interoperabilidade e composibilidade como atributos essencias para API’s modernas. Por outro lado, se olharmos para a composição mais comuma das empresas, apenas 10% são da área de tecnologia (pesquisa da Gartner exibida em uma das palestras); temos 49% de usuários finais e 41% classificados como analistas de negócio tecnólogos. Estes 41% criam soluções de tecnlogia ou de análise a partir das soluções que a área de TI fornece. Eles cunharam o termo ‘mundo da economia pós-API’ para abraçar este pessoal que tem ter acesso facilitado às API’s. Quanto mais simples for, mais fácil será para produtos inovadores surgirem a partir da informação disponível. Esta segunda visão aposta em API’s abertas e públicas, aposta em ecossistemas e marketplaces.

Vou citar 2 ferramentas que testei no evento e achei fantásticas:

Superface.ai: OK, existem catálogos de API’s, sabemos do conceito de observabilidade, como lidar com API’s que são similares porém com formatos diferentes? Pense no wttr.in e no OpenWeatherMap, ambas permitem que você veja se vai chover hoje em Londres. Mas a similaridade termina aí, é necessário fazer o código para cada uma delas. Mais, se uma delas estiver indisponível você é responsável por rotear o pedido. O Superface lida com isto: (1) você fala qual o seu contrato (2) o Superface tem agentes autônomos que descobrem API’s condizentes com o seu contrato e mapeia o seu contrato para o contrato das API’s que ele localizou. (ok, aqui tem IA 🙂)

Mocking servers do Postman: eu uso Postman frequentemente para testar API’s, e descobri que nele você pode prototipar a sua API. Desenhe seus métodos, especifique os contratos a partir de exemplos e o Postman cria a documentação e um endpoint. Quando eu queria pensar em uma API, usava o httpbin, isto é muuuito mais bacana.

Arquitetura e IA

Quando escrevi minha tese de Mestrado, conceituar Criatividade era essencial e usei as ideias de J.P. Guildford como base: criatividade é a capacidade de exibir comportamento criativo em um grau notável. Ele conceituou a criatividade como um fator dentro de uma teoria geral da inteligência, envolvendo o pensamento divergente que poderia ser desenvolvido através da interação entre indivíduos e seus ambientes. Sua proposta utiliza ciclos divergentes, que possibilitam a criação de alternativas para um problema de design a partir de várias perspectivas e o ciclos convergentes, enfatizando a melhor opção para o problema, sem margem para ambiguidade.

Tenho revisitado este tema discutindo no Reddit se o ChatGPT pode ser considerado criativo e cada vez mais tendo a dizer “Sim”. Mês passado um arquiteto sugeriu-me o livro “Architecture in the Age of Artificial Intelligence-An introduction to AI for architects“; afinal, um arquiteto deve ter ideias originais, ele poderia ser substituído pelo ChatGPT? É um livro curto (180pp) e recomendo a leitura, os 2 primeiros capítulos são um resumo de técnicas e como chegamos até aqui no campo de Inteligência Artificial (mas não espere nada em profundidade). Os demais capítulos oferecem a visão de que trabalhadores do conhecimento como arquitetos serão auxiliados por ferramentas de IA mas também podem ser superados por elas. E que é necessário antecipar e compreender onde isto acontece e preparar-se. Os relatos sobre a XKool são fascinantes e este artigo da Guardian tem imagens ótimas. Na minha leitura, o livro considera IA capaz de ser criativa, algo que a última newsletter do Nick Cave desmonta. Segundo Nick, “ChatGPT está acelerando a mercantilização do espírito humano ao mecanizar a imaginação”, para mim soa como anacrônico.

Eu, como desenvolvedor de software, também enxergo-me como trabalhador do conhecimento e tenho estudado muito para estar pronto. Tenho usado também meus filhos e seus amigos para (tentar) entender como a próxima geração projeta o mundo em alguns anos. Ambos vêem um mundo dominado por IA e receosos do lugar deles neste mundo. Digo a eles o que escrevi acima: estejam preparados.