«The schema listing gives only table names; the 'don't call describe_table if you already have the information' advice caused column-name guessing and error-retry loops in baseline traces.» — funn fra DSPy-analysen, gjengitt av Simon Willison
Willison fyrte av en asynkron researchoppgave i Claude Code for web med Claude Fable 5, med én instruksjon: installer Datasette-alfaen, datasette-agent og DSPy, og finn ut hvordan DSPy kan evaluere og forbedre systemprompten som lar agenten kjøre read-only SQL mot data. Fable valgte selv å teste mot GPT 4.1 mini og nano.
Poenget er mekanismen bak feilen. Skjema-lista i prompten oppga bare tabellnavn, samtidig som prompten rådet modellen til å la være å kalle describe_table hvis den «allerede hadde informasjonen». Resultatet i baseline-kjøringene: modellen gjettet kolonnenavn som page_count, o.order_id og first_name, bommet, og havnet i retry-løkker. DSPy fanget dette ved å kjøre prompten mot faktiske spor og måle hvor den brøt sammen.
For deg som bygger en SQL- eller verktøyagent er lærdommen konkret: en instruksjon om å spare på oppslag kan spare tokens, men koste deg i gjetting og feilretting når modellen mangler grunnlaget den trenger. DSPy gjør antakelsen målbar i stedet for et valg basert på magefølelse.
Hva bør du gjøre?
- Gi agenten kolonnenavn i skjema-lista fra start, eller mildne rådet om å hoppe over describe_table, slik at den ikke gjetter.
- Kjør prompten din gjennom DSPy mot ekte spor for å se hvor den faktisk bryter sammen, ikke bare der du tror.