コンテンツにスキップ

永続カーネルでデータを探索

このガイドでは、コストの高い読み込みを一度だけ行わせ、その後はそのデータに何度も問い合わせるようにエージェントを使う方法を説明します。質問のたびに読み込みのコストを払う必要はありません。

eval ツールは永続インタープリターを実行します。変数、インポート、読み込んだデータは呼び出しをまたいで残ります。

単発の python -c は、質問のたびにセットアップのコストを払います。データフレームの読み込みには数秒と 100 メガバイトかかりますが、グラフ化にはミリ秒しかかかりません。質問のたびに読み込みのコストがかかると、エージェントは本来すべき数より少ない質問しかしなくなり、しかも各回答はテキストとして返ってくるため、それをまた解析し直さなければなりません。

data/runs.csv を読み込んで、エージェント別の p95 所要時間を教えて。

import pandas as pd
runs = 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 plt
runs.groupby("agent")["duration_ms"].mean().plot.bar()

図はセルの実行後にキャプチャされ、画像として返され、トランスクリプトがそれをレンダリングします。あなたがグラフを見られるだけでなく、エージェントも見られます。

図はキャプチャ後に閉じられます。回収されなかった図は、次のセルでも再描画されて再送信されてしまうため、5 セルのセッションでは最初のグラフが 5 回出力されることになります。

これらはエラーにはならず、素のコードに書き換えられます:

入力するもの 何が起きるか
%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) は、エージェント自身のツールレジストリに再び入ります。これにより、モデルが項目ごとに 1 ターンを費やすことなく、セルが 100 個のファイルへファンアウトしたり、task を通じて委任したりできます。

ブリッジ経由の呼び出しは、それが未完了である間、セルのタイムアウトを中断します。この予算が測るのは実時間ではなく無操作時間です — サブエージェントへファンアウトして 4 分待つセルはハングしているのではなく、ファンアウトの途中で kill すればカーネルの状態全体を失うことになります。

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

インタープリターを破棄し、まっさらなものを起動します。読み込んだものはすべて失われますが、それこそが狙いです。

会話にエンクロージャーがあればその中で、なければホスト上で実行されます。

信頼できないリポジトリを読むモデルに駆動される永続インタープリターは、エンクロージャー内限定の実行が存在する理由そのものです。単発の bash 呼び出しは少なくとも終わりますが、カーネルは記憶するシェルです。

そのためにエンクロージャーを起動することはありません — リグのタブを自動起動させないのと同じルールです。カーネルをエンクロージャー内で動かしたい場合は、先に会話のシェルを開いてください。エージェントにテスト用マシンを渡すを参照してください。

  • カーネルごとに同時に実行できるセルは 1 つ。 1 つのインタープリターで 2 つのセルが競合すると、2 つのプログラムの前半同士が 1 つの名前空間で交互に実行されることになります。
  • 出力には上限があります。 print ループに入ったセルは、コンテキストウィンドウを埋め尽くすことは許されず、切り詰められます。
  • セルあたり画像 4 枚。 プロットのループはイテレーションごとに図を出力しうるため、画像 1 枚ごとに、それを運ぶリクエストへ大きな固定コストがかかります。
  • カーネルは実行とともに終了します。 会話が終わった後もデータフレームを保持し続けるカーネルはリークです。