Thoughts

AI ur en utvecklares perspektiv – teknik, utmaningar och mänskliga synergier

AI och generativ AI – Många pratar om det, många tänker på det, många förstår det inte. Läs Esattos Wojciech Sowas artikel om det så förstår i alla fall du mer.

Landskapet

Att navigera AI-landskapet inom mjukvaruutveckling är som att vara en galen vetenskapsman i ett digitalt laboratorium. Det är som att försöka sätta ihop ett pussel där bitarna ständigt ändrar form. Vi mixar och matchar tekniker som LLM Fine-tuning, Retrieval-Augmented Generation (RAG) och prompt engineering – tänk dig att jonglera digitala bägare och brännare. Det är ett konstant race för att ligga steget före, med spänningen av att aldrig veta vad som väntar runt det digitala hörnet.

Som mjukvaruutvecklare/arkitekt har min resa med att integrera AI i mitt dagliga arbetsflöde varit omvälvande, men det är viktigt att ha en realistisk syn på dess möjligheter och begränsningar. Att använda AI-assistenter som GitHub Copilot för kodförslag och generering av testfall, och att lita på verktyg som ChatGPT och Edge Copilot för färdighetsutveckling och brainstorming, har markant ökat min produktivitet. Grammarlys hjälp med att förfina text och grammatik har också varit ovärderlig. Men trots att de är effektiva, har dessa verktyg vissa begränsningar som en utvecklare bör erkänna.

LLM Fine-tuning

LLM Fine-tuning representerar en sofistikerad metod där förtränade modeller tränas ytterligare på ett specifikt dataset för att anpassa sig till särskilda uppgifter eller domäner. LLM Fine-tuning är som att lära en gammal hund nya trick. Du har denna förtränade, allvetande modell, men du behöver dess hjälp att hämta något särskilt. Så du ger den en liten puff (eller en stor knuff) med dina egna data, och voilà; plötsligt har du en expert på vilket nischämne du än är besatt av den här veckan. I AI-applikationernas sammanhang innebär detta att generera svar som inte bara informeras av ett stort allmänt dataset, utan också anpassas till nyanserna i ett specifikt fält eller krav.

RAG

Sedan har vi RAG. Retrieval-Augmented Generation kombinerar styrkorna hos förtränade LLM:er med externa kunskapskällor. Föreställ dig att du är på ett frågesportprogram och har en smart vän (LLM) som vet mycket, men inte allt. RAG är som att smuggla in ett uppslagsverk under bordet. Det hämtar information från externa källor och ger din LLM-kompis den fördel den behöver för att komma fram till mer exakta och informerade svar. Det är lite som att ringa en vän på steroider. Metoden förbättrar modellens förmåga att ge mer detaljerade och exakta svar, särskilt på frågor där specifik faktainformation eller data krävs. Och du är den som bestämmer var denna data ska hämtas.

Prompt Engineering

Prompt Engineering är den subtila konsten att utforma rätt frågor för att få AI att ge de mest exakta och relevanta svaren. Om LLM:er är andar, handlar prompt engineering om att formulera dina önskningar så att du inte får en miljon katter när du egentligen bara ville ha en miljon kronor. Denna metod är avgörande för att säkerställa att AI förstår nyanserna i en fråga, vilket leder till mer relevanta och exakta svar.

Den hybrida metoden

Den hybrida metoden förenar fine-tuning, RAG och prompt engineering och syftar till att skapa ett mångsidigt och anpassningsbart AI-system. Det är som att bygga en schweizisk armékniv, förutom att varje verktyg är en AI-teknik och du ständigt lägger till nya prylar. Denna mångfacetterade metod är särskilt kraftfull för att utveckla applikationer som kräver både LLM-förmågor som är out-of-the-box och förmågan att hantera specifika och nyanserade krav.

I en värld av (nästan) färdiga pussel

Men låt oss inte glömma det ständigt föränderliga landskapet av AI-API:er och SDK:er – OpenAI, Azure OpenAI, Semantic Kernel, Kernel Memory med flera. Listan är lång. Att hålla sig uppdaterad med dessa är som att försöka hålla vätskenivån i en kodöken; när du tror att du har hunnit ikapp dyker det upp en ny oas (eller hägring) vid horisonten. Takten är svindlande och verktygen utvecklas ständigt – ibland känns det som att vi försöker bygga ett rymdskepp med en hammare och lite silvertejp.

