Jelajahi data di kernel persisten
Panduan ini menunjukkan cara membuat agen memuat sesuatu yang mahal sekali, lalu mengajukan beberapa pertanyaan tentangnya, alih-alih membayar biaya pemuatan pada setiap pertanyaan.
Alat eval menjalankan interpreter persisten. Variabel, impor, dan data yang dimuat tetap bertahan di antara panggilan.
Mengapa tidak sekadar menjalankan skrip
Bagian berjudul “Mengapa tidak sekadar menjalankan skrip”python -c sekali jalan membayar biaya penyiapan pada setiap pertanyaan. Memuat dataframe memakan waktu beberapa detik dan seratus megabita; menggambarnya sebagai grafik memakan waktu milidetik. Ketika setiap pertanyaan memakan biaya pemuatan, agen mengajukan lebih sedikit pertanyaan daripada yang seharusnya — dan setiap jawaban kembali sebagai teks yang kemudian harus diuraikan ulang.
Muat sekali, lalu bertanya
Bagian berjudul “Muat sekali, lalu bertanya”Muat
data/runs.csvdan beri tahu saya durasi p95 per agen.
import pandas as pdruns = pd.read_csv("data/runs.csv")len(runs)Ekspresi terakhir ditampilkan kembali seperti yang dilakukan notebook, sehingga len(runs) melaporkan jumlah baris tanpa print.
Lalu, dalam panggilan terpisah:
runs.groupby("agent")["duration_ms"].quantile(0.95).sort_values()runs masih termuat. Frame pandas dikembalikan dengan dirender sebagai tabel, bukan sebagai repr.
Grafik muncul di chat
Bagian berjudul “Grafik muncul di chat”import matplotlib.pyplot as pltruns.groupby("agent")["duration_ms"].mean().plot.bar()Gambar ditangkap setelah sel dan dikembalikan sebagai gambar yang dirender oleh transkrip. Anda melihat grafiknya; agen pun melihatnya.
Gambar ditutup setelah ditangkap. Gambar yang tidak dikumpulkan akan digambar ulang dan dikirim lagi oleh sel berikutnya juga, sehingga sesi lima sel akan memunculkan grafik pertama sebanyak lima kali.
Idiom yang memang akan Anda ketik
Bagian berjudul “Idiom yang memang akan Anda ketik”Ini ditulis ulang menjadi kode biasa alih-alih memunculkan galat:
| Yang Anda ketik | Apa yang terjadi |
|---|---|
%pip install x |
Menjalankan pip, lalu membersihkan cache modul agar import berikutnya melihatnya |
%cd path |
os.chdir |
!command |
Subproses yang ditangkap |
%%bash |
Sisa sel sebagai skrip shell |
%%timeit |
1000 eksekusi terukur |
Penggusuran cache %pip adalah yang paling penting: memasang ke interpreter yang sedang berjalan tidak berpengaruh apa pun bagi modul yang sudah diimpor, jadi tanpanya versi yang baru Anda pasang bukan versi yang sedang berjalan.
Memanggil alat Anda sendiri dari dalam sel
Bagian berjudul “Memanggil alat Anda sendiri dari dalam sel”paths = tool("find", {"pattern": "**/*.dart", "path": "lib"})for path in paths.splitlines()[:100]: contents = tool("read", {"path": path}) ...tool(name, args) masuk kembali ke registri alat milik agen itu sendiri. Artinya, sebuah sel dapat menyebar ke lebih dari seratus berkas, atau didelegasikan melalui task, tanpa model menghabiskan satu giliran per item.
Panggilan yang dijembatani menangguhkan batas waktu sel selama panggilan itu belum selesai. Anggaran mengukur ketidakaktifan, bukan waktu jam dinding — sel yang menyebar ke subagen dan menunggu empat menit tidak macet, dan mematikannya di tengah penyebaran akan menghilangkan seluruh status kernel.
Memulai ulang
Bagian berjudul “Memulai ulang”eval(code: "…", reset: true, description: "Start a clean interpreter")Membuang interpreter dan memulai yang bersih. Semua yang dimuat hilang, dan itulah intinya.
Di mana kernel berjalan
Bagian berjudul “Di mana kernel berjalan”Di enclosure percakapan bila percakapan memilikinya, jika tidak di host.
Interpreter persisten yang digerakkan oleh model yang membaca repo tidak tepercaya adalah persis alasan eksekusi yang hanya dijalankan di dalam enclosure ada: panggilan bash sekali jalan setidaknya berakhir, sedangkan kernel adalah shell yang mengingat.
Ia tidak menyalakan enclosure untuk mencapai itu — aturan yang sama yang mencegah tab rig memulai otomatis. Jika Anda ingin kernel berada di dalam enclosure, buka shell percakapan terlebih dahulu. Lihat Berikan agen mesin untuk menguji.
- Satu sel pada satu waktu per kernel. Dua sel yang berlomba dalam satu interpreter adalah dua paruh dari dua program yang saling menyisip dalam satu namespace.
- Output dibatasi. Sel dalam loop print dipotong alih-alih dibiarkan memenuhi jendela konteks.
- Empat gambar per sel. Loop yang menggambar grafik dapat memunculkan satu gambar per iterasi, dan setiap gambar adalah biaya tetap yang besar dalam permintaan yang membawanya.
- Kernel mati bersama run. Kernel yang masih memegang dataframe setelah percakapan berakhir adalah kebocoran.
Terkait
Bagian berjudul “Terkait”- Sandbox dan keamanan — apa arti “tertutup” di sini
- Berikan agen mesin untuk menguji — membuka enclosure
- Alat agen bawaan — argumennya