AI och ML nyheter på svenska

Djupdykning i Mentat-kodningsassistenten

Efter att ha lekt med Aider-kodningsassistent har jag använt Mentat för att koda under de senaste veckorna. Jämförelse med Aider Sättet det fungerar är liknande. Det körs i terminalen med en textbaserad UI. Det tillåter till och med att ställa in ljust och mörkt läge för färgschemat. Kodningsessioner innebär att lägga till relevanta filer för kontext. I chatten anger du dina önskemål och det kommer tillbaka med en åtgärdsplan som involverar kodändringar. Godkänn dem och ändringarna görs. Hela upplevelsen är nära Aider, förutom att Aider gör en git-commit för varje ändring (vilket du kan välja bort). Mentat lämnar versionshantering till dig. Kvaliteten på hur du formulerar dina önskemål bestämmer kvaliteten på arbetet. Du måste vara ganska verbos om det. Vad som kommer tillbaka är en funktion av ditt val av LLM. Jag skulle inte tillskriva smartness till kodningsassistenter, men jag skulle ge dem en överlägsen utvecklingsupplevelse om något. Oavsett vilken du använder, måste du fortfarande prata med dem som om de vore en kreativ intern. Kontextgräns Utanför lådan stöder Mentat en blygsam lista över LLMs jämfört med Aider (det kanske eller kanske inte kommer att ändras). Jag lät inte det vara ett problem, jag kopplade det till att använda en kodnings-LLM i Together.ai. Men det spelade ingen roll; jag stötte på kontextfönstrets begränsning direkt. Visst, några av mina filer är produktionslängd, men jag inkluderade inte så många av dem. Jag fick inte ens chansen att göra något smart med det än. Jag var fast besluten att göra detta fungera, men kontextgränsen är i vägen. Lösningen är inte att bara använda en LLM med större kontextgräns. Det finns alltid en övre gräns, du skulle bara hamna i att stöta på den konstant. Byggde min egen RAG Jag hörde att RAG är svaret. Så jag byggde en mellanvara som sitter mellan Mentat och LLM. Det är en OpenAI-kompatibel REST-API (http://localhost:<port>/chat/completions) som körs lokalt, allt i en Python-fil. Jag kallar det Broken Sword för enkel referens. Så långt Mentat är bekymrat är Broken Sword en riktig LLM-tjänst. Inom Broken Sword fångar jag Mentats förfrågningar, masserar indata, skickar till vilken LLM jag vill och returnerar svaret på ett OpenAI-kompatibelt sätt. När jag gör detta får jag se de elaborerade direktiven som Mentat ger, det är vad prompt-engineering ser ut som. Bara genom att göra detta har jag aktiverat Mentat att använda vilken LLM som helst som är tillgänglig för mänskligheten. Jag fortsatte att använda Google Gemini 1.5 för att driva Broken Sword, mestadels eftersom det har rätt balans mellan kvalitet och kostnad. Detta ensamt löser dock inte kontextfönstrets begränsning. Det är inget mer än en glorifierad pipa. Snarare än att skicka indata från Mentat ordagrant, kan den stora mängden kontext lagras i en vektor-databas och skickas över som inbäddningar istället. Om jag förstår det rätt, blir stora bitar av text omvandlade till multidimensionella matriser av tal. Det är mycket mindre för LLMs att använda än originaletexter. Jag gjorde allt detta arbete med LangChain (det har serien av processer abstraherade bort), med en dash av Flask för enkel API. Det kändes som att fuska när jag inte ens vet hur denna magi fungerar, men jag ville hacka saker fort. Jag vet att de säger att du inte behöver LangChain och jag tror dem, men en dag, man, en dag. Det fungerar När jag är klar, slutade Mentat med att fungera som det är tänkt att göra. Jag fick det att skriva enhetstester, det skrevs i samma stil som de befintliga. Jag fick det att skriva en GitHub Actions-workflow, resultatet var förnuftigt. Det var tillfredsställande, när det fungerade. Att veta att jag har gjort det fungera med Broken Sword är dubbelt tillfredsställande. Vilket fick mig att undra, varför Mentat inte använder RAG eller vektor-databas som jag just gjorde? Det kändes nästan trivialt att göra det. Jag tog en titt i Mentat-kodbasen, det visade sig att Chroma DB används (samma vektor-db jag använder). Så kanske de är i färd med att göra RAG på något sätt, men inte på sätt som är viktiga för mig. Men det är klumpigt När jag satte Mentat i arbete mer och mer, blev klumpigheten uppenbar. Det kraschade ibland. Ibland på grund av att LLM inte kom tillbaka med något det gillade, men mestadels av okända skäl. Elegant felhantering är inte dess styrka. Det fanns tider när Mentat kraschade efter att jag gjort en förfrågan. När jag startade om och inkluderade de relevanta filerna igen, upprepade jag samma förfrågan (tur att de har chatt-historik för att göra detta enkelt) och allt fungerade ut. Blandning av handkodning En fråga jag hoppades på att svara i denna äventyr är den rätta blandningen av att använda kodningsassistent på detta sätt och direkt redigera filer när man löser ett problem. I det om det är möjligt, borde all kodning göras bara från kodningsassistenten? Eller förväntas vi ha en kodeditor redo på nästa skärm? I mitt fall är hälften av skärmen för Mentat, den andra hälften för emacs. Jag förväntade mig att Mentat skulle ge mig det mesta av vad jag vill, men inte perfekt, och att jag sedan skulle göra mindre justeringar för hand i samma filer i emacs. Om Mentat-stil kodningsassistent har en framtid, undrar jag om det är så det ska vara.
dev.to
Deep dive into Mentat coding assistant
Create attached notes ...