DSPy Flex lar optimizeren skrive selve koden, ikke bare prompten
Bytt ut `dspy.Predict` med `dspy.Flex` i programmene du allerede optimaliserer, for da får optimizeren lov til å skrive om koden og ikke bare instruksjonene.
Å optimalisere prompten gjorde programmet dyrere. Å optimalisere koden gjorde det billigere. Det er hovedfunnet i en gjennomgang publisert 5. august av Michael Isaac, doktorgradsstudent i programvareteknikk ved Carnegie Mellon University, skrevet mens han var praktikant hos cmpnd, som introduserer den nye DSPy-modulen dspy.Flex.
Oppgaven de målte på er entitetsoppløsning for steder: gitt to oppføringer, avgjør om de peker på samme fysiske sted. KIN CAFE og KIN på samme adresse er samme sted. CONCESSION #2 KEN MERCER SPORTS PARK og KEN MERCER SPORTS PARK på samme adresse er det ikke. Testsettet var 1 029 merkede par, evaluert på 240 holdt-ut oppføringer med balanserte klasser, så 50 prosent er ren gjetting. Hurtiglagring var slått av gjennom hele kjøringen.
Mekanismen er at Flex eksponerer kildekoden sin for optimizeren i tillegg til instruksjonene. Der GEPA tidligere bare kunne skrive lengre og mer detaljerte instruksjoner, som hver eneste oppføring så måtte betale tokens for ved inferens, kan reflection-modellen nå dekomponere programmet, skrive hjelpefunksjoner og bygge rutingslogikk. Oppsettet brukte Claude Haiku 4.5 til å kjøre programmet og Claude Opus 5 til å skrive det om.
Resultatet ved λ=0 var 95,0 prosent treff mot 90,4 prosent for baseline, statistisk signifikant med McNemar p=0,019, samtidig 28 prosent billigere og 40 prosent raskere. Forklaringen er at 75 prosent av oppføringene ble rutet gjennom vanlig Python: navn normaliseres for franchisenumre og selskapsformer, adresser deles i husnummer og gatekjerne, og bare gråsonen sendes videre til modellen. Kommentaren reflection-modellen skrev øverst i sin egen arkitektur er treffende nok.
«Språkmodellen er en siste utvei: den konsulteres kun for det smale båndet av par der de deterministiske signalene faktisk er i konflikt» — kommentar skrevet av reflection-modellen i det genererte programmet
Isaac beskriver hvordan straffeleddet i metrikken flytter grensen mellom kode og modell. Metrikken returnerer en score pluss tekstlig tilbakemelding, og med Flex ser den også hvor mange modellkall det genererte programmet gjorde per oppføring.
«Ved λ=0 er kall gratis, og optimizeren jager nøyaktighet alene. Når straffen stiger, må hvert modellkall kjøpe tilbake mer nøyaktighet enn det koster» — Michael Isaac, cmpnd
Sikkerheten er tenkt på: kode skrevet av en modell er fortsatt uverifisert kode, og kjører derfor aldri i din egen prosess. Flex eksekverer den genererte kildekoden i en sandkasse-tolker, der bare prediktorkall og verktøyene du selv har oppgitt bygger bro tilbake til vertsprosessen, med et tak på antall broer per kjøring.
Hva bør du gjøre?
- Sett
dspy.Flex(signatur)inn der du hardspy.Predicti et program du allerede har et testsett og en metrikk for. Uten optimalisering oppfører Flex seg identisk, så byttet er trygt å gjøre først og optimalisere etterpå. - Legg antall modellkall inn i metrikken din som et straffeledd før du kjører GEPA. Det er den ene knappen som avgjør om du ender på 95 prosent til $0,70 eller 92 prosent til $0,01.
- Les det lagrede programmet etter optimalisering.
optimized.save()skriver kildekoden til fil, så du kan åpne, diffe og revidere hva modellen faktisk bygde.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.