kyma_poc
Kyma (по-гречески Wave, https://www.howtopronounce.com/kyma) — это демонстрация концепции использования генеративного искусственного интеллекта внутри Konveyor.io для помощи в усилиях по модернизации кода.
Слайды: Konveyor KymaML: миграция кода GenAI
Обзор
- Kyma сосредоточена на использовании данных, которые Konveyor уже собирает с помощью Migration Waves, и на взгляде на портфель приложений организации.
- Kyma просматривает отчет об анализе конкретного приложения и создает потенциальные исправления для каждого инцидента.
- Это делается путем просмотра аналогичных инцидентов, которые были решены в других приложениях, и получения разницы кода, которая исправила этот инцидент, и работы с LLM, чтобы использовать то, как организация решала проблему в прошлом для этого конкретного приложения и инцидента.
- Для POC это будет включать в себя рассмотрение приложений, которые имеют решения как Javaee, так и Quarkus. Мы смоделируем, как будет выглядеть опыт в Konveyor, где у нас есть доступ к более широкому портфелю приложений, и мы можем найти аналогичные приложения, которые уже были перенесены, и использовать их в качестве примеры.
- Этот подход использует быстрое проектирование с примерами Few Shots и серию агентов для работы с LLM для улучшения сгенерированного исправления.
- Примечание. На этом этапе обучение модели и точная настройка не требуются. У нас есть планы по тонкой настройке совместно с Open Data Hub в будущем, используя модели Foundation с открытым исходным кодом отhuggingface.co, но на текущем этапе это выходит за рамки возможностей.
- Мы предполагаем, что Kyma будет работать с различными моделями, наше внимание сосредоточено на инструментах/быстром проектировании и ожидаем, что координаты модели будут рассматриваться как взаимозаменяемый объект. Это сделано для того, чтобы мы могли экспериментировать с развивающимися моделями.
Каковы наши критерии успеха проверки концепции?
- Мы хотим оценить, какой уровень качества мы можем получить от оперативного проектирования, то есть без тонкой настройки.
- На будущих этапах может потребоваться тонкая настройка, но этот этап касается более простого подхода к созданию инструментов для сбора полезных данных в Konveyor и использования оперативного проектирования, чтобы помочь миграторам вносить изменения в код.
- Этот POC представляет собой небольшой проект Python для работы с несколькими примерами приложений и аналитическими отчетами для оценки полезности сгенерированных исправлений в области модернизации приложений Java EE до Quarkus.
- Для нас успех — это возможность создавать патчи, которые экономят время Migrator, работающего над модернизацией приложения.
- Мы предполагаем, что исправления не будут работать на 100% постоянно и потребуют некоторого вмешательства пользователя. Успех будет зависеть от того, насколько серьезное вмешательство потребуется, и от того, принесут ли исправления достаточную помощь для экономии времени.
Настраивать
-
python -m venv env
-
source env/bin/activate
-
pip install -r ./requirements.txt
- Установите podman, чтобы можно было запускать Kantra для статического анализа кода.
Бег
Запустите анализ примера приложения (пример для MacOS).
-
cd data
-
./fetch.sh
# это позволит git клонировать некоторые примеры приложений с исходным кодом -
./darwin_restart_podman_machine.sh
# настраивает виртуальную машину podman в MacOS, чтобы она монтировала файловую систему хоста в виртуальную машину -
./darwin_get_latest_kantra_cli.sh
# извлекает «kantra» из нашего инструмента анализа -
./analyzer_coolstuff.sh
# Анализирует каталог «coolstuff-javaee» и записывает результаты анализа в example_reports/coolstuff-javaee/output.yaml- Следуйте этому примеру, чтобы проанализировать другие примеры приложений.
Создать версию Markdown данного аналитического отчета.
- Это возьмет выходные данные YAML и преобразует их в Markdown для более удобного просмотра.
- Запустите в корне проекта и выполните
-
./kyma.py report data/example_reports/coolstuff-javaee/output.yaml example_output/coolstuff-quarkus
Предполагается, что отчет Kantra analyis в формате YAML существует по адресу data/example_reports/coolstuff-javaee/output.yaml.
Пример вывода:
$ 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
Примеры выходных данных можно просмотреть на github по адресу data/example_reports/coolstuff-javaee/output.yaml.
- example_output/coolstuff-quarkus/eap7_websphere.md
- example_output/coolstuff-quarkus/eap8_eap7.md
- example_output/coolstuff-quarkus/openshift.md
- example_output/coolstuff-quarkus/quarkus_springboot.md
Генерация результата от взаимодействия LLM
-
export OPENAI_API_KEY="mysecretkey"
- См. https://platform.openai.com/api-keys, чтобы создать ключ API.
-
./generate_coolstuff.sh
- См.generate_coolstuff.sh как пример того, как вызвать
- Просмотрите результаты вышеизложенного по адресу example_output/coolstuff-quarkus.
- Для первого инцидента каждого нарушения создаются два типа файлов (в настоящее время мы работаем только над первым инцидентом).
- '*_full_run.md' Файл уценки, в котором отображается приглашение, отправленное в LLM, и полный результат.
- «.diff» — разница, которая создается для первого случая каждого нарушения.
- Обратите внимание, что мы выделяем выходные данные в зависимости от модели, которую нужно искать:
- example_output/coolstuff-quarkus/gpt-3.5-turbo-16k
- example_output/coolstuff-quarkus/gpt-4-1106-preview
- Пример конкретной проблемы и результата:
- example_output/coolstuff-quarkus/gpt-4-1106-preview/quarkus_springboot_cdi-to-quarkus-00050_2_full_run.md
Примечания
- Идея времени работы при обработке магазина Coolstuff для:
-
-t "quarkus" -t "jakarta-ee" -t "jakarta-ee8+" -t "jakarta-ee9+" -t "cloud-readiness"
- 'gpt-3,5-турбо-16к'
-
time ./generate_coolstuff.sh 5.12s user 3.46s system 1% cpu 11:02.25 total
- 'gpt-4-1106-предварительный просмотр'
-
./generate_coolstuff.sh 4.86s user 3.73s system 0% cpu 15:52.24 total