CodeAct: Prečo spustiteľný Python kód robí LLM agentov o 20 % presnejšími
Po prečítaní článku o tom, že modely sa „nedokážu samy opraviť“ z minulého týždňa, sa prirodzene vynára ďalšia otázka: ak LLM nedokážu spoľahlivo auditovať svoj vlastný výstup, aký formát akcií dáva agentom najlepšiu šancu na automatickú detekciu a zotavenie sa z chýb? CodeAct, publikovaný Xingyao Wangom a kol. a prijatý na ICML 2024, tvrdí, že odpoveďou je Python kód — nie preto, že by bol kód magický, ale preto, že interpret Pythonu poskytuje presne ten druh externej, deterministickej spätnej väzby, ktorú literatúra o samooprave označuje za nevyhnutnú pre LLM modely.
O čom je tento článok
„Executable Code Actions Elicit Better LLM Agents“ (arXiv:2402.01030) od Xingyao Wanga, Yangyi Chena, Lifan Yuana, Yizhe Zhanga, Yunzhu Liho, Hao Penga a Heng Jiho navrhuje nahradiť formáty akcií založené na JSON a texte, ktoré sú bežné u agentov využívajúcich volanie nástrojov, spustiteľným kódom v jazyku Python. Hlavnou myšlienkou je, že kód je lepšou lingua franca pre akcie agentov než inštrukcie v prirodzenom jazyku alebo štruktúrovaný JSON, pretože kód už v sebe kóduje riadenie toku, dátové závislosti a viacstupňovú kompozíciu — a pretože LLM boli na kóde intenzívne trénované.
Článok prináša tri príspevky: (1) konceptuálny argument pre kód ako zjednotený priestor akcií; (2) M3ToolEval, nový benchmark s 82 manuálne vybranými úlohami vyžadujúcimi kompozíciu viacerých nástrojov; a (3) CodeActAgent, jemne doladený 7B model trénovaný na CodeActInstruct, datasete so 7 139 viacúrovňovými trajektóriami založenými na kóde, ktoré zahŕňajú vyhľadávanie informácií, softvérové balíky, externú pamäť a plánovanie robotov.
Kľúčové myšlienky
- Na benchmarku M3ToolEval dosahuje GPT-4 s CodeAct 74,4 % mieru úspešnosti v porovnaní s 53,7 % pri textových akciách — čo predstavuje absolútne zlepšenie o približne 20 percentuálnych bodov v najnáročnejšom nastavení s viacerými nástrojmi.
- CodeAct vyžaduje približne o 30 % menej interakčných kôl než agenti založení na JSON pri rovnakých úlohách. Menej kôl je dôležitých: každá ďalšia interakcia je novou príležitosťou na šírenie chýb.
- Interpret Pythonu funguje ako automatický chybový signál s nulovými nákladmi. Nesprávny medzivýpočet okamžite vyvolá výnimku; agent uvidí traceback a môže ho revidovať bez potreby samostatného kroku kritiky.
- Open-source modely profitujú viac než uzavreté modely. CodeActAgent (Mistral 7B) dosahuje na M3ToolEval 12,2 % v porovnaní s 3,7 % u doteraz najsilnejšieho open-source agenta (Lemur-70B s textom). Prínos je vyšší, pretože Python je v predtrénovacích dátach zastúpený v hojnom množstve, zatiaľ čo špecializované formáty pre JSON volania nástrojov nie.
- CodeActInstruct trénuje na štyroch doménach špeciálne vybraných na záťažové testovanie kompozície: vyhľadávanie informácií, volania balíkov, manipulácia s externou pamäťou a plánovanie robotov. Všetko sú to viacstupňové úlohy závislé od stavu — presne tie typy zlyhaní, pri ktorých JSON agenti zlyhávajú.
Čo obstojí — a čo nie
Zlepšenie o 20 % na M3ToolEval je reálne, ale M3ToolEval obsahuje len 82 úloh. To je malá vzorka a článok neuvádza intervaly spoľahlivosti. Benchmark bol navyše pripravený rovnakým tímom, ktorý navrhuje metódu, čo je v tejto oblasti bežné, ale stojí to za pozornosť. Predtým, než budeme považovať 74,4 % za spoľahlivé číslo, by som to rád videl replikované na úplne nezávislom benchmarku.
Tvrdenie o efektivite — o 30 % menej kôl — je pravdepodobné, ale spája dve veci. Menej kôl môže znamenať, že agent je v každom kroku presnejší, alebo to môže znamenať, že zlyhania sú ukončené skôr. Článok tieto dva faktory jasne nerozlišuje.
Priznaná priepasť medzi open-source a uzavretými modelmi je veľká a CodeAct ju nevysvetľuje. CodeActAgent (Mistral 7B) s 12,2 % je oveľa lepší ako Lemur-70B s 3,7 %, ale GPT-4 s CodeAct je na úrovni 74,4 %. Formát pomáha, ale neprekonáva 60-bodový rozdiel v schopnostiach. Každý, kto plánuje nasadiť open-source Beancount agenta, by mal toto číslo brať vážne.
Otázka sandboxingu (izolácie) je odbavená jedným odsekom. Spúšťanie ľubovoľného kódu vo finančnom kontexte nie je len nepohodlný okrajový prípad — je to primárny bezpečnostný problém. Článok nerieši, čo sa stane, keď agent vygeneruje kód, ktorý maže súbory, vykonáva sieťové volania alebo importuje neočakávané knižnice. Pre produkčného účtovného agenta je dizajn sandboxu minimálne tak dôležitý ako formát akcií.
Prečo je to dôležité pre finančnú AI
Problém spätného zápisu v Beancount je v podstate presne ten problém, pre ktorý bol CodeAct navrhnutý: agent potrebuje zostaviť viacero operácií (prečítať aktuálny zostatok, validovať transakciu, zapísať novú položku, overiť rovnovážnu rovnicu) v špecifickom poradí, pričom dáta prúdia medzi krokmi. JSON volanie nástrojov to zvláda zle, pretože každé volanie je izolované. Python to zvláda prirodzene.
Konkrétnejšie: agent typu CodeAct pre Beancount by mohol vyjadriť celý pracovný postup párovania ako jediný Python skript — dopytovanie hlavnej knihy cez knižnicu, výpočet rozdielov, navrhovanie nových záznamov a spustenie bean-check na výsledku — to všetko predtým, než čokoľvek potvrdí. Interpret zachytí zjavné chyby; LLM musí riešiť len tie sémantické. To je lepšia deľba práce než žiadať LLM, aby validovalo svoj vlastný JSON.
Bezpečnostné riziko však pôsobí opačne. Agent s neobmedzeným spúšťaním Pythonu nad finančnou knihou predstavuje významný útočný povrch. Správnym dizajnom je takmer určite prísne obmedzený sandbox — žiadne zápisy do súborového systému mimo určeného dočasného adresára, žiadny prístup k sieti, žiadne príkazy shellu — v kombinácii s povinnou bránou bean-check predtým, než sa dotkne akéhokoľvek súboru. CodeAct vám dá formát akcií; klietku si však stále musíte postaviť sami.
Čo si prečítať ďalej
- OpenHands (predtým OpenDevin) — produkčný systém agentov postavený na CodeAct tým istým výskumným tímom; ukazuje, ako sú sandboxing a prostredie na spúšťanie kódu skutočne implementované (arXiv:2407.16741)
- ToolBench / ToolLLM — benchmarky a trénovacie dáta pre agentov volajúcich nástroje pomocou REST API namiesto Pythonu; užitočný kontrast ku kódovo orientovanému prístupu CodeAct (arXiv:2307.16789)
- SWE-bench — vyhodnocuje agentov na reálnych problémoch z GitHubu, čo si vyžaduje viacstupňové spúšťanie kódu a úpravu súborov; najbližší existujúci benchmark k tomu, čo by musel zvládnuť agent na spätný zápis v Beancount (arXiv:2310.06770)
