Explorar datos en un kernel persistente
Esta guía te muestra cómo hacer que un agente cargue algo costoso una sola vez y luego le haga varias preguntas, en lugar de pagar esa carga en cada pregunta.
La herramienta eval ejecuta un intérprete persistente. Las variables, los imports y los datos cargados sobreviven entre llamadas.
Por qué no basta con ejecutar un script
Sección titulada «Por qué no basta con ejecutar un script»Un python -c de un solo uso paga la configuración en cada pregunta. Cargar un dataframe cuesta segundos y cien megabytes; graficarlo cuesta milisegundos. Cuando cada pregunta cuesta la carga, un agente hace menos preguntas de las que debería, y cada respuesta vuelve como texto que luego tiene que volver a parsear.
Cargar una vez y luego preguntar
Sección titulada «Cargar una vez y luego preguntar»Carga
data/runs.csvy dime la duración p95 por agente.
import pandas as pdruns = pd.read_csv("data/runs.csv")len(runs)La última expresión se muestra tal como lo hace un notebook, así que len(runs) informa el número de filas sin un print.
Luego, en una llamada aparte:
runs.groupby("agent")["duration_ms"].quantile(0.95).sort_values()runs sigue cargado. Un dataframe de pandas vuelve representado como tabla en lugar de como un repr.
Las gráficas llegan al chat
Sección titulada «Las gráficas llegan al chat»import matplotlib.pyplot as pltruns.groupby("agent")["duration_ms"].mean().plot.bar()Las figuras se capturan después de la celda y se devuelven como imágenes, que la transcripción muestra. Tú ves la gráfica; el agente también.
Las figuras se cierran después de la captura. Una figura que no se recoge se volvería a dibujar y la siguiente celda también la reenviaría, así que una sesión de cinco celdas emitiría la primera gráfica cinco veces.
Las construcciones que escribirías de todos modos
Sección titulada «Las construcciones que escribirías de todos modos»Estas se reescriben como código simple en lugar de dar error:
| Escribes | Qué ocurre |
|---|---|
%pip install x |
Ejecuta pip y luego limpia la caché de módulos, de modo que el siguiente import lo vea |
%cd path |
os.chdir |
!command |
Un subproceso capturado |
%%bash |
El resto de la celda como un script de shell |
%%timeit |
1000 ejecuciones cronometradas |
La expulsión de la caché de %pip es la que importa: instalar en un intérprete en vivo no hace nada por un módulo que ya se importó, así que sin ella la versión que acabas de instalar no es la que se está ejecutando.
Llamar a tus propias herramientas desde dentro de una celda
Sección titulada «Llamar a tus propias herramientas desde dentro de una celda»paths = tool("find", {"pattern": "**/*.dart", "path": "lib"})for path in paths.splitlines()[:100]: contents = tool("read", {"path": path}) ...tool(name, args) vuelve a entrar en el registro de herramientas del propio agente. Eso significa que una celda puede repartirse entre cien archivos, o delegar mediante task, sin que el modelo gaste un turno por cada elemento.
Una llamada puente suspende el tiempo de espera de la celda mientras está pendiente. El presupuesto mide inactividad, no tiempo de reloj: una celda que se reparte entre subagentes y espera cuatro minutos no está colgada, y matarla a mitad de la repartición perdería el estado de todo el kernel.
Empezar de nuevo
Sección titulada «Empezar de nuevo»eval(code: "…", reset: true, description: "Start a clean interpreter")Descarta el intérprete y arranca uno limpio. Todo lo cargado desaparece, que es justamente el punto.
Dónde se ejecuta el kernel
Sección titulada «Dónde se ejecuta el kernel»En el recinto de la conversación cuando lo tiene; en el host, de lo contrario.
Un intérprete persistente controlado por un modelo que lee un repo que no es de confianza es exactamente para lo que existe la ejecución solo dentro de un recinto: una llamada bash de un solo uso al menos termina, mientras que un kernel es un shell que recuerda.
No arranca un recinto para llegar hasta allí: la misma regla que impide que una pestaña de rig se inicie automáticamente. Si quieres el kernel dentro de un recinto, abre primero el shell de la conversación. Consulta Dar a un agente una computadora para probar.
Límites
Sección titulada «Límites»- Una celda a la vez por kernel. Dos celdas compitiendo en un mismo intérprete son dos mitades de dos programas entrelazadas en un mismo espacio de nombres.
- La salida está limitada. Una celda en un bucle de impresión se trunca en lugar de permitírsele llenar la ventana de contexto.
- Cuatro imágenes por celda. Un bucle de graficación puede emitir una figura por iteración, y cada imagen es un costo fijo alto en la solicitud que la transporta.
- El kernel muere con la ejecución. Uno que aún retiene un dataframe después de que terminó la conversación es una fuga.
Relacionado
Sección titulada «Relacionado»- Sandbox y seguridad — qué significa «dentro de un recinto» aquí
- Dar a un agente una computadora para probar — abrir el recinto
- Herramientas de agente integradas — los argumentos