AI-modeller og plattformer

ChatDev : Kommunikative agenter for programvareutvikling

mm
Legg til Unite.AI blant dine foretrukne kilder på Google
ChatDev : AI Assisted Software Development

Programvareutviklingsbransjen er et område som ofte avhenger av både konsultasjon og intuition, kjennetegnet av intrikate beslutningsstrategier. Videre krever utvikling, vedlikehold og drift av programvare en disiplinert og metodelig tilnærming. Det er vanlig for programvareutviklere å basere beslutninger på intuition fremfor konsultasjon, avhengig av problemets kompleksitet. I et forsøk på å forbedre effektiviteten i programvareingeniørarbeid, inkludert effektiviteten i programvare og reduserte utviklingskostnader, utforsker forskere bruken av dyptlæringsbaserte rammer for å håndtere ulike oppgaver i programvareutviklingsprosessen. Med de siste utviklingene og fremgangene i dyptlærings- og AI-sektorene, søker utviklere måter å transformere programvareutviklingsprosesser og praksis. De gjør dette ved å bruke sofistikerte design implementert på ulike stadier av programvareutviklingsprosessen.

I dag skal vi diskutere ChatDev, en Large Language Model (LLM)-basert, innovativ tilnærming som har som mål å revolusjonere programvareutviklingsfeltet. Dette paradigmet søker å eliminere behovet for spesialiserte modeller under hver fase av utviklingsprosessen. ChatDev-rammen utnytter evnene i LLM-rammene, ved å bruke naturlig språkkommunikasjon til å forene og strømlinjeformele nøkkelprogramvareutviklingsprosesser.

I denne artikkelen vil vi utforske ChatDev, et virtuelt drevet selskap som spesialiserer seg på programvareutvikling. ChatDev adopterer vannfallmodellen og deler nøye programvareutviklingsprosessen inn i fire primære faser.

  1. Designing. 
  2. Koding. 
  3. Testing. 
  4. Dokumentasjon. 

Hver av disse fasene setter inn et team av virtuelle agenter som kodeprogrammere eller testere som samarbeider med hverandre ved hjelp av dialoger som resulterer i en sammenhengende arbeidsflyt. Chat-kjeden fungerer som en fasilitator og bryter ned hver fase av utviklingsprosessen i atomiske underoppgaver, slik at det blir mulig å ha doble roller, tillate forslag og validering av løsninger ved hjelp av kontekstbevisste kommunikasjoner som tillater utviklere å effektivt løse de spesifiserte underoppgavene. 

ChatDev : AI Assisted Software Development

ChatDevs instrumentale analyse demonstrerer at ikke bare er ChatDev-rammen ekstremt effektiv i å fullføre programvareutviklingsprosessen, men den er også ekstremt kostnadseffektiv, siden den fullfører hele programvareutviklingsprosessen for under en dollar. Videre identifiserer rammen ikke bare potensielle sårbarheter, men også lettelse av potensielle hallucinasjoner, samtidig som den opprettholder høy effektivitet og kostnadseffektivitet. 

ChatDev : En introduksjon til LLM-drevet programvareutvikling

Tradisjonelt er programvareutviklingsbransjen et område som bygger på grunnlag av en disiplinert og metodelig tilnærming, ikke bare for å utvikle applikasjoner, men også for å vedlikeholde og operere dem. Tradisjonelt sett er en typisk programvareutviklingsprosess en svært intrikat, kompleks og tidkrevende prosess med lange utviklingscykler, ettersom det er mange roller involvert i utviklingsprosessen, inkludert koordinering innen organisasjonen, tildeling av oppgaver, skriving av kode, testing og til slutt, dokumentasjon. 

De siste årene, med hjelp av LLM eller Large Language Models, har AI-samfunnet oppnådd betydelige milepæler i feltene datavisualisering og naturlig språkbehandling, og etter trening på “neste ord-prediksjon”-paradigmer, har Large Language Models vist sin evne til å returnere effektivt resultat på en rekke nedstrømsoppgaver som maskinoversettelse, spørsmålssvar og kodegenerering. 

Selv om Large Language Models kan skrive kode for hele programvaren, har de en stor ulempe : kodehallusinasjoner, som er ganske lik hallucinasjonene som oppstår i naturlig språkbehandling. Kodehallusinasjoner kan inkludere problemer som uoppdagede feil, manglende avhengigheter og ufullstendige funksjonsimplementeringer. Det er to hovedårsaker til kodehallusinasjoner. 

  • Mangel på oppgavebeskrivelse: Når generering av programvarekode skjer i ett enkelt steg, uten å definere oppgavens spesifikke detaljer, forvirrer dette LLM-ene, ettersom oppgaver i programvareutviklingsprosessen som analysering av brukerkrav eller valg av foretrukket programmeringsspråk ofte gir veiledende tenkning, noe som mangler fra de høynivåoppgavene som håndteres av disse LLM-ene. 
  • Mangel på kryss-eksaminasjon : Betydelige risikoer oppstår når en kryss-eksaminasjon ikke utføres, spesielt under beslutningsprosessene. 

