kyma_poc
Kyma (Wave del griego, https://www.howtopronounce.com/kyma) es una demostración de prueba de concepto que utiliza IA generativa dentro de Konveyor.io para ayudar con los esfuerzos de modernización del código.
Diapositivas: Konveyor KymaML: Migración de código GenAI
Descripción general
- Kyma se centra en aprovechar los datos que Konveyor ya recopila a través de Migration Waves y su visión de la cartera de aplicaciones de una organización.
- Kyma observará el informe de análisis de una aplicación determinada y generará parches potenciales para cada incidente.
- Esto se hace observando incidentes similares que se resolvieron en otras aplicaciones y tomando el código diferencial que solucionó ese incidente y trabajando con un LLM para aprovechar cómo la organización resolvió el problema en el pasado para esta aplicación e incidente específicos.
- Para la POC, esto implicará buscar aplicaciones que tengan soluciones javaee y quarkus, simularemos cómo sería la experiencia en Konveyor, donde tenemos acceso a una cartera de aplicaciones más grande y podemos encontrar aplicaciones similares que ya fueron migradas y usarlas como ejemplos.
- El enfoque aprovecha la ingeniería rápida con ejemplos de Few Shots y una serie de agentes para trabajar con el LLM para mejorar el parche generado.
- Nota: En esta fase no se requiere capacitación ni ajuste del modelo. Tenemos planes para realizar ajustes junto con Open Data Hub en el futuro, aprovechando los modelos básicos de código abierto de huggingface.co, pero eso está fuera del alcance de esta fase actual.
- Suponemos que Kyma trabajará con varios modelos, nuestro enfoque está en las herramientas/ingeniería rápida y esperamos tratar las coordenadas del modelo como una entidad intercambiable. Esto es para permitirnos experimentar con modelos en evolución.
¿Cuál es nuestro criterio para el éxito de la prueba de concepto?
- Queremos evaluar qué nivel de calidad podemos obtener con una ingeniería rápida, es decir, sin ajustes.
- Las fases futuras pueden aprovechar el ajuste, pero esta fase se trata de un enfoque más simple de creación de herramientas para recopilar datos útiles en Konveyor y utilizar ingeniería rápida para ayudar a los migradores con cambios de código.
- Esta POC pretende ser un pequeño proyecto de Python para trabajar con algunas aplicaciones de muestra e informes de análisis para evaluar la utilidad de los parches generados en el dominio de la modernización de aplicaciones Java EE a Quarkus.
- El éxito para nosotros es poder generar parches que le ahorren tiempo al Migrator al trabajar en la modernización de una aplicación.
- Asumimos que los parches no serán 100% funcionales todo el tiempo e implicarán alguna intervención del usuario. El éxito estará relacionado con cuánta intervención se requiere y si los parches brindan suficiente ayuda para ahorrar tiempo.
Configuración
-
python -m venv env
-
source env/bin/activate
-
pip install -r ./requirements.txt
- Instale podman para poder ejecutar Kantra para análisis de código estático
Correr
Ejecute un análisis de una aplicación de muestra (ejemplo para MacOS)
-
cd data
-
./fetch.sh
# esto clonará algunas aplicaciones de código fuente de muestra -
./darwin_restart_podman_machine.sh
# configura la máquina virtual podman en MacOS para que monte el sistema de archivos host en la máquina virtual -
./darwin_get_latest_kantra_cli.sh
# recupera 'kantra' nuestra herramienta analizadora -
./analyzer_coolstuff.sh
# Analiza el directorio 'coolstuff-javaee' y escribe un resultado de análisis en example_reports/coolstuff-javaee/output.yaml- Siga ese ejemplo para analizar otras aplicaciones de muestra.
Generar una versión Markdown de un informe de análisis determinado
- Esto tomará la salida YAML y la convertirá a Markdown para una vista más sencilla.
- Comience en la raíz del proyecto y ejecute
-
./kyma.py report data/example_reports/coolstuff-javaee/output.yaml example_output/coolstuff-quarkus
Esto supone que existe un informe de análisis de Kantra en YAML en data/example_reports/coolstuff-javaee/output.yaml
Ejecución de salida de muestra:
$ 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
Se pueden ver resultados de ejemplo desde github para data/example_reports/coolstuff-javaee/output.yaml
- salida_ejemplo/coolstuff-quarkus/eap7_websphere.md
- salida_ejemplo/coolstuff-quarkus/eap8_eap7.md
- salida_ejemplo/coolstuff-quarkus/openshift.md
- salida_ejemplo/coolstuff-quarkus/quarkus_springboot.md
Generar resultados a partir de la interacción LLM
-
export OPENAI_API_KEY="mysecretkey"
- Consulte https://platform.openai.com/api-keys para crear una clave API
-
./generate_coolstuff.sh
- Vea generate_coolstuff.sh como ejemplo de cómo invocar
- Vea los resultados de lo anterior en example_output/coolstuff-quarkus
- Se producen 2 tipos de archivos como resultado del primer incidente de cada infracción (actualmente solo estamos trabajando en el primer incidente).
- '*_full_run.md' Un archivo de rebajas que muestra el mensaje que se envió al LLM y el resultado completo
- ".diff": una diferencia que se produce para el primer incidente de cada infracción.
- Tenga en cuenta que estamos desglosando el resultado según el modelo a buscar:
- salida_ejemplo/coolstuff-quarkus/gpt-3.5-turbo-16k
- salida_ejemplo/coolstuff-quarkus/gpt-4-1106-preview
- Ejemplo de un problema específico y resultado:
- example_output/coolstuff-quarkus/gpt-4-1106-preview/quarkus_springboot_cdi-to-quarkus-00050_2_full_run.md
Notas
- Idea de tiempos de ejecución cuando procesamos 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-vista previa'
-
./generate_coolstuff.sh 4.86s user 3.73s system 0% cpu 15:52.24 total