Agentdriven kodning
Kodagenter är konversationella AI-modeller med tillgång till verktyg som läsning/skrivning av filer, webbsökning och körning av skalkommandon. De finns antingen i IDE:n eller i fristående kommandorads- eller GUI-verktyg. Kodagenter är mycket autonoma och kraftfulla verktyg som möjliggör många olika användningsfall.
Den här föreläsningen bygger vidare på materialet om AI-stödd utveckling från föreläsningen Utvecklingsmiljö och verktyg. Som en snabb demonstration fortsätter vi med exemplet från avsnittet AI-stödd utveckling:
from urllib.request import urlopen
def download_contents(url: str) -> str:
with urlopen(url) as response:
return response.read().decode('utf-8')
def extract(content: str) -> list[str]:
import re
pattern = r'\[.*?\]\((.*?)\)'
return re.findall(pattern, content)
print(extract(download_contents("https://raw.githubusercontent.com/missing-semester/missing-semester/refs/heads/master/_2026/development-environment.md")))
Vi kan prova att ge en kodagent följande uppgift:
Gör om detta till ett riktigt kommandoradsprogram, med argparse för argumentparsning.
Lägg till typannoteringar och se till att programmet klarar typkontroll.
Agenten kommer att läsa filen för att förstå den, sedan göra ändringar och till sist köra typkontrollen för att säkerställa att typannoteringarna är korrekta. Om den gör ett misstag som gör att typkontrollen misslyckas kommer den sannolikt att iterera, även om det här är en enkel uppgift där det är mindre troligt. Eftersom kodagenter har tillgång till verktyg som kan vara skadliga ber agentramverk som standard användaren att bekräfta verktygsanrop.
Om kodagenten gör ett misstag — till exempel om du har
mypy-binären direkt tillgänglig på$PATHmen agenten försöker körapython -m mypy— kan du ge textåterkoppling för att hjälpa den kurskorrigera.
Kodagenter stöder interaktion i flera turer, så du kan iterera över arbetet i en fram-och-tillbaka-konversation med agenten. Du kan till och med avbryta agenten om den är på väg åt fel håll. En hjälpsam mental modell är att tänka på dig själv som chef för en praktikant: praktikanten gör grovjobbet men behöver vägledning och gör ibland fel som måste rättas.
För en tydligare demonstration kan du som uppföljning be agenten köra det resulterande skriptet. Observera utdata och be den göra en ändring (t.ex. att endast inkludera absoluta URL:er).
Hur AI-modeller och agenter fungerar
Att fullständigt förklara det inre arbetssättet i moderna stora språkmodeller (LLM:er) och infrastruktur som agentramverk ligger utanför den här kursens omfång. Det är dock hjälpsamt att ha en övergripande förståelse för några nyckelidéer för att effektivt använda den här tekniken i framkant och förstå dess begränsningar.
LLM:er kan ses som modeller av sannolikhetsfördelningen för fullföljande strängar (utdata) givet promptsträngar (indata). LLM-inferens (det som händer när du t.ex. skickar en fråga till en konversationsapp) drar stickprov från denna sannolikhetsfördelning. LLM:er har ett fast kontextfönster, den maximala längden på in- och utsträngarna.
AI-verktyg som konversationschatt och kodagenter bygger ovanpå denna grundmekanism. För interaktioner i flera turer använder chattappar och agenter turmarkörer och skickar hela konversationshistoriken som promptsträng varje gång det kommer en ny användarfråga, vilket kör LLM-inferens en gång per användarfråga. För verktygsanropande agenter tolkar ramverket vissa LLM-utdata som förfrågningar om att anropa ett verktyg, och ramverket skickar tillbaka resultatet av verktygsanropet till modellen som en del av promptsträngen (så LLM-inferens körs igen vid varje verktygsanrop och svar). Kärnkoncepten i verktygsanropande agenter kan implementeras på 200 rader kod.
Integritet
De flesta AI-kodverktyg i standardkonfiguration skickar mycket av din data till molnet. Ibland kör ramverket lokalt medan LLM-inferensen kör i molnet. Andra gånger körs ännu mer av programvaran i molnet (och t.ex. kan tjänsteleverantören i praktiken få en kopia av hela ditt kodförråd och alla interaktioner du har med AI-verktyget).
Det finns AI-kodverktyg med öppen källkod och öppna LLM:er som är ganska bra (även om de inte är fullt lika bra som de proprietära modellerna), men i dagsläget är det för de flesta användare inte praktiskt möjligt att köra de mest avancerade öppna LLM:erna lokalt på grund av hårdvarubegränsningar.
Användningsfall
Kodagenter kan vara hjälpsamma för en stor variation av uppgifter. Några exempel:
- Implementera nya funktioner. Som i exemplet ovan kan du be en kodagent att implementera en funktion.
Att ge en bra specifikation är just nu mer konst än vetenskap.
Du vill att indata till agenten ska vara tillräckligt beskrivande för att den ska göra det du vill (åtminstone vara på rätt spår så att du kan iterera), men inte så överdetaljerad att du gör för mycket av arbetet själv.
Testdriven utveckling kan vara särskilt effektivt: skriv tester (eller använd kodagenten för att hjälpa dig skriva tester), granska dem så att de verkligen fångar det du vill och be sedan kodagenten implementera funktionen.
Modeller förbättras kontinuerligt, så du behöver hålla din intuition uppdaterad om vad modellerna klarar.
Vi använde Claude Code för att implementera dessa Tufte-liknande marginalnoter.
- Fixa fel. Om du har fel från kompilator, linter, typkontroll eller tester kan du be agenten rätta dem, till exempel med en uppmaning som “fixa problemen med mypy”.
Kodmodeller är särskilt effektiva när du kan få in dem i en återkopplingsslinga, så försök att sätta upp det så att modellen kan köra den felande kontrollen direkt, vilket låter den iterera autonomt.
Om det är opraktiskt kan du ge modellen återkoppling manuellt.
I incheckningen f552b55 i Missing Semesters kodförråd bad vi Claude Code “Granska föreläsningen om agentdriven kodning för stavfel och grammatiska problem” och bad den därefter att åtgärda problemen den hittade, vilket lades in i f1e1c41.
- Refaktorering. Du kan använda kodagenter för att refaktorera kod på olika sätt, från enkla uppgifter som att byta namn på en metod (den här typen av refaktorering stöds också av kodintelligens) till mer komplexa uppgifter som att bryta ut funktionalitet till en separat modul.
Vi använde Claude Code för att dela upp agentdriven kodning till en egen föreläsning.
- Kodgranskning. Du kan be kodagenter granska kod. Du kan ge enkel vägledning, som “granska mina senaste ändringar som ännu inte ligger i en incheckning”. Om du vill granska en ändringsförfrågan (PR) och din kodagent kan hämta webbsidor, eller om du har kommandoradsverktyg som GitHub CLI installerade, kan du kanske till och med be kodagenten “granska ändringsförfrågan {länk}” och låta den hantera resten.
- Kodförståelse. Du kan ställa frågor till en kodagent om en kodbas, vilket kan vara särskilt hjälpsamt när du är ny i ett projekt.
- Som ett skal. Du kan be kodagenten använda ett visst verktyg för att lösa en uppgift, så att du kan köra skalkommandon med naturligt språk, till exempel “använd find-kommandot för att hitta alla filer äldre än 30 dagar” eller “använd mogrify för att ändra storlek på alla jpg-filer till 50 % av originalstorleken”.
- Vibekodning. Agenter är tillräckligt kraftfulla för att du ska kunna implementera vissa applikationer utan att själv skriva en enda rad kod.
Här är ett exempel på ett verkligt projekt som en av instruktörerna vibekodade.
Avancerade agenter
Här ger vi en kort översikt över några mer avancerade användningsmönster och förmågor hos kodagenter.
- Återanvändbara uppmaningar. Skapa återanvändbara uppmaningar eller mallar.
Du kan till exempel skriva en detaljerad uppmaning för kodgranskning på ett särskilt sätt och spara den som en återanvändbar uppmaning.
Agentverktyg utvecklas snabbt. I vissa verktyg är återanvändbara uppmaningar som fristående funktion avvecklade. I till exempel Codex och Claude Code ingår de i skills (färdigheter).
- Parallella agenter. Kodagenter kan vara långsamma: du kan ge agenten en uppmaning och låta den arbeta på ett problem i tiotals minuter. Du kan köra flera kopior av agenter samtidigt, antingen på samma uppgift (LLM:er är stokastiska, så det kan vara hjälpsamt att köra samma sak flera gånger och välja bästa lösningen) eller på olika uppgifter (t.ex. implementera två icke-överlappande funktioner samtidigt). För att undvika att ändringar från olika agenter stör varandra kan du använda git worktrees, som vi tar upp i föreläsningen om versionshantering.
- MCP:er. MCP, som står för Model Context Protocol, är ett öppet protokoll som du kan använda för att koppla dina kodagenter till verktyg. Till exempel kan denna Notion MCP-server låta agenten läsa/skriva Notion-dokument, vilket möjliggör användningsfall som “läs specifikationen länkad i {Notion-dokument}, utarbeta en implementationsplan som en ny sida i Notion och implementera sedan en prototyp”. För att hitta MCP:er kan du använda kataloger som Pulse och Glama.
- Kontexthantering. Som vi noterade ovan har LLM:erna som ligger bakom kodagenter ett begränsat kontextfönster.
Effektiv användning av kodagenter kräver att du hanterar kontext väl.
Du vill säkerställa att agenten har tillgång till informationen den behöver men undvika onödig kontext för att inte överfylla kontextfönstret eller försämra modellens prestanda (vilket ofta händer när kontextstorleken växer, även om den inte överstiger kontextfönstret).
Agentramverk tillför och i viss grad hanterar kontext automatiskt, men mycket kontroll lämnas till användaren.
- Rensa kontextfönstret. Den mest grundläggande kontrollen är att kodagenter stöder att rensa kontextfönstret (starta en ny konversation), vilket du bör göra för orelaterade frågor.
- Spola tillbaka konversationen. Vissa kodagenter stöder att ångra steg i konversationshistoriken. I stället för att skicka ett uppföljningsmeddelande som styr agenten åt ett annat håll kan ett “undo” i vissa lägen hantera kontext mer effektivt.
- Kompaktering. För att möjliggöra konversationer med obegränsad längd stöder kodagenter kontext-_kompaktering_: om konversationshistoriken blir för lång anropar de automatiskt en LLM för att sammanfatta början av konversationen och ersätter historiken med sammanfattningen. Vissa agenter ger användaren kontroll att utlösa kompaktering när det önskas.
- llms.txt. Filen
/llms.txtär en föreslagen standardplats för ett dokument som LLM:er kan använda vid inferens. Produkter (t.ex. cursor.com/llms.txt), programvarubibliotek (t.ex. ai.pydantic.dev/llms.txt) och API:er (t.ex. apify.com/llms.txt) kan hallms.txt-filer som är praktiska i utveckling. Sådana dokument är mer informationstäta per token och därmed mer kontexteffektiva än att be kodagenten hämta och läsa en HTML-sida. Extern dokumentation är användbar när kodagenten saknar inbyggd kunskap om ett beroende du försöker använda (t.ex. för att det publicerades efter LLM:ens kunskapsgräns). - AGENTS.md. De flesta kodagenter stöder AGENTS.md eller liknande (t.ex. letar Claude Code efter
CLAUDE.md) som en README för kodagenter. När agenten startar förfyller den kontexten med hela innehållet iAGENTS.md. Du kan använda det för att ge agenten råd som gäller över sessioner (t.ex. instruera den att alltid köra typkontroll efter kodändringar, förklara hur man kör enhetstester eller länka tredjepartsdokumentation som agenten kan läsa). Vissa kodagenter kan autogenerera den här filen (t.ex. kommandot/initi Claude Code). Se här för ett verkligt exempel på enAGENTS.md. - Skills (färdigheter). Innehåll i
AGENTS.mdladdas alltid, i sin helhet, in i agentens kontextfönster. Skills lägger till ett lager av indirektion för att undvika kontextuppblåsning: du kan ge agenten en lista med skills och beskrivningar, och agenten kan “öppna” en skill (ladda den i sitt kontextfönster) vid behov. - Subagenter. Vissa kodagenter låter dig definiera subagenter, alltså agenter för uppgiftsspecifika arbetsflöden. Toppnivåagenten kan anropa en subagent för att lösa en viss uppgift, vilket gör att både toppnivåagenten och subagenten kan hantera kontext mer effektivt. Toppnivåagentens kontext sväller inte av allt subagenten ser, och subagenten kan få precis den kontext den behöver för uppgiften. Som exempel implementerar vissa kodagenter webbundersökning som en subagent: toppnivåagenten ställer en fråga till subagenten, som gör webbsökning, hämtar enskilda webbsidor, analyserar dem och returnerar ett svar till toppnivåagenten. På så sätt får toppnivåagenten inte sin kontext uppblåst av allt innehåll från hämtade webbsidor, och subagenten får inte resten av toppnivåagentens konversationshistorik i sin kontext.
För många av de avancerade funktioner som kräver att du skriver uppmaningar (t.ex. skills/färdigheter eller subagenter) kan du använda LLM:er för att komma igång.
Vissa kodagenter har till och med inbyggt stöd för detta.
Till exempel kan Claude Code generera en subagent från en kort uppmaning (anropa /agents och skapa en ny agent).
Prova att skapa en subagent med följande uppmaning:
En Python-agent för kodkontroll som använder `mypy` och `ruff` för typkontroll, lintning och formatkontroll av alla filer som har ändrats sedan senaste git-incheckning.
Sedan kan du använda toppnivåagenten för att uttryckligen anropa subagenten med ett meddelande som “använd subagenten för kodkontroll”. Du kan också vid behov få toppnivåagenten att automatiskt anropa subagenten när det är lämpligt, till exempel efter att Python-filer har ändrats.
Saker att se upp med
AI-verktyg kan göra misstag. De bygger på LLM:er, som bara är probabilistiska modeller för nästa token. De är inte “intelligenta” på samma sätt som människor. Granska AI-utdata för korrekthet och säkerhetsfel. Ibland kan det vara svårare att verifiera kod än att skriva koden själv. För kritisk kod kan det vara bättre att skriva den för hand. AI kan fastna i kaninhål och försöka vilseleda dig, så var uppmärksam på felsökningsspiraler. Använd inte AI som krycka, och var vaksam på överberoende eller ytlig förståelse. Det finns fortfarande en stor klass av programmeringsuppgifter som AI ännu inte klarar. Beräkningstänkande är fortfarande värdefullt.
Rekommenderad programvara
Många IDE:er och AI-kodtillägg innehåller kodagenter (se rekommendationerna från föreläsningen om utvecklingsmiljö). Andra populära kodagenter inkluderar Anthropics Claude Code, OpenAI:s Codex och agenter med öppen källkod som opencode.
Övningar
- Jämför upplevelsen av att koda för hand, använda AI-autokomplettering, inbäddad chatt och agenter genom att göra samma programmeringsuppgift fyra gånger.
- Den bästa kandidaten är en liten funktion i ett projekt du redan arbetar med.
- Om du vill ha fler idéer kan du överväga att lösa uppgifter av typen “good first issue” i öppen källkod-projekt på GitHub, eller problem från Advent of Code eller LeetCode.
- Använd en AI-kodagent för att navigera i en obekant kodbas.
- Det fungerar bäst när du vill felsöka eller lägga till en ny funktion i ett projekt du faktiskt bryr dig om.
- Om du inte kommer på något kan du prova att använda en AI-agent för att förstå hur säkerhetsrelaterade funktioner fungerar i agenten opencode.
- Vibekoda en liten app från grunden.
- Skriv inte en enda rad kod för hand.
- För den kodagent du föredrar, skapa och testa en
AGENTS.md(eller motsvarande för din agent, somCLAUDE.md), en skill (t.ex. skill in Claude Code eller skill in Codex) och en subagent (t.ex. subagent in Claude Code). - Fundera på när du vill använda den ena jämfört med den andra.
- Observera att din valda kodagent kanske inte stöder alla dessa funktioner.
- Du kan då antingen hoppa över dem eller prova en annan kodagent som har stöd.
- Använd en kodagent för att uppnå samma mål som i regex-övningen om Markdown-punktlistor från föreläsningen om kodkvalitet.
- Löser den uppgifterna via direkta filändringar?
- Vilka nackdelar och begränsningar finns med att låta en agent redigera filen direkt för att lösa en sådan uppgift?
- Ta reda på hur du ska formulera uppmaningen så att agenten inte löser uppgiften via direkta filändringar.
- Tips: be agenten använda ett av kommandoradsverktygen som nämns i första föreläsningen.
- De flesta kodagenter stöder någon form av “yolo mode” (t.ex. i Claude Code,
--dangerously-skip-permissions). - Det är inte säkert att använda detta läge direkt, men det kan vara acceptabelt att köra en kodagent i en isolerad miljö som en virtuell maskin eller container och sedan aktivera autonom drift.
- Få den här uppsättningen att fungera på din dator.
- Dokumentation som Claude Code devcontainers eller Docker Sandboxes / Claude Code kan vara användbar.
- Det finns mer än ett sätt att sätta upp detta.
Licensed under CC BY-NC-SA.