ChatDev søker å løse disse problemene og muliggjøre at LLM-ene kan lage state-of-the-art og effektive programvareapplikasjoner ved å lage et virtuelt drevet selskap for programvareutvikling som etablerer vannfallmodellen og deler nøye programvareutviklingsprosessen inn i fire primære faser,

  1. Designing. 
  2. Koding. 
  3. Testing. 
  4. Dokumentasjon. 

Hver av disse fasene setter inn et team av virtuelle agenter som kodeprogrammere eller testere som samarbeider med hverandre ved hjelp av dialoger som resulterer i en sammenhengende arbeidsflyt. Videre bruker ChatDev en chat-kjede som fungerer som en fasilitator og bryter ned hver fase av utviklingsprosessen i atomiske underoppgaver, slik at det blir mulig å ha doble roller, tillate forslag og validering av løsninger ved hjelp av kontekstbevisste kommunikasjoner som tillater utviklere å effektivt løse de spesifiserte underoppgavene. 

I denne tilnærmingen analyserer ChatDev-rammen først kundens krav, genererer kreative ideer, designer og implementerer prototypsystemer, identifiserer og håndterer potensielle problemer, lager tiltalende grafikk, forklarer feilsøkingsinformasjon og genererer brukermanualer. Til slutt leverer ChatDev-rammen programvaren til brukeren sammen med kildekoden, brukermanualer og avhengighetsmiljøsspesifikasjoner. 

ChatDev : Arkitektur og virkemåte

Nå som vi har en kort introduksjon til ChatDev, la oss se på arkitekturen og virkemåten til ChatDev-rammen, startende med chat-kjeden. 

Chat-kjede

Som vi har nevnt i den forrige seksjonen, bruker ChatDev-rammen en vannfallmetode for programvareutvikling som deler programvareutviklingsprosessen inn i fire faser, inkludert designing, koding, testing og dokumentasjon. Hver av disse fasene har en unik rolle i utviklingsprosessen, og det er et behov for effektiv kommunikasjon mellom dem, og det er potensielle utfordringer som oppstår når man skal identifisere individer å samarbeide med og bestemme rekkefølgen av interaksjoner. 

For å håndtere dette problemet, bruker ChatDev-rammen en chat-kjede, en generalisert arkitektur som bryter ned hver fase inn i underatomiske samtaler, med hver av disse fasene som fokuserer på oppgave-orientert rollespill som involverer doble roller. Den ønskede utgangen for samtalen utgjør en vital komponent for målprogramvaren, og den oppnås som et resultat av samarbeid og utveksling av instruksjoner mellom agentene som deltar i utviklingsprosessen. Chat-kjede-paradigmet for mellomliggende oppgaveløsning er illustrert i bildet under. 

For hver enkelt samtale, initierer instruktøren først instruksjonene og deretter guider dialogen mot fullføring av oppgaven, og i mellomtiden følger assistentene instruksjonene lagt av instruktøren, gir ideelle løsninger og engasjerer i diskusjoner om løsningens gjennomførbarehet. Instruktøren og agenten engasjerer deretter i fler-rundesamtaler til de når enighet og anser oppgaven som fullført. Chat-kjeden gir brukerne en gjennomsiktig oversikt over utviklingsprosessen, kaster lys over veien for å fatte beslutninger og tilbyr muligheter for feilsøking når feil oppstår, noe som tillater sluttbrukerne å analysere og diagnostisere feil, inspisere mellomliggende utgang og gripe inn i prosessen hvis nødvendig. Ved å inkorporere en chat-kjede, er ChatDev-rammen i stand til å fokusere på hver enkelt underoppgave på en granulært skala som ikke bare muliggjør effektivt samarbeid mellom agentene, men også resulterer i rask oppnåelse av de nødvendige utgangene. 

Designing

I designfasen, krever ChatDev-rammen en initial idé som inndata fra den menneskelige klienten, og det er tre forhåndsdefinerte roller i denne fasen. 

  1. CEO eller Chief Executive Officer. 
  2. CPO eller Chief Product Officer. 
  3. CTO eller Chief Technical Officer. 

