Explorează datele într-un kernel persistent
Acest ghid arată cum să faci un agent să încarce o dată ceva costisitor și apoi să pună mai multe întrebări despre acel lucru, în loc să plătească încărcarea la fiecare întrebare.
Instrumentul eval rulează un interpretor persistent. Variabilele, importurile și datele încărcate supraviețuiesc între apeluri.
De ce să nu rulezi pur și simplu un script
Secțiune intitulată „De ce să nu rulezi pur și simplu un script”Un python -c de o singură folosire plătește pregătirea la fiecare întrebare. Încărcarea unui dataframe costă secunde și o sută de megabaiți; desenarea lui costă milisecunde. Când fiecare întrebare costă încărcarea, un agent pune mai puține întrebări decât ar trebui — iar fiecare răspuns se întoarce ca text pe care apoi trebuie să îl reanalizeze.
Încarcă o dată, apoi întreabă
Secțiune intitulată „Încarcă o dată, apoi întreabă”Încarcă
data/runs.csvși spune-mi durata p95 pe agent.
import pandas as pdruns = pd.read_csv("data/runs.csv")len(runs)Ultima expresie este afișată așa cum face un notebook, așa că len(runs) raportează numărul de rânduri fără un print.
Apoi, într-un apel separat:
runs.groupby("agent")["duration_ms"].quantile(0.95).sort_values()runs este încă încărcat. Un dataframe pandas se întoarce redat ca tabel, nu ca un repr.
Graficele ajung în chat
Secțiune intitulată „Graficele ajung în chat”import matplotlib.pyplot as pltruns.groupby("agent")["duration_ms"].mean().plot.bar()Figurile sunt capturate după celulă și returnate ca imagini, pe care transcrierea le redă. Tu vezi graficul; la fel îl vede și agentul.
Figurile sunt închise după capturare. O figură necolectată ar fi redesenată și retrimisă și de următoarea celulă, așa că o sesiune de cinci celule ar emite primul grafic de cinci ori.
Idiomurile pe care oricum le-ai tasta
Secțiune intitulată „Idiomurile pe care oricum le-ai tasta”Acestea sunt rescrise în cod simplu, în loc să dea eroare:
| Tastezi | Ce se întâmplă |
|---|---|
%pip install x |
Rulează pip, apoi golește cache-ul de module, așa că următorul import îl vede |
%cd path |
os.chdir |
!command |
Un subproces capturat |
%%bash |
Restul celulei ca script de shell |
%%timeit |
1000 de rulări cronometrate |
Evacuarea cache-ului de la %pip este cea care contează: instalarea într-un interpretor activ nu face nimic pentru un modul care a fost deja importat, așa că fără ea versiunea pe care tocmai ai instalat-o nu este cea care rulează.
Apelarea propriilor instrumente din interiorul unei celule
Secțiune intitulată „Apelarea propriilor instrumente din interiorul unei celule”paths = tool("find", {"pattern": "**/*.dart", "path": "lib"})for path in paths.splitlines()[:100]: contents = tool("read", {"path": path}) ...tool(name, args) reintră în registrul de instrumente propriu al agentului. Asta înseamnă că o celulă se poate ramifica peste o sută de fișiere sau poate delega prin task, fără ca modelul să consume un tur pentru fiecare element.
Un apel prin punte suspendă timeout-ul celulei cât timp este în curs. Bugetul măsoară inactivitatea, nu timpul de ceas — o celulă care se ramifică spre subagenți și așteaptă patru minute nu este blocată, iar oprirea ei la mijlocul ramificării ar pierde întreaga stare a kernelului.
A porni de la zero
Secțiune intitulată „A porni de la zero”eval(code: "…", reset: true, description: "Start a clean interpreter")Aruncă interpretorul și pornește unul curat. Tot ce era încărcat s-a pierdut, iar acesta este scopul.
Unde rulează kernelul
Secțiune intitulată „Unde rulează kernelul”În mediul izolat al conversației, atunci când conversația are unul, altfel pe gazdă.
Un interpretor persistent condus de un model care citește un repo nesigur este exact pentru ce există execuția doar în mediu izolat: un apel bash de o singură folosire cel puțin se termină, în timp ce un kernel este un shell care ține minte.
Nu pornește un mediu izolat pentru a ajunge acolo — aceeași regulă care împiedică pornirea automată a unui tab de stație. Dacă vrei ca kernelul să fie izolat, deschide mai întâi shell-ul conversației. Vezi Oferă unui agent o mașină pe care să testeze.
- O singură celulă odată pentru fiecare kernel. Două celule care concurează într-un interpretor înseamnă două jumătăți din două programe intercalate într-un singur namespace.
- Ieșirea este plafonată. O celulă aflată într-o buclă de afișare este trunchiată, în loc să i se permită să umple fereastra de context.
- Patru imagini per celulă. O buclă de desenare poate emite o figură la fiecare iterație, iar fiecare imagine este un cost fix mare în cererea care o transportă.
- Kernelul moare odată cu rularea. Unul care mai ține un dataframe după ce conversația s-a încheiat este o scurgere.
- Sandbox și securitate — ce înseamnă „izolat” aici
- Oferă unui agent o mașină pe care să testeze — deschiderea mediului izolat
- Instrumente agent integrate — argumentele