kyma_poc
Kyma (grego para Wave, https://www.howtopronounce.com/kyma) é uma demonstração de prova de conceito usando IA generativa dentro do Konveyor.io para ajudar nos esforços de modernização de código.
Slides: Konveyor KymaML: migração de código GenAI
Visão geral
- Kyma está focada em aproveitar os dados que o Konveyor já coleta por meio do Migration Waves e sua visão do portfólio de aplicativos de uma organização.
- Kyma analisará o relatório de análise de um determinado aplicativo e gerará possíveis patches para cada incidente.
- Isso é feito observando incidentes semelhantes que foram resolvidos em outros aplicativos e pegando a diferença de código que corrigiu esse incidente e trabalhando com um LLM para aproveitar como a organização resolveu o problema no passado para esse aplicativo e incidente específico.
- Para o POC isso envolverá olhar para aplicações que possuem soluções javaee e quarkus, simularemos como seria a experiência no Konveyor onde teremos acesso a um portfólio maior de aplicações e poderemos encontrar aplicações similares que já foram migradas e utilizá-las como exemplos.
- A abordagem aproveita a engenharia imediata com exemplos de Few Shots e uma série de agentes para trabalhar com o LLM para melhorar o patch gerado.
- Observação: o treinamento e o ajuste fino do modelo não são necessários nesta fase. Temos planos para ajustes finos em conjunto com o Open Data Hub no futuro, aproveitando modelos básicos de código aberto de huggingface.co, mas isso está fora do escopo desta fase atual.
- Estamos assumindo que Kyma trabalhará com vários modelos, nosso foco está na engenharia de ferramentas/prompts e esperamos tratar as coordenadas do modelo como uma entidade intercambiável. Isso nos permite experimentar modelos em evolução.
Quais são os nossos critérios para o sucesso da Prova de Conceito
- Queremos avaliar que nível de qualidade podemos obter com uma engenharia rápida, ou seja, sem ajustes finos.
- As fases futuras podem aproveitar o ajuste fino, mas esta fase trata de uma abordagem mais simples de construção de ferramentas para coletar dados úteis no Konveyor e usar a engenharia imediata para ajudar os migradores com alterações de código
- Este POC pretende ser um pequeno projeto python para trabalhar com alguns aplicativos de amostra e relatórios de análise para avaliar a utilidade dos patches gerados no domínio da modernização de aplicativos Java EE para Quarkus
- Sucesso para nós é conseguir gerar patches que economizem tempo do Migrator trabalhando na modernização de uma aplicação.
- Presumimos que os patches não funcionarão 100% o tempo todo e envolverão alguma intervenção do usuário. O sucesso estará relacionado com a quantidade de intervenção necessária e se os patches proporcionam ajuda suficiente para poupar tempo.
Configurar
-
python -m venv env
-
source env/bin/activate
-
pip install -r ./requirements.txt
- Instale o podman para poder executar o Kantra para análise estática de código
Correndo
Execute uma análise de um aplicativo de amostra (exemplo para MacOS)
-
cd data
-
./fetch.sh
# isso irá clonar alguns exemplos de aplicativos de código-fonte -
./darwin_restart_podman_machine.sh
# configura a VM podman no MacOS para montar o sistema de arquivos host na VM -
./darwin_get_latest_kantra_cli.sh
# busca 'kantra' nossa ferramenta de análise -
./analyzer_coolstuff.sh
# Analisa o diretório 'coolstuff-javaee' e grava uma saída de análise em example_reports/coolstuff-javaee/output.yaml- Siga esse exemplo para analisar outros exemplos de aplicativos
Gere uma versão Markdown de um determinado relatório de análise
- Isso pegará a saída YAML e converterá em Markdown para uma visualização mais fácil
- Comece na raiz do projeto e execute
-
./kyma.py report data/example_reports/coolstuff-javaee/output.yaml example_output/coolstuff-quarkus
Isso pressupõe que um relatório de análise Kantra em YAML exista em data/example_reports/coolstuff-javaee/output.yaml
Exemplo de execução de saída:
$ time ./kyma.py report data/example_reports/coolstuff-javaee/output.yaml example_output/coolstuff-quarkus
We have results from 4 RuleSet(s) in data/example_reports/coolstuff-javaee/output.yaml
Writing eap7/websphere to example_output/coolstuff-quarkus/eap7_websphere.md
Writing eap8/eap7 to example_output/coolstuff-quarkus/eap8_eap7.md
Writing openshift to example_output/coolstuff-quarkus/openshift.md
Writing quarkus/springboot to example_output/coolstuff-quarkus/quarkus_springboot.md
./kyma.py report data/example_reports/coolstuff-javaee/output.yaml 1.28s user 2.12s system 337% cpu 1.007 total
Os resultados de exemplo podem ser visualizados no github para data/example_reports/coolstuff-javaee/output.yaml
- exemplo_output/coolstuff-quarkus/eap7_websphere.md
- exemplo_output/coolstuff-quarkus/eap8_eap7.md
- exemplo_output/coolstuff-quarkus/openshift.md
- exemplo_saída/coolstuff-quarkus/quarkus_springboot.md
Gerar resultado da interação LLM
-
export OPENAI_API_KEY="mysecretkey"
- Consulte https://platform.openai.com/api-keys para criar uma chave de API
-
./generate_coolstuff.sh
- Veja generate_coolstuff.sh como um exemplo de como invocar
- Veja os resultados acima em example_output/coolstuff-quarkus
- 2 tipos de arquivos são produzidos como saída para o primeiro Incidente de cada Violação (no momento estamos trabalhando apenas no primeiro incidente)
- '*_full_run.md' Um arquivo markdown que mostra o prompt que foi enviado ao LLM e o resultado completo
- ".diff" - Uma comparação produzida para o primeiro incidente de cada violação
- Observe que estamos dividindo a saída com base no modelo a ser procurado:
- exemplo_saída/coolstuff-quarkus/gpt-3.5-turbo-16k
- exemplo_saída/coolstuff-quarkus/gpt-4-1106-preview
- Exemplo de um problema específico e resultado:
- exemplo_output/coolstuff-quarkus/gpt-4-1106-preview/quarkus_springboot_cdi-to-quarkus-00050_2_full_run.md
Notas
- Idéia de tempos de execução quando estamos processando coolstuff-store para:
-
-t "quarkus" -t "jakarta-ee" -t "jakarta-ee8+" -t "jakarta-ee9+" -t "cloud-readiness"
- 'gpt-3.5-turbo-16k'
-
time ./generate_coolstuff.sh 5.12s user 3.46s system 1% cpu 11:02.25 total
- 'gpt-4-1106-visualização'
-
./generate_coolstuff.sh 4.86s user 3.73s system 0% cpu 15:52.24 total