Chat-kjeden kommer deretter i spill og deler designing-fasen inn i sekvensielle underatomiske samtaleoppgaver som inkluderer programmeringsspråk (CTO og CEO) og modaliteten til målprogramvaren (CPO og CEO). Designing-fasen involverer tre nøkkelmekanismer: rolletildeling eller rollespesialisering, minnestrom og selvrefleksjon. 

Rolletildeling

Hver agent i ChatDev-rammen tildeles en rolle ved hjelp av spesielle meldinger eller spesielle promter under rollespillprosessen. I motsetning til andre konversasjonelle språkmodeller, begrenser ChatDev-rammen seg til å initiere rollespillscenariene mellom agentene. Disse promptene brukes til å tildele roller til agentene før samtalen. 

Først tar instruktøren ansvar for CEO og engasjerer i interaktiv planlegging, mens ansvar for CPO håndteres av agenten som utfører oppgaver og gir de nødvendige svarene. Rammen bruker “inception-prompt” for rollespesialisering som tillater agentene å fylle rollene effektivt. Instruktør- og assistentpromptene består av viktige detaljer om de tildelede rollene og oppgavene, avslutningskriterier, kommunikasjonsprotokoller og flere begrensninger som sikrer å forebygge uønskede atferd som uendelige løkker, uinformative svar og instruksjonsredundans. 

Minnestrom

Minnestrom er en mekanisme brukt av ChatDev-rammen som opprettholder en omfattende konversasjonsrekord av tidligere samtaler til en agent og assisterer i beslutningsprosessen som følger på en måte som er bevisst for uttalelse. ChatDev-rammen bruker prompter til å etablere de nødvendige kommunikasjonsprotokollene. For eksempel, når partene involvert når de kommer til enighet, en avslutningsmelding som tilfredsstiller et bestemt formateringskrav som (<MODALITY>: Desktop-applikasjon”). For å sikre overholdelse av det tildelede formatet, overvåker rammen kontinuerlig og tillater til slutt at den nåværende samtalen når en konklusjon. 

Selvrefleksjon

Utviklerne av ChatDev-rammen har observert situasjoner hvor begge partene involvert hadde nådd en gjensidig enighet, men de forhåndsdefinerte kommunikasjonsprotokollene ikke var utløst. For å håndtere disse problemene, introduserer ChatDev-rammen en selvrefleksjonsmekanisme som hjelper til å hente og trekke ut minner. For å implementere selvrefleksjonsmekanismer, initierer ChatDev-rammen en ny og fersk samtale ved å liste “pseudo-selv” som en ny spørger. “Pseudo-selv” analyserer tidligere samtaler og historiske rekorder og informerer den nåværende assistenten, og deretter ber den om en oppsummering av konkluderende og handling-verdig informasjon, som demonstrert i figuren under. 

Med hjelp av selvrefleksjonsmekanismen, oppmuntres ChatDev-assistenten til å reflektere og analysere beslutningene den har foreslått. 

Koding

Det er tre forhåndsdefinerte roller i kodingfasen, nemlig CTO, programmerer og grafisk designer. Som vanlig, deler chat-kjeden kodingfasen inn i enkeltunderoppgaver som generering av kode (programmerer og CTO) eller å utvikle en grafisk brukergrensesnitt (programmerer og designer). CTO instruerer deretter programmereren til å bruke markdown-formatet til å implementere et programvaresystem, og grafisk designer foreslår et brukervennlig og interaktivt grafisk brukergrensesnitt som bruker grafiske ikoner til å interagere med brukerne i stedet for å avhenge av tradisjonelle tekstbaserte kommandoer. 

Kodehåndtering

ChatDev-rammen bruker objektorienterte programmeringsspråk som Python, Java og C++ for å håndtere komplekse programvaresystemer, fordi modulæriteten til disse programmeringsspråkene muliggjør bruk av selvstendige objekter som ikke bare hjelper til feilsøking, men også til samarbeidende utvikling, og også hjelper til å fjerne redundanser ved å gjenbruke objekter gjennom konseptet arv. 

Tankeinstruksjoner

Tradisjonelle metoder for spørsmålssvaring kan ofte føre til irrelevante opplysninger eller uakkurate opplysninger, spesielt når det gjelder å generere kode, ettersom å gi naive instruksjoner kan føre til LLM-hallusinasjoner, og det kan bli et utfordrende problem. For å håndtere dette problemet, introduserer ChatDev-rammen “tankeinstruksjoner”-mekanismen som trekker inspirasjon fra chain-of-thought-prompter. “Tankeinstruksjoner”-mekanismen adresserer eksplisitt enkeltstående problemløsningstanker inkludert i instruksjonene, lignende løsning av oppgaver på en sekvensiell og organisert måte. 

