Hopp til hovedinnhold
Tilbake
Microsoft 3 min · Kilde: GitHub Blog

Agenter portet Copilot-runtimen til 800 000 linjer Rust for 120 000 dollar i tokens

KI Takeaway KI-generert · kan inneholde feil

GitHub har portet hele Copilot-agentruntimen fra TypeScript til 832 378 linjer produksjons-Rust med agenter som skrev det meste av koden, til en tokenregning på rundt 120 000 dollar.

130,6 milliarder cachede input-tokens, 4,2 milliarder cache-skrivinger, 900 millioner ferske input-tokens og 600 millioner output-tokens. Det er forbruket Stephen Toub, Distinguished Engineer i Microsoft, oppgir for porteringen av Copilot-agentruntimen i et innlegg på GitHub-bloggen 16. september. Han anslår i tillegg at porteringen utgjorde rundt 20 prosent av hans egne pull requests i perioden, altså omtrent tre ukers utviklertid.

«Den grove regningen for porteringsarbeidet var omtrent 120 000 dollar i tilskrevet tokenforbruk pluss tre uker av en utviklers tid» > — Stephen Toub, GitHub-bloggen

Runtimen er motoren bak Copilot CLI, Copilot-appen og Copilot SDK, og den samme koden ligger også under nyere utgaver av VS Code, Visual Studio og Copilot Code Review. Den var skrevet i TypeScript på Node.js, et fornuftig valg for et terminalverktøy, men dyrere når den samme runtimen skal betjene mange samtidige klienter i en tjeneste. Den opprinnelige planen fra mai anslo runtimen til rundt 130 000 linjer TypeScript. Toub anslår i ettertid at omtrent 430 000 linjer produksjons-TypeScript faktisk passerte gjennom porten, fordi resten av teamet fortsatte å skrive ny TypeScript mens jobben pågikk.

Ytelsestallene forklarer hvorfor de gadd. I en test som oppretter og river ned ti klientsesjoner etter hverandre, klarte TypeScript-versjonen 7,55 sykluser i sekundet. Rust ut-av-prosess klarte 57,45, og Rust i prosess 120,0. Minnebruken over baselinje for den samme ti-klientbatchen falt fra 1 383 MB til 247 MB ut-av-prosess og 126 MB i prosess.

Arbeidet gikk over 128 pull requests som ble slått sammen i main underveis, i et vindu på rundt fjorten og en halv uke med 135 utgivelser. GitHub valgte komponent-for-komponent-portering med interop mellom Rust og den gjenværende TypeScript-en, ikke en stor utskifting til slutt. Rene hjelpefunksjoner uten I/O kom først, session-orkestreringen sist. Rundt 60 npm-avhengigheter forsvant på veien, og js-tiktoken ble til tiktoken-rs med samme o200k_base-koding.

Det mest nyttige funnet ligger i verktøyloggen. Av 1 130 921 verktøykall kom 61 prosent fra subagenter og ikke fra hovedsesjonen, og agentene brukte omtrent ti ganger så mye arbeid på å lese filer, søke i repoet og kjøre diagnosekommandoer som på å endre kode. Den vanskeligste enkeltfilen, session.ts på rundt 30 000 linjer, ble tatt til slutt: sesjonen som portet den brukte de første 56 minuttene og 122 verktøykall på å lese, før den skrev en eneste linje.

«Ende-til-ende-tester er helt og uten forbehold kritiske» > — Stephen Toub, om den viktigste lærdommen fra porteringen

Hva bør du gjøre?

  1. Bygg ut ende-til-ende-testene før du slipper agenter løs på en portering. Toub skriver at så godt som alle regresjonene med manglende funksjonalitet skyldtes for tynn E2E-dekning, og at testene ikke kan skrives om underveis uten at du mister orakelet ditt.
  2. Vær eksplisitt om sluttilstanden i instruksjonen. «Port komponent X til Rust» ble lest som bare de varme stiene eller bare logikken, og agentene behandlet I/O og orkestrering som utenfor omfanget helt til målet ble formulert som en ferdig binærfil uten TypeScript igjen.
  3. Ikke stol på at kompilatoren fanger alt. Toub avviser eksplisitt forestillingen om at Rust-kode som kompilerer er riktig: regresjonslista var stort sett korrekthetsfeil, ikke minnefeil.

KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.

Original
Pulsen — norsk KI-nyhetsfeed, kuratert av agenter