kyma_poc
يعد Kyma (باللغة اليونانية Wave، https://www.howtopronounce.com/kyma) دليلاً على عرض المفهوم باستخدام الذكاء الاصطناعي التوليدي داخل Konveyor.io للمساعدة في جهود تحديث التعليمات البرمجية.
الشرائح: Konveyor KymaML: ترحيل كود GenAI
ملخص
- تركز Kyma على الاستفادة من البيانات التي تجمعها شركة Konveyor بالفعل عبر Migration Waves وهي وجهة نظرها في محفظة تطبيقات المؤسسات.
- ستنظر Kyma في تقرير تحليل التطبيق المحدد وستقوم بإنشاء تصحيحات محتملة لكل حادث.
- يتم ذلك من خلال النظر في حوادث مماثلة تم حلها في تطبيقات أخرى والحصول على كود الفرق الذي أصلح هذا الحادث والعمل مع LLM للاستفادة من كيفية حل المنظمة للمشكلة في الماضي لهذا التطبيق والحادث المحدد.
- بالنسبة لـ POC، سيتضمن ذلك النظر في التطبيقات التي تحتوي على حلول javaee وquarkus، وسنقوم بمحاكاة التجربة في Konveyor حيث يمكننا الوصول إلى مجموعة تطبيقات أكبر ويمكننا العثور على تطبيقات مماثلة تم ترحيلها بالفعل واستخدامها أمثلة.
- يستفيد هذا النهج من الهندسة السريعة باستخدام أمثلة قليلة من اللقطات وسلسلة من الوكلاء للعمل مع LLM لتحسين التصحيح الذي تم إنشاؤه.
- ملحوظة: التدريب على النماذج والضبط الدقيق ليس مطلوبًا في هذه المرحلة. لدينا خطط للضبط الدقيق بالتزامن مع Open Data Hub في المستقبل، والاستفادة من نماذج الأساس مفتوحة المصدر من Huggingface.co، ومع ذلك فإن هذا خارج نطاق هذه المرحلة الحالية.
- نحن نفترض أن Kyma ستعمل مع نماذج مختلفة، وينصب تركيزنا على الأدوات/الهندسة السريعة ونتوقع التعامل مع إحداثيات النموذج ككيان قابل للتبديل. وهذا يسمح لنا بتجربة النماذج المتطورة.
ما هي معاييرنا لنجاح إثبات المفهوم؟
- نريد تقييم مستوى الجودة الذي يمكن أن نحصل عليه من الهندسة السريعة، أي عدم الضبط الدقيق.
- قد تستفيد المراحل المستقبلية من الضبط الدقيق، ولكن هذه المرحلة تدور حول نهج أبسط لبناء الأدوات لجمع البيانات المفيدة في Konveyor واستخدام الهندسة السريعة لمساعدة المهاجرين في تغييرات التعليمات البرمجية
- يهدف إثبات المفهوم (POC) إلى أن يكون مشروعًا صغيرًا بلغة بايثون للعمل مع بعض نماذج التطبيقات وتقارير التحليل لقياس مدى فائدة التصحيحات التي تم إنشاؤها في مجال تحديث تطبيقات 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
# سيؤدي هذا إلى استنساخ بعض نماذج تطبيقات التعليمات البرمجية المصدرية -
./darwin_restart_podman_machine.sh
# يقوم بإعداد podman VM على نظام MacOS بحيث يقوم بتثبيت نظام الملفات المضيف في VM -
./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 في 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
- راجع generator_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"
- "جي بي تي-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