Efter at have spillet med Aider-kodningsassistent, har jeg brugt Mentat til at kode i de sidste par uger.
Sammenligning med Aider
Måden, det fungerer på, er lignende. Det kører på terminalen med en tekstbaseret brugergrænseflade. Det tillader endda, at du kan indstille lys og mørk farveskema. Kodningssessioner involverer tilføjelse af relevante filer for kontekst. I chatboksen, udtrykker du dine ønsker, og det kommer tilbage med en handlingsplan, der involverer kodeændringer. Godkend dem, og ændringerne bliver foretaget.
Hele oplevelsen er tæt på Aider, bortset fra, at Aider laver en git-commit for hver ændring (som du kan fravælge). Mentat overlader versionsstyringen til dig.
Kvaliteten af, hvordan du formulerer dine ønsker, bestemmer kvaliteten af arbejdet. Du skal være ret verbos om det. Hvad der kommer tilbage, er en funktion af din valg af LLM. Jeg vil ikke tilskrive smartness til kodningsassistenterne, men jeg ville give dem en overlegen udviklingsoplevelse, hvis nogen. Uanset hvilken du bruger, skal du stadig tale med dem som en kæftløs praktikant.
Kontekstgrænse
Ud af boksen understøtter Mentat en beskeden liste af LLM'er sammenlignet med Aider (det kan måske eller måske ikke ændre sig). Jeg lod det ikke være et problem, jeg kobte det til at bruge en kodnings-LLM i Together.ai.
Men det gjorde ikke noget, jeg stødte på kontekstvinduegrænsen lige fra starten. Jeg gav ikke engang mulighed for, at det skulle gøre noget smart endnu. Jeg var fast besluttet på at gøre dette virke, men kontekstgrænsen er det, der forhindrer mig.
Løsningen er ikke at bruge en LLM med en større kontekstgrænse. Der er altid en øvre grænse, du ville bare ende med at ramme den konstant.
Byggede min egen RAG
Jeg hørte, at RAG er svaret. Så jeg byggede en middleware, der sidder mellem Mentat og LLM'en.
Dette er en OpenAI-kompatibel REST-API (http://localhost:<port>/chat/completions), der kører lokalt, alt sammen i en Python-fil. Jeg kalder det Broken Sword for nemheds skyld.
Så langt Mentat er bekymret, er Broken Sword en rigtig LLM-service. Inden for Broken Sword fanger jeg Mentats anmodninger, masserer input, sender til enhver LLM, jeg vil, og returnerer svaret på en OpenAI-kompatibel måde. Når jeg gør dette, får jeg mulighed for at se de detaljerede direktiver, som Mentat giver, det er, hvad prompt-engineering ligner.
Bare ved at gøre dette har jeg aktiveret Mentat til at bruge enhver LLM, der er tilgængelig for menneskeheden. Jeg fortsatte med at bruge Google Gemini 1.5 til at give kraft til Broken Sword, mest fordi det har den rette balance mellem kvalitet og pris.
Dette alene løser ikke kontekstvinduegrænsen dog. Dette er ikke mere end en glorificeret rør.
I stedet for at sende inputs fra Mentat ordret, kan den enorme mængde kontekst lagres i en vektor-database og sendes over som embeddings i stedet. Hvis jeg forstår det rigtigt, bliver store stykker tekst omdannet til multidimensionale matricer af tal. Dette er meget mindre for LLM'er at bruge end de originale tekster.
Jeg fik det til at virke ved hjælp af LangChain (det har processen abstraktet væk), med en skål Flask for enkel API. Det føltes som at snyde, når jeg endnu ikke ved, hvordan denne magi virker, men jeg ville gerne hacke tingene hurtigt. Jeg ved, de siger, du ikke behøver LangChain, og jeg tror på dem, men en dag, mand, en dag.
Det virker
Når jeg er færdig, endte Mentat med at fungere, som det skal. Jeg fik det til at skrive enhedstests, det blev skrevet i en stil, der er konsistent med de eksisterende. Jeg fik det til at skrive en GitHub Actions-workflow, resultatet var fornuftigt.
Det var tilfredsstillende, når det virker. At vide, at jeg har fået det til at virke med Broken Sword, er dobbelt tilfredsstillende.
Hvilket fik mig til at undre, hvorfor Mentat ikke bruger RAG eller vektor-database, som jeg lige har gjort. Det føltes næsten banalt at gøre det. Jeg tog en kig i Mentat-kodebasen, og det er sandt, at Chroma DB bruges (samme vektor-db, jeg bruger). Så måske gør de RAG på en eller anden måde, men ikke på en måde, der betyder noget for mig.
Men det er klodset
Når jeg får Mentat til at arbejde mere og mere, bliver klodsetheden åbenlys. Det ville crash fra tid til anden. Nogle gange, fordi LLM'en ikke kom tilbage med noget, det kan lide, men mest for ukendte årsager. Elegant fejlhåndtering er ikke dens styrke.
Der ville være tider, hvor Mentat ville crash, efter jeg havde sendt en anmodning. Efter at have genstartet og gen-included de relevante filer, gentog jeg den samme anmodning (godt, at de har chat-historik, der gør dette let) og alt fungerede.
Blanding af håndkodning
En spørgsmål, jeg havde håbet at svare på i denne eventyr, er den rette blanding af at bruge kodningsassistent på denne måde og direkte redigere filer, når man løser et problem. Hvis det er muligt, skal alle kodningsarbejder blive udført fra bare kodningsassistenten? Eller forventes det, at vi har en kodeeditor klar i næste skærm?
I mit tilfælde er halvdelen af min skærm til Mentat, den anden halvdel til emacs. Jeg forventede, at Mentat ville give mig det meste af, hvad jeg ønskede, men ikke perfekt, og at jeg ville foretage mindre justeringer med hånd til de samme filer i emacs.
Hvis Mentat-stil kodningsassistent har en fremtid, undrer jeg mig over, om det er måden, det skal være på.
dev.to
Deep dive into Mentat coding assistant
Create attached notes ...