AI-modeller är utmärkta på databehandling och mönsterigenkänning, men saknar förmågan att lösa komplexa problem och innovera. Den kreativitet och insikt som krävs för unika lösningar är fortfarande mänskliga egenskaper. Detta gap är tydligt i AI:s nuvarande begränsningar att efterlikna komplexa kognitiva processer.

AI kämpar också med att förstå djupare kontext, mänskliga känslor, kulturella nyanser och etiska frågor – områden som är kritiska inom mjukvaruutveckling där mänskligt omdöme är avgörande.

Människans anpassningsförmåga och flexibilitet är oöverträffad. AI:s lärande, begränsat till dess programmering, saknar mänsklig kreativitet och spontan anpassningsförmåga. Dessutom är den mänskliga förmågan att förhandla, känna empati och samarbeta avgörande inom mjukvaruutveckling och utanför AI:s nuvarande räckvidd.

Generativ AI, som ChatGPT, är värdefull för kodning, felsökning, dokumentation och preliminära kodgranskningar. Den hjälper till att generera testfall, underlätta lärande och stödja brainstorming. De automatiserar det monotona, vilket lämnar utrymme för mänsklig kreativitet.

Sammanfattnignsvis: medan AI avsevärt förbättrar produktiviteten och effektiviteten i vissa aspekter av mjukvaruutveckling, är det ingen ersättning för de nyanserade, kreativa och etiska dimensionerna i vårt arbete. Som mjukvaruutvecklare/arkitekt ser jag AI som ett komplementerande verktyg, bäst utnyttjat i samspel med mänsklig expertis. Framtiden för mjukvaruutveckling, som jag ser det, är en synergi mellan mänsklig uppfinningsrikedom och AI:s beräkningskraft, snarare än att den ena ersätter den andra.

10 take-aways

Så, vad tar vi med oss av detta? Här är mina 10 take-aways:

1. Dynamiskt AI-landskap

Att navigera AI-landskapet inom mjukvaruutveckling är som att vara en galen vetenskapsman som anpassar sig till ständigt föränderliga tekniker och verktyg.

2. Praktisk AI-integration

GitHub Copilot, ChatGPT, Edge Copilot och Grammarly ökar produktiviteten för utvecklare, men man ska komma ihåg att de har begräsningar.

3. LLM Fine-tuning

LLM Fine-tuning innebär att förträna modeller på specifika dataset för uppgifter, vilket möjliggör skräddarsydda svar för nischkrav.

4. Retrieval-Augmented Generation (RAG)

RAG kombinerar förtränade modeller med extern kunskap, och är som att ha en smart vän och ett uppslagsverk för mer exakta svar.

5. Prompt Engineering

Att formulera frågor, så kallad prompt engineering, säkerställer att AI förstår nyanser för mer relevanta och exakta svar.

6. Hybridmetoden

Att kombinera fine-tuning, RAG och prompt engineering skapar ett mångsidigt AI-system som är lämpligt för olika applikationer och nyanserade krav.

7. AI-begränsningar

AI är utmärkt på databehandling men har svårt med komplex problemlösning, förståelse för kontext, känslor, kulturella nyanser och etiska överväganden inom mjukvaruutveckling.

8. Människa-dator-synergi

Generativ AI, som ChatGPT, hjälper till med kodning men ersätter inte mänsklig kreativitet och etiska beslut.

9. AI API- och SDK-landskapet

Snabbt föränderliga AI API:er och SDK:er, såsom OpenAI, Azure OpenAI och Semantic Kernel, utgör en utmaning i att hålla jämna steg med utvecklingen.

10. Synergi mellan mänsklig uppfinningsrikedom och AI

Framtiden för mjukvaruutveckling ses som ett samarbete mellan mänsklig kreativitet och AI:s beräkningskraft, snarare än att den ena ersätter den andra.


Vill du veta mer?

Wojciech Sowa

Wojciech Sowa

Technology Advisor / Architect

wojciech.sowa@esatto.se