영속 커널에서 데이터 탐색
이 가이드에서는 에이전트가 비용이 큰 로딩을 한 번만 수행한 뒤, 질문할 때마다 그 비용을 치르는 대신 같은 데이터에 여러 질문을 던지도록 하는 방법을 보여 줍니다.
eval 도구는 영속 인터프리터를 실행합니다. 변수, 임포트, 로드한 데이터는 호출 사이에도 그대로 유지됩니다.
스크립트를 그냥 실행하면 안 되는 이유
섹션 제목: “스크립트를 그냥 실행하면 안 되는 이유”일회성 python -c는 질문마다 준비 비용을 치릅니다. 데이터프레임을 로드하는 데는 몇 초와 100메가바이트가 들지만, 차트로 그리는 데는 밀리초밖에 걸리지 않습니다. 질문마다 로딩 비용이 붙으면 에이전트는 마땅히 해야 할 만큼 질문하지 않게 되고, 게다가 각 답변이 텍스트로 돌아오므로 다시 파싱해야 합니다.
한 번 로드하고 여러 번 질문하기
섹션 제목: “한 번 로드하고 여러 번 질문하기”
data/runs.csv를 로드하고 에이전트별 p95 소요 시간을 알려 줘.
import pandas as pdruns = pd.read_csv("data/runs.csv")len(runs)마지막 표현식은 노트북처럼 에코되므로, len(runs)는 print 없이도 행 수를 보고합니다.
그다음에는 별도의 호출에서:
runs.groupby("agent")["duration_ms"].quantile(0.95).sort_values()runs는 여전히 로드된 상태입니다. pandas 프레임은 repr이 아니라 표로 렌더링되어 반환됩니다.
차트는 채팅에 나타납니다
섹션 제목: “차트는 채팅에 나타납니다”import matplotlib.pyplot as pltruns.groupby("agent")["duration_ms"].mean().plot.bar()그림은 셀 실행 후에 캡처되어 이미지로 반환되고, 트랜스크립트가 이를 렌더링합니다. 여러분도 차트를 보고, 에이전트도 봅니다.
그림은 캡처한 뒤 닫힙니다. 수집되지 않은 그림은 다음 셀에서도 다시 그려져 다시 전송되므로, 셀 다섯 개짜리 세션이라면 첫 번째 차트가 다섯 번 출력됩니다.
어차피 입력하게 되는 관용 표현
섹션 제목: “어차피 입력하게 되는 관용 표현”다음은 오류를 내는 대신 순수 코드로 다시 작성됩니다:
| 입력하는 것 | 일어나는 일 |
|---|---|
%pip install x |
pip를 실행한 뒤 모듈 캐시를 지우므로 다음 import가 인식합니다 |
%cd path |
os.chdir |
!command |
캡처된 서브프로세스 |
%%bash |
셀의 나머지를 셸 스크립트로 실행 |
%%timeit |
1000회 시간 측정 실행 |
중요한 것은 %pip의 캐시 제거입니다. 실행 중인 인터프리터에 설치해도 이미 임포트된 모듈에는 아무 효과가 없으므로, 이것이 없으면 방금 설치한 버전이 실행되는 버전이 아닙니다.
셀 안에서 자체 도구 호출하기
섹션 제목: “셀 안에서 자체 도구 호출하기”paths = tool("find", {"pattern": "**/*.dart", "path": "lib"})for path in paths.splitlines()[:100]: contents = tool("read", {"path": path}) ...tool(name, args)는 에이전트 자체의 도구 레지스트리로 다시 들어갑니다. 즉, 모델이 항목마다 턴을 소비하지 않고도 셀이 파일 100개로 팬아웃하거나 task를 통해 위임할 수 있습니다.
브리지를 거친 호출은 완료되지 않은 동안 셀의 타임아웃을 중단시킵니다. 이 예산이 측정하는 것은 실시간이 아니라 비활성 시간입니다 — 서브에이전트로 팬아웃하고 4분을 기다리는 셀은 멈춘 것이 아니며, 팬아웃 도중에 이를 종료하면 커널의 상태 전체를 잃게 됩니다.
처음부터 다시 시작하기
섹션 제목: “처음부터 다시 시작하기”eval(code: "…", reset: true, description: "Start a clean interpreter")인터프리터를 버리고 깨끗한 것을 새로 시작합니다. 로드한 모든 것이 사라지며, 바로 그것이 핵심입니다.
커널이 실행되는 위치
섹션 제목: “커널이 실행되는 위치”대화에 인클로저가 있으면 그 안에서, 없으면 호스트에서 실행됩니다.
신뢰할 수 없는 저장소를 읽는 모델이 구동하는 영속 인터프리터는 인클로저 전용 실행이 존재하는 바로 그 이유입니다. 일회성 bash 호출은 적어도 끝나지만, 커널은 기억하는 셸입니다.
그렇다고 해서 인클로저를 부팅하지는 않습니다 — 리그 탭이 자동으로 시작되지 않게 하는 것과 같은 규칙입니다. 커널을 인클로저 안에서 실행하려면 먼저 대화의 셸을 여십시오. 에이전트에 테스트용 머신 제공을 참고하십시오.
- 커널당 한 번에 하나의 셀. 하나의 인터프리터에서 두 셀이 경쟁하면 두 프로그램의 절반씩이 하나의 네임스페이스에서 뒤섞여 실행되는 셈입니다.
- 출력에는 상한이 있습니다. print 루프에 빠진 셀은 컨텍스트 윈도우를 채우도록 내버려 두지 않고 잘라냅니다.
- 셀당 이미지 네 개. 플롯 루프는 반복마다 그림을 하나씩 내보낼 수 있으며, 이미지마다 이를 실어 보내는 요청에 큰 고정 비용이 붙습니다.
- 커널은 실행과 함께 종료됩니다. 대화가 끝난 뒤에도 데이터프레임을 붙들고 있는 커널은 누수입니다.
관련 항목
섹션 제목: “관련 항목”- 샌드박스와 보안 — 여기서 “인클로저 안”이 뜻하는 것
- 에이전트에 테스트용 머신 제공 — 인클로저 열기
- 내장 에이전트 도구 — 인수