AI- ja ML-uutisia suomeksi

Syvä sukellus Mentat-koodausavustajaan

Seuraten Aider-koodausavustajan kanssa pelaamisesta, olen käyttänyt Mentatia koodaamiseen viimeksi mainitsemissä viikoissa. Vertailu Aideriin Toimintatapa on samankaltainen. Se toimii terminaalissa tekstuaalisella käyttöliittymällä. Se sallii myös valita valo- ja tumman värimallin. Koodausistunnot sisältävät relevanttien tiedostojen lisäämisen. Chat-ruudussa esität toiveesi, ja se tulee takaisin toimintasuunnitelmalla, joka sisältää koodimuutokset. Hyväksy ne, ja muutokset tehdään. Kokonaisuutena kokemus on lähellä Aideria, paitsi että Aider tekee git-commitin jokaiselle muutokselle (jota voit valita pois). Mentat jättää versionhallinnan sinulle. Toiveesi laadun määrää, kuinka hyvin koodausavustaja toimii. Sinun täytyy olla melko selkeä siitä, mitä haluat. Tämä, mitä tulee takaisin, on valintasi LLM:n funktionaalinen osa. En usko, että koodausavustajat ovat älykkäämpiä, mutta voin antaa heille paremman kehittäjäkokemuksen, mikäli sellaista on. Mikä tahansa niistä käytät, sinun täytyy puhua heille kuin olisit tietämätön harjoittelija. Kontekstiraja Valmiiksi Mentat tukee vain rajallista LLM-listaa Aideriin verrattuna (ja se saattaa tai ei ehkä muuttua). En antanut sen olla ongelma, vaan yhdistin sen käyttämään koodaus-LLM:ää Together.ai:ssa. Mutta se ei ollutkaan, kun kohtasin kontekstirajan jo ensimmäisellä kerralla. Myönnän, että joitakin tiedostoja on tuotantokokoa, mutta en käyttänyt niitä kaikkia. En edes ehtinyt antaa sen tehdä mitään nerokasta vielä. Olin päättänyt tehdä tämän toimimaan, mutta kontekstiraja tuli tiemme. Ratkaisu ei ole vain käyttää LLM:ää, jolla on suurempi kontekstiraja. On aina yläraja, jonka kohtaisit jatkuvasti. Rakensin oman RAGin Kuulin, että RAG on vastaus. Niin rakensin välimuistin, joka sijaitsee Mentatin ja LLM:n välillä. Tämä on OpenAI-yhteensopiva REST API (http://localhost:<port>/chat/completions), joka toimii paikallisesti, kaikki on yhdessä Python-tiedostossa. Kutsun sitä nimellä Broken Sword, jotta on helppo viitata siihen. Mentatin mielestä Broken Sword on todellinen LLM-palvelu. Broken Swordissa vangin Mentatin pyynnöt, muokkaan syötteitä, lähetän haluamani LLM:ään ja palautan vastauksen OpenAI-yhteensopivalla tavalla. Tehdässäni tässä näen Mentatin antamat yksityiskohtaiset ohjeet, mikä näyttää olevan, mitä prompt-engineering tarkoittaa. Vain tämän ansiosta olen mahdollistanut Mentatin käyttämisen minkä tahansa LLM:n kanssa, jota ihmiset käyttävät. Jatkoimalla käytin Google Gemini 1.5:ä Broken Swordin voimakkaana, pääsääntöisesti siksi, että sillä on oikea tasapaino laadun ja kustannustuoton välillä. Tämä ei kuitenkaan ratkaise kontekstirajaa. Tämä ei ole enempää kuin glorifioitu putki. Sen sijaan, että lähettäisin Mentatin pyynnöt sellaisenaan, voisin tallentaa suuren määrän kontekstia vektoritietokantaan ja lähettää sen LLM:ään muodossa. Jos ymmärrän oikein, suuret tekstiosuudet muuttuvat moniulotteisiksi matriiseiksi. Tämä on paljon pienempiä LLM:ille käsiteltäväksi kuin alkuperäiset tekstit. Toteutin tämän käyttämällä LangChainia (joka on abstraktinut tämän prosessin sarjan), ja vähän Flaskia yksinkertaisen API:n toteuttamiseksi. Tuntui siltä, että petin, kun en vielä ymmärrä tämän magian toimintaa, mutta halusin hakkeroimaan asioita nopeasti. Uskon, että he sanovat, ettei tarvitse LangChainia, mutta joku päivä, mies, joku päivä. Se toimii Kun olen valmis, Mentat alkoi toimia niin kuin sen pitäisi. Sain sen kirjoittamaan yksikkötestejä, ja se kirjoitettiin tyyliin, joka on yhteensopiva olemassa olevien kanssa. Sain sen kirjoittamaan GitHub Actions -workflowin, ja tuloksena oli järkevä. Se oli tyydyttävä, kun se toimi. Tietääkseni, että olen saanut sen toimimaan Broken Swordin kanssa, on kaksinkertainen tyydytys. Mikä sai minut kysymään, miksi Mentat ei käytä RAG:ää tai vektoritietokantaa, kuten juuri tein? Se tuntui melko triviaalilta tehdä niin. Kävin Mentatin koodipohjan läpi, ja näin, että Chroma DB:ää käytetään (sama vektoritietokanta, jonka käytin). Niin ehkä he tekevät RAG:ää jollain tavalla, mutta ei tavalla, joka on merkittävä minulle. Mutta se on kolkko Kun annoin Mentatin tehdä enemmän työtä, sen kolkkuus tuli näkyviin. Se kaatui ajoittain. Joskus siksi, että LLM ei palauttanut mitään, mitä se halusi, mutta useimmiten syystä, jota en ymmärrä. Kaunis epäonnistuminen ei ole sen vahvuus. Oli aikoja, kun Mentat kaatui, kun tein pyynnön. Kun käynnistin sen uudelleen ja lisäsin relevantit tiedostot, toin saman pyynnön (on hyvä, että heillä on chat-historia, jotta tämä on helppoa) ja kaikki toimi hyvin. Koodauksen ja käsin muokkaamisen oikea seos Yksi kysymys, jonka toivoin ratkaisevani tässä seikkailussa, on oikea seos käyttämättä koodausavustajaa tällä tavalla ja suoraan muokkaamalla tiedostoja, kun ratkaisen yhden ongelman. Siinä, onko mahdollista, että kaikki koodaus tulisi tehdä vain koodausavustajasta? Tai oletko odotettu pitämään koodieditoria valmiina näytössäsi? Omassa tapauksessani puoli näytöstä on Mentatille, toinen puoli on emacsille. Odotin, että Mentat antaisi minulle suurimman osan siitä, mitä haluan, mutta ei täydellisesti, ja että minä tekisin päättäväisiä muokkauksia näihin tiedostoihin emacsissa. Jos Mentat-tyyppinen koodausavustaja on tulevaisuudessa, kysyin itseltäni, onko tämä oikea tapa.
dev.to
Deep dive into Mentat coding assistant
Create attached notes ...