永続カーネルでデータを探索
このガイドでは、コストの高い読み込みを一度だけ行わせ、その後はそのデータに何度も問い合わせるようにエージェントを使う方法を説明します。質問のたびに読み込みのコストを払う必要はありません。
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()図はセルの実行後にキャプチャされ、画像として返され、トランスクリプトがそれをレンダリングします。あなたがグラフを見られるだけでなく、エージェントも見られます。
図はキャプチャ後に閉じられます。回収されなかった図は、次のセルでも再描画されて再送信されてしまうため、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 枚ごとに、それを運ぶリクエストへ大きな固定コストがかかります。
- カーネルは実行とともに終了します。 会話が終わった後もデータフレームを保持し続けるカーネルはリークです。
関連項目
「関連項目」というセクション- サンドボックスとセキュリティ — ここでいう「エンクロージャー内」の意味
- エージェントにテスト用マシンを渡す — エンクロージャーを開く
- 内蔵エージェントツール — 引数