Tovább a tartalomhoz

Adatok feltárása tartós kernelben

Ez az útmutató bemutatja, hogyan érheti el, hogy egy ügynök egyszer betöltsön valami költséges dolgot, majd több kérdést is feltegyen róla, ahelyett hogy minden kérdésnél megfizetné a betöltés árát.

Az eval eszköz egy tartós értelmezőt futtat. A változók, az importok és a betöltött adatok megmaradnak a hívások között.

Miért nem futtatni egyszerűen egy szkriptet

Szekció neve “Miért nem futtatni egyszerűen egy szkriptet”

Egy egyszeri python -c minden kérdésnél kifizeti az előkészítést. Egy dataframe betöltése másodpercekbe és száz megabájtba kerül; a diagrammá alakítása milliszekundumokba. Ha minden kérdés a betöltésbe kerül, az ügynök kevesebb kérdést tesz fel, mint amennyit kellene — és minden válasz szövegként jön vissza, amelyet aztán újra fel kell dolgoznia.

Töltse be a data/runs.csv fájlt, és mondja meg az ügynökönkénti p95 időtartamot.

import pandas as pd
runs = pd.read_csv("data/runs.csv")
len(runs)

Az utolsó kifejezés ugyanúgy visszhangzik, ahogy egy notebook teszi, így a len(runs) print nélkül is megadja a sorok számát.

Aztán egy külön hívásban:

runs.groupby("agent")["duration_ms"].quantile(0.95).sort_values()

A runs még mindig be van töltve. A pandas frame nem repr formájában, hanem táblázatként renderelve jön vissza.

import matplotlib.pyplot as plt
runs.groupby("agent")["duration_ms"].mean().plot.bar()

Az ábrák a cella után rögzítésre kerülnek, és képként jönnek vissza, amelyeket az átirat megjelenít. Ön látja a diagramot; az ügynök is.

Az ábrák a rögzítés után bezáródnak. Egy össze nem gyűjtött ábrát a következő cella is újrarajzolna és újra elküldene, így egy ötcellás munkamenet ötször küldené el az első diagramot.

Azok az idiómák, amelyeket egyébként is beírna

Szekció neve “Azok az idiómák, amelyeket egyébként is beírna”

Ezeket a rendszer egyszerű kódra írja át, ahelyett hogy hibát adna:

Amit beír Mi történik
%pip install x Lefuttatja a pipet, majd törli a modulgyorsítótárat, hogy a következő import lássa
%cd path os.chdir
!command Egy rögzített alfolyamat
%%bash A cella hátralévő része shellszkriptként
%%timeit 1000 időzített futás

A %pip gyorsítótár-ürítése a lényeges: egy már importált modul esetében a futó értelmezőbe telepítés nem tesz semmit, így enélkül nem az imént telepített verzió fut.

Saját eszközök hívása a cellán belülről

Szekció neve “Saját eszközök hívása a cellán belülről”
paths = tool("find", {"pattern": "**/*.dart", "path": "lib"})
for path in paths.splitlines()[:100]:
contents = tool("read", {"path": path})
...

A tool(name, args) visszalép az ügynök saját eszközregiszterébe. Ez azt jelenti, hogy egy cella szétágazhat akár száz fájlra, vagy a task-on keresztül delegálhat, anélkül hogy a modell tételenként egy-egy kört költene.

A hídon átmenő hívás felfüggeszti a cella időtúllépését, amíg az függőben van. A keret a tétlenséget méri, nem a falióra szerinti időt — egy cella, amely alügynökökre ágazik szét, és négy percig vár, nem akadt meg, és a szétágazás közbeni leállítása a teljes kernel állapotát elveszítené.

eval(code: "…", reset: true, description: "Start a clean interpreter")

Eldobja az értelmezőt, és egy tisztát indít. Minden betöltött dolog eltűnik — éppen ez a lényeg.

A beszélgetés elszigetelt környezetében, ha van neki ilyen, egyébként a gazdagépen.

Egy tartós értelmező, amelyet egy nem megbízható repót olvasó modell vezérel, pontosan az az eset, amelyre a kizárólag elszigetelt környezetben való végrehajtás létezik: egy egyszeri bash hívás legalább véget ér, a kernel viszont egy emlékező shell.

Ehhez nem indít elszigetelt környezetet — ugyanaz a szabály, amely megakadályozza, hogy egy állomásfül automatikusan elinduljon. Ha azt szeretné, hogy a kernel elszigetelt környezetben fusson, először nyissa meg a beszélgetés shelljét. Lásd: Tesztgép adása egy ügynöknek.

  • Kernelenként egyszerre egy cella. Két cella versengése egy értelmezőben két program két fele, egyetlen névtérben összefonva.
  • A kimenet korlátozott. Egy nyomtatási ciklusban lévő cella csonkolva lesz, ahelyett hogy megtölthetné a kontextusablakot.
  • Cellánként négy kép. Egy ábrázolási ciklus iterációnként egy ábrát bocsáthat ki, és minden kép nagy, fix költséget jelent abban a kérésben, amely szállítja.
  • A kernel a futtatással együtt hal meg. Az, amelyik a beszélgetés befejeződése után is fogva tart egy dataframe-et, szivárgás.