Testing

Å skrive feilfri kode i første forsøk er utfordrende ikke bare for LLM-er, men også for menneskelige programmere, og i stedet for å fullstendig forkaste den feilaktige koden, analyserer programmere koden for å identifisere feilene og rette dem. Testingfasen i ChatDev-rammen deles inn i tre roller: programmerer, tester og gjennomgåer. Testingprosessen deles videre inn i to sekvensielle underoppgaver: Peer Review eller Statisk Feilsøking (Gjennomgåer og Programmerer), og System Testing eller Dynamisk Feilsøking (Programmerer og Tester). Statisk feilsøking eller peer review analyserer kildekoden for å identifisere feil, mens dynamisk feilsøking eller systemtesting verifiserer kjøringen av programvaren gjennom ulike tester som utføres ved hjelp av en interpreter av programmereren. Dynamisk feilsøking fokuserer primært på black-box-testing for å evaluere applikasjonene. 

Dokumentasjon

Etter at ChatDev-rammen er ferdig med designing-, koding- og testingfasene, setter den inn fire agenter, nemlig CEO, CTO, CPO og Programmerer, for å generere dokumentasjonen for programvareprosjektet. ChatDev-rammen bruker LLM-er for å utnytte few-shot-prompter med kontekst-eksempler for å generere dokumentene. CTO instruerer programmereren til å gi instruksjoner for konfigurasjon av avhengighetsmiljø og opprette en fil som “avhengighetskrav.txt”. Samtidig kommuniserer CEO kravene og systemdesignet til CPO for å generere brukermanualen for produktet. 

Resultater

Programvarestatistikk

For å analysere ytelsen til ChatDev-rammen, utførte utviklingsteamet en statistisk analyse av programvareapplikasjonene generert av rammen basert på noen nøkkelmetricer, inkludert forbrukte token, totale dialogrundor, bilde-ressurser, programvarefiler, versjonsoppdateringer og noen flere, og resultene er demonstrert i tabellen under. 

Variasjon i tid

For å undersøke ChatDevs produksjonstid for programvare for ulike forespørsler, utførte utviklerne også en variasjonsanalyse, og forskjellen i utviklingstiden for ulike forespørsler reflekterer variasjonen i klarethet og kompleksitet til oppgavene som er tildelt, og resultene er demonstrert i figuren under. 

Kasusstudie

Følgende figur demonstrerer ChatDev som utvikler et Fem i rad eller et Gomoku-spill. 

Den venstre figuren demonstrerer den grunnleggende programvaren som er skapt av rammen uten å bruke noen grafisk brukergrensesnitt. Det er tydelig at applikasjonen uten noen grafisk brukergrensesnitt tilbyr begrenset interaktivitet, og brukerne kan kun spille dette spillet gjennom kommandoterminalen. Den neste figuren demonstrerer et mer visuelt tiltalende spill som er skapt med bruk av grafisk brukergrensesnitt, tilbyr bedre brukeropplevelse og forbedret interaktivitet for et engasjerende spillmiljø som kan nytes mye mer av brukerne. Designeragenten skaper deretter ekstra grafikk for å ytterligere forbedre brukervennligheten og estetikken til spillmiljøet uten å påvirke noen funksjonalitet. Likevel, hvis menneskelige brukere ikke er fornøyde med bildet som er generert av designeragenten, kan de erstatte bildene etter at ChatDev-rammen har fullført programvaren. Fleksibiliteten som tilbys av ChatDev-rammen for å manuelt erstatte bildene tillater brukerne å tilpasse applikasjonene i henhold til deres preferanser for forbedret interaktivitet og brukeropplevelse uten å påvirke funksjonaliteten til programvaren på noen måte. 

Slutt tanker

I denne artikkelen har vi diskutert ChatDev, en LLM-basert innovativ tilnærming som har som mål å revolusjonere programvareutviklingsfeltet ved å eliminere behovet for spesialiserte modeller under hver fase av utviklingsprosessen. ChatDev-rammen søker å utnytte evnene i LLM-rammene ved å bruke naturlig språkkommunikasjon til å forene og strømlinjeformele nøkkelprogramvareutviklingsprosesser. ChatDev-rammen bruker chat-kjeden til å bryte programvareutviklingsprosessen inn i sekvensielle underoppgaver, slik at det blir mulig å ha granulært fokus og fremme ønskede utganger for hver underoppgave. 

En ingeniør av yrke, en forfatter av hjerte. Kunal er en teknisk forfatter med en dyp kjærlighet og forståelse av AI og ML, dedikert til å forenkle komplekse konsepter i disse feltene gjennom sin engasjerende og informerende dokumentasjon.