Yazılım Geliştirmede İletişimsel Ajanlar
ÖZET
Yazılım mühendisliği, genellikle derin sezgilere ve danışmalara dayanarak karmaşık kararlar almayı gerektiren bir alandır. Son zamanlarda derin öğrenme, yazılım geliştirmenin çeşitli aşamalarında uygulanan kapsamlı tasarımlarla yazılım mühendisliği yaklaşımlarında büyük değişikliklere yol açmıştır. Bu makalede, tüm yazılım geliştirme sürecinde büyük dil modellerinden (LLM) yararlanarak, anahtar süreçleri sadeleştiren ve birleştiren yenilikçi bir yaklaşım sunuyoruz. Bu yaklaşımın odak noktasında, tasarım, kodlama, test ve belgeleme olmak üzere dört aşamada yazılım geliştirme sürecini sıralı bir şekilde ele alan, sohbet tabanlı bir yazılım geliştirme şirketi olan CHATDEV bulunmaktadır. Bu model, yazılım geliştirme sürecini yedi dakika gibi kısa bir sürede ve bir doların altında bir maliyetle tamamlama yeteneğine sahiptir. CHATDEV’in potansiyeli, LLM’lerin yazılım geliştirmede nasıl kullanılabileceğine dair yeni perspektifler sunmaktadır. Çalışmamıza ait kod https://github.com/OpenBMB/ChatDev adresinde yer almaktadır.
Introduction
Yazılım mühendisliği, yazılım sistemlerinin metodik geliştirilmesi ve bakımını kapsar. Yazılımın karmaşıklığı sıklıkla sezgiye dayalı kararları gerektirir. Derin öğrenmenin son ilerlemeleri, yazılım mühendisliğindeki etkinliği, verimliliği ve maliyeti artırmayı hedeflemiştir. Bu yaklaşım, yazılımın gereksinimlerden bakıma kadar olan tüm aşamalarını ele alır. Yazılım geliştirme, birçok rolü içeren karmaşık ve detaylı bir süreçtir.
Son yıllarda, büyük dil modelleri, doğal dil işleme ve bilgisayarlı görüde önemli başarılara imza atmıştır. Bu modeller, devasa metinlerde eğitildikten sonra geniş uygulama yelpazesinde başarılı sonuçlar vermiştir. Yazılım geliştirme, “dil” olarak görülebilir. Bu makale, dil modelleriyle yönlendirilen bir yazılım geliştirme çerçevesini inceleyerek, yazılım için birleşik ve etkili bir yaklaşım sunmayı hedeflemektedir
LLM’lerle doğrudan yazılım üretimi, kod halüsinasyonlarına neden olabilir, bu da fonksiyonların eksik uygulamalarını ve hataları içerir. Bu halüsinasyonlar temelde iki nedenden dolayı meydana gelir.
LLM’lerin bir yazılım sistemini tek adımda üretirken karşılaştığı iki ana zorluk; görevin özgüllüğünün eksikliği nedeniyle yüksek seviye doğasında bulunmayan yönlendirilmiş düşünmeyi sağlayamaması ve karar verme sürecinde karşılıklı incelemenin olmamasıdır, bu da önemli riskleri beraberinde getirir.
CHATDEV, klasik şelale modelini takip ederek yazılım geliştirme sürecini dört aşamaya bölen sanal bir sohbet destekli yazılım teknolojisi şirketidir. Her aşamada farklı rolleri olan ajanlar işe alınır ve sohbet zinciri kullanılarak etkili iletişim sağlanır. Bu, tüm yazılım geliştirme adımlarının doğru bir şekilde gerçekleştirilmesini garanti eder. Deneysel sonuçlara göre, CHATDEV ortalama olarak her yazılım için 17.04 dosya üretti, 13.23 potansiyel kod zafiyetini hafifletti, yazılım üretim süresi 409.84 saniye ve maliyeti 0.2967 dolar oldu. İnceleyici ve programcı arasındaki tartışmalar kod zafiyetlerini belirlemeye yardımcı oldu, testçi ve programcı arasındaki tartışmalar ise potansiyel hataların çözülmesini sağladı.
CHATDEV, sohbet temelli bir yazılım geliştirme çerçevesidir ve sadece bir görev belirtilerek tasarım, kodlama, test etme ve dokümantasyon aşamalarını sırasıyla ele alır. Bu sistem, yazılım geliştirme sürecini ardışık atomik alt görevlere ayırır. Her alt görev, işbirlikçi etkileşimi ve karşılıklı incelemeyi teşvik eder. Potansiyel kod halüsinasyonlarını hafifletmek adına, kod tamamlama ve inceleme sırasında düşünce talimatı mekanizması kullanılır. Deney sonuçları, CHATDEV’in verimliliği ve maliyet etkinliğini vurgulamaktadır.
- Geliştirme sürecini sohbet zinciri ile ardışık alt görevlere ayırma önerisi, iki rol arasında etkili işbirliği ve karşılıklı inceleme gereksinimidir. Bu yaklaşım, kullanıcı denetimini, hata teşhisini ve spesifik alt görevlere yoğunlaşmayı teşvik eder.
- Kod halüsinasyonlarına karşı, kodlama ve inceleme aşamalarında düşünce talimatı mekanizması kullanılır. Eğitmen, belirli yönlendirmelerle kod değişiklikleri sağlar.
- CHATDEV’in deneyleri, otomatik yazılım geliştirme sürecinin verimliliğini ve maliyet etkinliğini belgeler. Etkili iletişim ve karşılıklı inceleme, doğru kararlar almayı destekler.
CHATDEV
Doğal dil işlemedeki LLM halüsinasyonlarına benzer biçimde, yazılım sistemlerini LLM’lerle doğrudan oluşturmak bazı kod halüsinasyonlarına yol açabilir. Bu sorunlar, belirsiz görev tanımlamalarından ve karşılıklı incelemenin eksikliğinden kaynaklanır. Bu sorunları çözmek amacıyla CHATDEV adında sanal bir sohbet destekli yazılım teknoloji şirketi kurduk. Bu şirket, çeşitli uzmanlardan oluşan ajanlarla, bir yazılım görevini tamamlamak için işbirliği yapar. Bu yaklaşım, yazılım geliştirme sürecini simüle ederken büyük dil modellerini temel olarak kullanır ve kod halüsinasyonlarını minimize eder.
SOHBET ZİNCİRİ
CHATDEV, yazılım geliştirme sürecini şelale modeliyle uygular; bu model tasarlama, kodlama, test etme ve belgelendirme aşamalarını içerir. Bu aşamaların her biri, etkili bir iletişim ve karşılıklı etkileşim gerektirir. Bu karmaşık süreci daha anlaşılır kılmak için, her aşamayı belirli görevlere bölen ve iki belirgin rol (eğitmen ve asistan) içeren atomik sohbetlere ayıran bir mimari öneriyoruz. Bu sohbetler “sohbet zinciri” adlı bir yapı içinde düzenlenir. Eğitmen, her sohbeti başlatır ve yönlendirirken, asistan uygun çözümler sunar ve tartışmalara katılır. Bu yapı, hataların erken teşhis edilmesine, karar alma süreçlerinin şeffaflaştırılmasına ve ara çıktıların incelemesine olanak tanır, ayrıca etkili işbirliğini destekler.
TASARIM
Tasarım aşamasında, CHATDEV’deki CEO, CPO ve CTO rolleri ile başlangıç fikrini bir insan müşteriden alır. Sohbet zinciri, bu aşamayı, yazılımın modalitesi ve programlama dili gibi kararlarına göre atomik sohbetlere böler.
Rol atama sistemi: Bu sistem, sohbet başlamadan önce her “ajan” adlı karaktere bir rol atıyor. Bir ajan “öğretmen” olarak işlev görürken, diğeri “yardımcı” rolünü üstlenir. Öğretmen, bir CEO gibi hareket ederek planlar yapar, yardımcı da görevleri yerine getirir. Bu rolleri doğru şekilde yerine getirebilmeleri için özel bir yöntem kullanıyoruz. Bu yöntem, ajanların ne yapması gerektiği, nasıl iletişim kurmaları gerektiği ve ne zaman durmaları gerektiği gibi bilgileri içeriyor. Amaç, ajanların gereksiz ya da yanıltıcı bilgiler vermemesi ve sürecin düzgün ilerlemesini sağlamak.
Hafıza akışı: Bu sistem, ajanların önceki sohbetlerini kaydediyor, böylece sonraki kararlarını daha bilinçli bir şekilde alabiliyorlar. Öğretmen ve yardımcı arasındaki mesajlar kaydedilir ve bu mesajlar, sonraki adımlarda ne yapılacağına karar vermek için kullanılır. Mesajları takip etmek için bazı matematiksel işlemler kullanıyoruz, ama asıl mesele bu: Sohbet ilerledikçe, eski mesajları hatırlayarak yeni mesajlar oluşturuyoruz. Ayrıca, her iki taraf da bir konuda hemfikir olduğunda belirli bir formatla sonlandırma mesajı oluşturuyoruz. Bu, mevcut sohbetin sona erdiğini gösteriyor.
Öz yansıma: Bazen, iki taraf arasında anlaşmaya varıldığını gözlemliyoruz, ama önceden belirlenmiş iletişim kurallarını başlatmıyorlar. Böyle durumlarda, “öz-yansıma” adında bir yöntem kullanıyoruz. Bu yöntemde, geçmiş sohbetlerin tüm bilgilerini hatırlatarak yardımcıya sohbetin özetini sormak için yeni bir “sahte sorumlu” oluşturuyoruz. Bu, yardımcının sohbet sırasında yapılan öneri ve tartışmalara dikkatlice bakmasını teşvik ediyor.
Kodlama
Kodlama aşamasında, CTO, programcı ve sanat tasarımcısı olarak üç temel rol bulunmaktadır. CTO, programcıdan belirli bir formatla yazılım sistemi oluşturmasını ister. Programcı bu isteği yerine getirirken, tasarımcı da kullanıcı için grafik simgelerle etkileşimli bir arayüz tasarlar. Tasarımcı, dış metinten görüntü araçları kullanarak bu arayüzü görsel olarak çekici kılar. Programcı daha sonra bu görselleri sisteme entegre eder.
Kod Yönetimi : CHATDEV, kompleks yazılım sistemlerini oluşturmak için Python gibi nesne yönelimli dilleri tercih eder. Bu yaklaşım, modülerliği sayesinde işbirliğini ve hataların kolayca giderilmesini sağlar. Kalıtım yoluyla kodun tekrar kullanılabilirliği, işleri basit ve verimli kılar. En son kod sürümüne odaklanmak için eski kod sürümlerini bir “sürüm evrimi” mekanizmasıyla sınırlıyoruz. Programcı, Git komutları ile projeyi yönetir ve her önerilen kod değişikliği yazılımın sürüm numarasını artırır. Bu yöntemler, kod sorunlarını adım adım çözer ve uzun kodlarla çalışmak için idealdir.
Düşünce Talimatı: Geleneksel soru cevaplama yöntemi, kod yazma gibi konularda yanıltıcı ya da hatalı bilgilere yol açabilir. Özellikle, belirli bir kod parçasının tüm eksik kısımlarını tamamlamanızı istediğinizde, bu direkt talimat bazen beklenmeyen ve yanıltıcı sonuçlar doğurabilir. Bu tür yanıltıcı sonuçlara “halüsinasyon” denir. Bu problemi çözmek amacıyla, “düşünce talimatı” adında bir yöntem öneriyoruz. Bu yöntem, sorunu adım adım ve daha spesifik şekilde ele almayı amaçlar. Bu, problemi daha küçük parçalara bölerek çözmeye benzer. Bu yaklaşımın nasıl çalıştığını Şekil 4(a) ve 4(b) göstermektedir.
Test
İnsan programcılar için bile, ilk denemede yazdıkları kodun her zaman hatasız olması garantili değildir. Yanlış kodları hemen atmak yerine, insanlar genellikle kodun çalıştırma sonuçlarını inceleyerek hataları bulup düzeltirler. CHATDEV’de test aşaması üç role sahiptir: programcı, inceleyici ve testçi. Bu süreç, kod incelemesi (programcı ve inceleyici) ve sistem testi (programcı ve testçi) gibi sırasıyla yapılacak görevleri içerir. Kod incelemesi, kaynak kodu inceleyerek olası sorunları belirler. Sistem testi ise programın doğru çalışıp çalışmadığını kontrol eder.
Pratikte, sadece bir yorumlayıcıdan gelen geri bildirimlere dayanarak iki ajanın iletişim kurmasının hata içermeyen bir sistemle sonuçlanmadığını gördük. Programcının değişiklikleri, geri bildirimleri tam olarak takip etmeyebilir. Bunu çözmek için, hataları düzeltme düşüncelerini talimatlarda açıkça ifade etmek için bir yöntem kullanıyoruz. Testçi, yazılımı çalıştırır, hataları analiz eder, değişiklikleri önerir ve programcıya ne yapması gerektiği konusunda talimat verir. Bu süreç, olası hatalar giderilene ve sistem başarılı bir şekilde çalışana kadar devam eder.
Bir yorumlayıcının detaylı mantık sorunlarını belirlemekte zorlandığı durumlarda, yazılım testlerinde bir insanın katılımı opsiyonel hale gelir. CHATDEV, bir inceleyici veya testçi gibi geri bildirim ve önerilerde bulunmak için insanların doğal dilde iletişim kurmalarına olanak tanır. CHATDEV, insanların verdikleri geri bildirimleri anlayarak yazılımı daha iyi hale getirmek için kullanır.
Dokümantasyon
Tasarım, kodlama ve test aşamalarından sonra, CHATDEV dört ajanı (CEO, CPO, CTO ve programcı) yazılım projesi dokümantasyonu oluşturmak için kullanır. Büyük dil modelleri kullanarak, doküman oluşturma için içerik örnekleriyle birlikte few-shot istemi kullanıyoruz. CTO, çevresel bağımlılıklar için yapılandırma talimatlarını sağlaması için programcıya talimat verir, bunun sonucunda requirements.txt gibi bir belge ortaya çıkar. Bu belge, kullanıcıların çevreyi bağımsız olarak yapılandırmasına olanak tanır. Aynı zamanda, CEO, gereksinimleri ve sistem tasarımını CPO’ya ileterek bir kullanıcı kılavuzu oluşturmasını sağlar.
Deneysel Çalışmalar
Deneysel kurulumumuz, çoklu ajan yazılım geliştirmesini simüle etmek için “gpt3.5-turbo-16k” versiyonundaki ChatGPT’yi kullanır. Dil modeli sıcaklığı kontrol edilmiş üretim için 0.2 olarak ayarlanmıştır. Kodlama aşamasında, kod tamamlama için en fazla 5 deneme yapmamıza izin verilir. Gözden geçirici, değişiklikleri önermek için 5 sohbet yapabilir ve test aşamasında en fazla 5 yazılım sistemi testi yapılır. Python tabanlı sistemler için, test için yorumlayıcı olarak Python 3.8.16'yı kullanıyoruz. Camel, 20 programlama dili, 50 alan ve alan başına 50 görev içeren bir talimat takip diyalog veri kümesi hazırlamıştır. Bu geniş görev setinden, CHATDEV yazılım geliştirmemizde analiz için temel oluşturacak şekilde rastgele 70 görev seçtik.
Yazılım İstatistikleri: CHATDEV tarafından üretilen yazılım sistemleri üzerinde istatistiksel bir analiz gerçekleştirdik. Toplam diyalog sırası, tüketilen token’ler, yazılım dosyaları, görsel varlıklar ve sürüm güncellemeleri gibi anahtar metrikleri inceledik. Tablo 1 bu metrikleri sunarak, iletişim temelli yazılım geliştirme süreci hakkında değerli içgörüler sağlar. CHATDEV’in gelişimine kapsamlı bir genel bakış sunar; sürümleme, dosya bileşimi, kod karmaşıklığı ve geliştirme iterasyonları gibi yönleri kapsar.
Oluşturulan yazılım tipik olarak ortalama 4.26 dosya ile 2 ila 8 kod dosyasını içerir. Varlık dosyaları, harici araçlar kullanılarak sanat tasarımcısı tarafından oluşturulur ve 0'dan 21'e kadar değişir, ortalama 8.74 dosya ile sonuçlanır. Programcıların, “Kullanıcının verilerini girebileceği metin giriş alanı”, “Finansal gösterge tablosu için arka plan görüntüsü” ve “Oyundaki oyuncu karakterini temsil eden görüntü” gibi görseller oluşturmak için tasarımcıya gönderdiği kısa metin tanımlamalarına örnekler vardır. Yazılıma tipik olarak bağımlılık gereksinimleri özellikleri, kullanıcı kılavuzları, geliştirme günlükleri ve yazılım meta bilgisi gibi ortalama 4 ila 5 belge dosyası eşlik eder.
CHATDEV tarafından geliştirilen yazılım tipik olarak 39 ila 359 kod satırı arasında değişir, ortalama 131.61 satır ile sonuçlanır. Veriler, CHATDEV’in nispeten küçük ölçekli kod üretme eğiliminde olduğunu göstermektedir. Bu kısmen, nesne tabanlı programlamanın tasarımından kaynaklanmaktadır; kodun yeniden kullanılabilirliği, miras yoluyla kodun yeniden kullanılmasını sağlar, böylece gereksizliği azaltır. Kullanıcının daha az spesifik bir görev belirttiğinde, CHATDEV tarafından üretilen kaynak kodun daha kısa olduğunu, ortalama 110.97 satır civarında olduğunu da gözlemledik. Bu, CHATDEV’in belirsiz görevleri yerine getirmek için yüksek seviyeli mantığı kullanmasına, sık sık arayüz temsili için bilgi yazdırma üzerine odaklanan kod üretmesine bağlanmaktadır. Bu nedenle, istenen yazılım özellikleri, sistem kuralları, kullanıcı arayüzü tasarımı ve diğer detaylı özellikler gibi CHATDEV’e spesifik talimatlar sağlamamızı öneriyoruz.Daha açık ve spesifik talimatlar sağlayarak, kullanıcılar CHATDEV’in özel gereksinimleriyle uyumlu daha kapsamlı ve özel kodlar üretmesini yönlendirebilirler. Ortam bağımlılıklarının sayısı, gereken dış yazılım bileşenlerini gösterir ve 1 ile 5 arasında değişir, ortalama 2.90 bağımlılıkla sonuçlanır. CHATDEV’in yazılım ortamı tipik olarak numpy, matplotlib, pandas, tkinter, pillow veya flask içerir. Yazılım için kullanıcı kılavuzu 31 ila 232 satır arasında değişir ve ortalama 53.96 satırlıktır. Tecrübemize dayanarak, kullanıcı kılavuzu genellikle Giriş, Hızlı Kurulum, Ana Özellikler, Kullanım Talimatları gibi bölümleri kapsar.
Yazılım için sürüm güncellemelerinin sayısı 5 ila 42 arasında değişmektedir ve ortalama 13.23 güncellemeyle sonuçlanmaktadır. Bu, kaynak kodun yaklaşık olarak ortalama 13 değişiklik geçirdiğini gösterir, bu da kod tamamlama, kodlama ve test dahil olmak üzere yazılım geliştirme süreci boyunca ajanlar arasındaki işbirliğiyle kod halüsinasyon sorunlarını hafifletme çabasını yansıtmaktadır. Yazılımın maksimum test sayısını geçemediği istisnai durumlarda, CHATDEV tam ölçekli yazılım yeniden mühendisliği yaparak önceden tedbir alır. Çoğu durumda, yazılım geliştirme süreci ortalama 1.40 döngü ile 1 ila 5 geliştirme döngüsü içerir.
Deneylerimizde, gereken yazılım bağımlılıklarını doğrudan yükleyerek kum havuz ortamını sorunsuz bir şekilde kurduk. Ardından ana fonksiyonu kullanarak oluşturulan yazılımı çalıştırdık. Dikkat çekici bir şekilde, yazılım sistemlerinin yaklaşık %86.66'sı kusursuz bir şekilde çalıştı, geliştirdiğimiz yazılımın sağlamlığını ve güvenilirliğini sergiledi. Ancak, yazılımların küçük bir kısmı, %13.33'lük bir bölümü, çalıştırma hatalarıyla karşılaştı. Başarısız yazılım yaratımlarını analiz ettiğimizde, iki ana etken belirledik. İlk olarak, durumların %50'sinde, başarısızlık API’nin belirteç uzunluğu sınırına atfedildi. Bu sınırlama, kod üretimi için belirtilen uzunluk sınırlaması içinde tam kaynak kodunu elde etmeyi engelledi. Bu tür zorluklar, özellikle karmaşık yazılım sistemleriyle veya kapsamlı kod üretimi gerektiren senaryolarla başa çıkmakta açıkça belirgindir. Başarısız yazılım yaratımlarının geri kalan %50'si, esasen dış bağımlılık sorunlarından etkilendi. Bu sorunlar, belirli bağımlılıkların bulutta mevcut olmaması veya yanlış sürümlenmesi sonucunda ortaya çıktı ve belirli uygulama programlama arayüzlerinin (API’ler) mevcut sürümde kullanılamamasına neden oldu. Bu dış bağımlılıkla ilgili sorunlar, düzgün bir çalışma ve işlevsellik sağlamak için gereken yazılım bileşenlerinin titiz bir yönetimini ve koordinasyonunu vurgulamaktadır. Genel olarak, küçük bir başarısızlık yüzdesiyle karşılaşmamıza rağmen, deneyimlerimiz, CHATDEV’in çalıştırılabilir yazılım sistemleri oluşturmada uygulanabilirliğini ve etkinliğini göstermektedir, sistemlerin çoğunluğu başarıyla çalışmaktadır.
Süre Analizi: Farklı istek komutlarını kullanarak CHATDEV ile yazılım üretim süresini incelemek için bir süre analizi gerçekleştirdik. Geliştirme sürelerindeki bu değişkenlik, verilen görevlerin değişen karmaşıklığına ve belirginliğine işaret eder. Şekil 6'daki grafik, bu dağılımın görsel bir temsilini sunmaktadır. En uzun yazılım üretim süresi, grafiğin sol tarafındaki en uzun çubukla temsil edilmekte olup, 1030.00 saniyedir. Bu uzun süre, inceleyici ve programcı arasındaki geniş kapsamlı diyalog ve iletişimden kaynaklanmaktadır ki bu da detaylı bir değişiklik planına yol açar. Buna karşın, grafiğin sağ ucundaki en kısa çubuk minimum yazılım geliştirme süresini, yani 169.00 saniyeyi gösterir. Bu kısa süre, kodlama ve test aşamalarında önemli hataların olmamasına ve daha az diyaloga bağlanır. Ortalama olarak, CHATDEV kullanılarak küçük ölçekli yazılım ve arayüzlerin geliştirilmesi 409.84 saniye, yani 7.00 dakikadan az sürer. Buna karşılaştırıldığında, geleneksel özel yazılım geliştirme döngüleri, çevik yazılım geliştirme yöntemleri içinde bile, genellikle her döngü için 2 ila 4 hafta veya hatta birkaç ay sürebilir.
Diyalog İstatistikleri: CHATDEV’de, yazılım geliştirmeyi kolaylaştırmak için bir sohbet zinciri mekanizması kullandık. Her sohbet zinciri, belirli bir görev için yazılımın üretimini temsil eder ve çoklu konuşma turundan oluşur. Bu turlar sırasında, ajanlar, dil seçenekleri, çözüm önerme ve son kararları alma gibi önceden tanımlanmış alt görevleri ele almak için tartışmalara girer. Tüm alt görevleri tamamladıktan sonra, bir sohbet zinciri yazılım ürününün geliştirilmesiyle sona erer. Durum çalışmamız için görevlerde, sohbet zincirlerini analiz ettik ve toplam konuşma sayısı ve kullanılan komut belirteçleri de dahil olmak üzere istatistikleri topladık. Bu istatistikler Tablo 2'de sunulmuştur.
Ortalama olarak, bir sohbet zinciri 45.60 konuşma içerir, minimum 24 ile maksimum 104 arasında değişir. Konuşma sayısı, alt görevlerin başarılabilirliği ile ilgili tartışmaları, üretilen kod kalitesinin değerlendirmelerini, test üzerine geri bildirimleri, iyileştirme önerilerini ve aslında yazılım kod dosyalarının ve belgelerinin yazılmasını ve oluşturulmasını kapsar. Benzer şekilde, CHATDEV’in soyut görevler için belirli görevlere kıyasla daha az konuşma iletişiminde bulunduğunu gözlemledik, ortalama 34.40 konuşma ile. Diyalogların analizi, tasarım ve kodlama aşamalarında, ajanların birçok gereksinimin detaylarına dalmak veya değişiklik önerileri önermek için çok sayıda tartışma turu yaptığını gösterdi. Bu tartışmalar, eldeki belirli görevlerle ilgili bilinçli kararlar almayı amaçlıyordu. Bu olgu, belirli görevlerin genellikle daha detaylı tartışma ve müzakereyi içerdiği gerçek dünya uygulamalarıyla uyumludur.
CHATDEV’de yazılım üretimi sırasında API etkileşimlerini ve belirteç kullanımını izledik. Ortalama olarak, CHATDEV tek bir yazılımı geliştirmek için 36,902.23 komut belirteci, 11,567.37 tamamlama belirteci ve toplamda 48,469.60 belirteç gerektirir. Ortalama toplam yazılım üretim maliyeti yaklaşık olarak $0.15693'tür. CHATDEV ile yazılım geliştirmenin toplam maliyetini belirlemek için, tasarımcı tarafından üretilen görsellerin maliyetini de göz önünde bulunduruyoruz. Ortalama tasarımcı maliyeti, ortalama olarak 8.74 grafik yaratımı içeren her yazılım üretimi için yazılım başına $0.1398'dir. Böylece, CHATDEV’de ortalama yazılım geliştirme maliyeti $0.2967'dir, bu da geleneksel özel yazılım geliştirme şirketlerinin giderlerinden önemli ölçüde düşüktür.
İnceleyici-Programcı Diyalog Analizi: Bu bölümde, kodlama aşamasında kodla ilgili konularda inceleyici ve programcı arasındaki temel değişimlere dalıyoruz. İnceleyicinin kodlama aşamasında programcının kaynak kodunu değerlendirmelerini özetliyoruz. Şekil 7, inceleyicinin önerilerini pasta grafikleri şeklinde görsel olarak sunar. Figürde gösterildiği gibi, kod incelemesi sırasında inceleyici-programcı iletişiminde en sık tartışılan konu “yöntemlerin uygulanmamış olmasıdır” (%34.85). Bu zorluk, genellikle çekirdek işlevselliğin daha sonrası için yer tutucu etiketler (Python’da “pass” gibi) almasının gerektiği karmaşık modeller için kod oluşturmada ortaya çıkar. Ek olarak, diyalog sıkça “modüllerin içe aktarılmamış olması” konusunu ele alır (%19.70). Bu sorun, üretilen kodun küçük detayları gözden kaçırma eğiliminde olduğu kod üretiminin doğasından kaynaklanmaktadır. Ancak, kod üretimi bağlamında kodun çalıştırılabilirliğini sağlamak hayati önem taşır. Neyse ki, bu makalede önerilen düşünce talimatı mekanizması, inceleyicinin eksik yöntemleri belirlemesini zorunlu kılarak ve programcının bunları doldurmasını gerektirerek bu sorunları etkili bir şekilde ele alır. Bu mekanizma, görevlerin büyük modellere dayanarak tamamlandığı ancak belirli parçaların eksik olduğu diğer senaryolara da uygulanabilir. İlginç bir şekilde, inceleyici kodun sağlamlığının önemini vurgular. Gelecekteki olası istisnaları ele alma düşüncelerini vurgular ve yinelenen kategorilerden kaçınma konusunda ipuçları sunar (%3.03). Ayrıca, inceleyici kodda kullanılmayan sınıflar hakkında önerilerde bulunur (%1.52), sonsuz döngüleri belirtir (%1.52) ve uygun ortam başlatmanın gerekliliğini vurgular (%1.52).
Tester-Programcı Diyalog Analizi: Benzer şekilde, test aşaması sırasında test yapan ile programcı arasındaki hata ayıklama diyalogunu analiz ediyoruz ve karşılaşılan ana hata türlerini kategorilendiriyoruz. Sonuçlar Şekil 8'de sunulmuştur. Şekilde gözlendiği üzere, test yapan ile programcı arasındaki en sık karşılaşılan hata ayıklama sorunu “modül bulunamadı” (%45.76) ile olup, durumların neredeyse yarısını oluşturmaktadır. Bu, modelin, basitliklerine rağmen, çok ince detayları gözden kaçırma eğilimini yansıtmaktadır. Neyse ki, bu makalede önerilen düşünce talimatı mekanizması ile bu tür hatalar genellikle gereken sınıfı veya yöntemi içe aktararak kolayca çözülebilir. İkinci en yaygın hata türleri “özellik hatası” ve “bilinmeyen seçenek” olup, her biri durumların %15.25'ini oluşturmaktadır. “Özellik hatası”, sınıf özelliklerinin kullanımındaki hatalara işaret ederken, “bilinmeyen seçenek” yöntem çağrılarının parametrelerindeki hatalara işaret eder. “İçe aktarma hatası” adlı başka bir yaygın hata türü, “modül bulunamadı”ya benzerdir ve esas olarak içe aktarma ifadelerindeki hatalardan kaynaklanır, örneğin yanlış bir sınıfı içe aktarmak veya yanlış bir içe aktarma yolu kullanmak. Bu yaygın hata türlerine ek olarak, CHATDEV, düzgün başlatılmamış GUI (%5.08), yanlış yöntem çağrısı (%1.69), eksik dosya bağımlılıkları (%1.69), kullanılmayan modüller (%1.69), dekoratör sözdizimi hataları (%1.69) ve daha fazlası gibi nispeten nadir hata türlerini tespit etme yeteneğine sahiptir.
Vaka Analizi: Şekil 9, CHATDEV’in bir Gomoku oyununu (a.k.a. “Beş Sıralı” ve “Gobang” olarak da bilinir) geliştirdiği bir örneği sergiliyor. Solda, GUI olmadan oluşturulan basit bir yazılımın sonucunu görüyoruz. Bu oyun sadece bir komut terminali üzerinden oynanabilir, bu da onun etkileşimini ve genel zevkini sınırlar. Buna karşın, GUI tasarımını dahil ederek CHATDEV, görsel olarak çekici bir küçük oyun yaratabilir. Bu versiyon, etkileşim ve kullanıcı deneyimi açısından arayüzsüz versiyonu geride bırakır, daha keyifli ve çekici bir oyun ortamı sunar. Ayrıca, CHATDEV’in tasarımcısı, GUI’nin estetiğini ve kullanılabilirliğini artırmak için ek grafikler yaratmak adına programcıya yardımcı olabilir, işlevselliğinden ödün vermeden. Tasarımcı tarafından dikkatlice hazırlanan bu grafikler, GUI’yi daha görsel olarak hoş ve kullanıcı dostu hale getirmeye katkıda bulunur.
Ayrıca, insan kullanıcılar sanat tasarımcısı tarafından oluşturulan görsellerden memnun değilse, CHATDEV yazılımı tamamladıktan sonra orijinal görselleri manuel olarak değiştirme esnekliğine sahiptirler. Bu, yazılımın temel işlevselliğini etkilemeden kullanıcıların tercihlerine göre daha fazla özelleştirmeye izin verir. Kullanıcılar, görsel öğeleri kendi zevklerine göre uyarlayabilir, bu da onların bireysel tercihleriyle uyumlu kişiselleştirilmiş bir yazılım deneyimi sunar.
Daha kapsamlı bir anlayış için, tasarım aşamasında programlama dili seçimlerini yapan diyalog süreçlerini örnekliyoruz. Gomoku oyununun sohbet zincirinden alınan daha fazla örnek diyalog, Ek A’da gösterilmektedir, bu diyalogda tarafımızdan tasarlanan istekler ve her aşamada ajanlar arasındaki diyalog süreci de dahil olmak üzere. Lütfen, yer kısıtlamaları nedeniyle, diyalog sırasında sadece anahtar bilgileri gösterdiğimize ve aşırı detaylı bilgileri atladığımıza dikkat edin.
Tartışma
CHATDEV, eğitimsiz, verimli ve maliyet etkin bir yazılım geliştirme paradigmı sunsa da, daha fazla araştırma ve çözüm gerektiren potansiyel risklerin ve sınırlılıkların var olduğunu kabul ediyoruz.
Büyük dil modelinin sıcaklık parametresini çok düşük bir değere ayarladığımızda bile, üretilen çıktıda doğal bir rastgelelik gözlemliyoruz. Sonuç olarak, üretilen her yazılım farklı çalışmalarda değişebilir. Bu nedenle, bu teknoloji varyasyonların kabul edilebilir olduğu açık ve yaratıcı yazılım üretimi senaryoları için en uygun olanıdır. Ayrıca, yazılımın kullanıcıların ihtiyaçlarını karşılamadığı durumlar da bulunmaktadır. Bu, belirsiz kullanıcı gereksinimlerine ve metin veya kod üretimindeki doğal rastgeleliğe bağlanabilir.
Tasarımcı ajan, görseller oluşturabilse de [35], doğrudan üretilen görsellerin her zaman GUI estetiğini artırmayabileceğini kabul etmek önemlidir. Bazen aşırı karmaşıklığa yol açabilirler, bu da kullanıcı deneyimini engelleyebilir. Bu, her görselin bağımsız olarak üretildiği ve doğrudan görsel bir korelasyonun eksik olduğu için böyledir. Bunu ele almak için, kullanıcılara GUI’yi bir sistem hiperparametresi olarak özelleştirme seçeneği sunduk, bu özelliği etkinleştirip etkinleştirmemeye karar verme imkanı tanıdık.
Ayrıca, büyük dil modeli, doğuştan gelen önyargıları sergileyebilir [30], bu da gerçek programcıların problem çözme düşüncesiyle mutlaka örtüşmeyen kod desenlerinin üretilmesine neden olabilir. Risklerle ilgili olarak, mevcut büyük dil modellerinin tamamen zararsız olacak şekilde ayarlanmadığına dikkat çekmek önemlidir, bu da onları zararlı amaçlar için kötü amaçlı kullanıcılar tarafından potansiyel kötüye kullanıma açık hale getirir. Ayrıca, üretilen yazılım şu anda hassas dosya işlemleri için kötü niyetli niyet tanımlamasından yoksundur. Bu nedenle, kullanıcılardan herhangi bir gereksiz veri kaybını önlemek için yazılımı çalıştırmadan önce kendi kod incelemelerini yapmaları önerilir.
Ayrıca, CHATDEV çerçevemizin yazılım seviyesi görev tamamlama yeteneklerinin değerlendirmesi, üretilen görevlerin geniş kapsamı ve heterojen doğası nedeniyle büyük zorluklar sunmaktadır. Bu, birçok alan uzmanının aktif katılımını zorunlu kılar.
Araştırma potansiyel olarak gerçek dünyada junior programcılar ya da mühendislere yardımcı olabilirken, yüksek seviyeli veya büyük ölçekli yazılım gereksinimleri için mükemmel kaynak kodu üretmek sistemi için zordur. Bu zorluk, ajanların özel uygulama detaylarını otomatik olarak belirleme yeteneğinin sınırlı olmasından kaynaklanmaktadır ve bu genellikle uzun süren tartışmalara neden olmaktadır. Ek olarak, büyük ölçekli yazılım geliştirmek, hem inceleyiciler hem de testçiler için zorlayıcıdır, çünkü verilen zaman kısıtlamaları içinde kusur veya zafiyetleri belirlemek zorlaşır.
İlgili Çalışmalar
Derin Öğrenme Temelli Yazılım Mühendisliği Yazılım mühendisliği: Yazılımı metodik, titiz ve ölçülebilir bir şekilde tasarlama, geliştirme, test etme ve bakımını yapma sürecidir. Yazılım mühendisliğinin karmaşıklığı nedeniyle, birçok karar sezgiye dayanarak alınır ve en iyi ihtimalle kıdemli geliştiricilerle danışılır. Derin öğrenme (DL) tekniğinin hızla gelişmesiyle birlikte, birçok araştırmacı DL’yi SE’ye uygulamaya adamıştır. Varolan DL temelli SE çalışmaları yazılım mühendisliğindeki yaşam döngüsünün beş aşamasına ayrı ayrı odaklanmaktadır [14]:
- Yazılım gereksinimleri, kullanıcı taleplerini analiz etmek ve yazılım için gereksinimleri belirtmektir.
- Yazılım tasarımı, yazılımın geliştirilmesi için gerekli olan yazılım çerçevesi, modüller, protokoller ve diğer özelliklerin belirtimidir.
- Yazılım uygulaması, tasarımı uygulamak için yazılımın ayrıntılı oluşturma sürecidir.
- Yazılım testi, bir dizi test vakasında yazılımın beklenen davranışları sağlayıp sağlayamayacağını doğrulamaktır.
- Yazılım bakımı, yazılım kullanıcıları için gerekli desteği sağlamaktır, örneğin dokümantasyon oluşturma.
Çoklu Ajan İşbirliği Büyük dil modelleri (LLM) birçok alanda önemli bir yetkinlik sergilemiştir. Son zamanlarda, LLM’ler arasındaki etkileşimleri kullanarak birkaç hedefe ulaşma konusunda bazı çalışmalar yapılmıştır.
Çoklu Ajan İşbirliği:
Büyük dil modelleri (LLM’ler) birçok alanda dikkate değer bir yetkinlik sergilemiştir. Son zamanlarda, LLM’ler arasındaki etkileşimleri kullanarak çeşitli hedeflere ulaşmaya yönelik birçok çalışma yapıldığı görülmüştür.
1) **Davranış Simülasyonu:**
— Park ve ark. inandırıcı insan davranışını simüle etmek için bir sandbox ortamında çoklu jeneratif ajanlar oluşturur.
— Wang ve ark. öneri senaryosunda kullanıcı davranışlarını simüle etmek için çoklu ajanları kullanır.
2) **Veri İnşası:**
— Wei ve ark. çok taraflı konuşmaları toplamak ve değerlendirmek için farklı rollerde ajanları görevlendirir.
— Li ve ark. karmaşık görevler için çeşitli ve detaylı talimatlar oluşturmak üzere ajanları kullanan bir rol yapma çerçevesi önerir.
3) **Performans İyileştirmesi:**
— Salewski ve ark. ajanın farklı rolleri üstlenmesinin performanslarını artırabileceğini bulmuştur.
— Du ve ark. çoklu ajan tartışmasını kullanarak gerçek bilgi doğruluğunu ve akıl yürütme doğruluğunu artırır.
— Liang ve ark. kendi kendine yansıma içindeki düşünce bozulması sorununu çözmek için birbirleriyle tartışan çoklu ajanları kullanır.
— Fu ve ark. ajan geri bildiriminden öğrenerek alıcı-satıcı anlaşması gibi bir pazarlık oyununda birbirlerini geliştirebilecek çoklu ajanların olduğunu bulmuştur.
— Liu ve ark. LLM’ler için sosyal uyumu gerçekleştirmek amacıyla simüle edilmiş bir sosyal etkileşim sandbox’u tasarlar.
— Talebirad ve ark. bir siyah kutu ortamında karmaşık görevleri ele almak için benzersiz özelliklere ve rollere sahip çoklu ajanları tanıtır.
SONUÇ
Bu çalışmada, yazılım geliştirme sürecine katılan çoklu roller arasında etkili iletişim ve işbirliğini kolaylaştırmak için LLM’leri kullanan bir sohbet tabanlı uçtan uca yazılım geliştirme çerçevesi olan CHATDEV’i sunuyoruz. CHATDEV, geliştirme sürecini sohbet zinciri kullanarak ardışık atomik alt görevlere ayırarak detaylı bir odak sağlar ve her alt görev için istenen çıktıları teşvik eder. Ayrıca, düşünce talimatı mekanizması, kod tamamlama, inceleme ve test sırasında programcıları belirli kod modifikasyonlarıyla yönlendirerek kod halüsinasyonlarıyla ilgili zorlukları hafifletir.
İlerleyen dönemlerde, CHATDEV’in performansını ve etkinliğini artırmak için iletişim protokollerini rafine etmek ve her sohbette etkileşim dinamiklerini optimize etmek üzerine daha fazla araştırma yapılabilir. CHATDEV ajanları, iş akışı ve geliştirme ortamlarındaki iyileştirmeleri ve ilerlemeleri keşfetmeye devam edeceğiz. Bizim araştırmamız, yazılım üretiminde daha büyük bir verimliliğe ulaşmayı, sohbet zincirlerinin uzunluğunu azaltarak veya alt görev çözme mantığı ve stratejilerini optimize ederek doğal dil işleme, yazılım mühendisliği ve kolektif zeka alanında yeni bir sınırın başlangıcını işaretlemeyi amaçlamaktadır.
KATILIMCILAR
Yazarların katkıları şu şekildedir: Projenin formülasyonu sırasında, Chen Qian, Xin Cong ve Cheng Yang model mimarisinin tasarımını yönetti. Modelin yapısını rafine etme sürecinde, Dahai Li, Zhiyuan Liu ve Maosong Sun değerli rehberlik sağladı. Ana makale, Chen Qian, Xin Cong, Weize Chen, Yusheng Su ve Juyuan Xu tarafından yazılmıştır; Cheng Yang, Weize Chen, Yusheng Su, Zhiyuan Liu ve Maosong Sun’un katkılarıyla açıklığını artırmıştır. Kamu erişilebilirliğini artırmak adına, Wei Liu, Yufan Dang ve Jiahao Li kapsamlı testlerle açık kaynak deposunun öncülüğünü yaptı; Wei Liu sistemi yeniden yapılandırdı ve optimize etti. Ek olarak, Wei Liu ve Yufan Dang, daha geniş bir dağıtımı sağlamak için çevrimiçi gösterimin geliştirilmesine öncülük etti.
Bu yazı ”Communicative Agents for Software Development” isimli makalenin Chat GPT-4 ile çevrilmiş Türkçe özetidir.