00:00:00AIエージェントをより強力にする最もシンプルな方法の1つは、単に
00:00:03Bashへのアクセス権を与えることですが、それは少し複雑な場合があります。本物のシェル、ファイルシステム、
00:00:09サーバー、コンテナなど、全体的に膨大なインフラが必要になるからです。少なくとも、これまではそうでした。
00:00:13でも、もっと簡単な方法があると言ったらどうでしょう?実は、TypeScriptで実装された
00:00:18Bashを使うことができるんです。少し突飛に聞こえるかもしれませんが、信じてください。これは非常にクールで、
00:00:22コスト削減にも繋がります。その方法をお見せしましょう。
00:00:30これは「justbash」という新しいパッケージです。READMEにはこう書かれています。
00:00:34「TypeScriptで書かれた、インメモリ仮想ファイルシステムを持つシミュレートされたBash環境」。
00:00:38セキュアでサンドボックス化されたBash環境を必要とするAIエージェント向けに設計されています。
00:00:42これをAIエージェントと連携させて機能を拡張する方法を紹介する前に、まずは簡単なコードをお見せして、
00:00:45これがどのように動作するのかの背景を説明したいと思います。ここで、justbashパッケージから
00:00:48新しいBash環境を起動します。そして、その内部でBashコマンドを実行できます。
00:00:53ここでは `env.exec` を使い、単純に「echo hello」というBashコマンドを実行し、
00:00:57それを「greeting.txt」というファイルに保存するよう指示しています。次に、同じ環境で再び `exec` を実行し、
00:01:01今度はその「greeting.txt」ファイルを読み込むように指定します。ご覧の通り、返された結果の
00:01:06標準出力、終了コード、そして環境変数をログに出力することができます。
00:01:10これを実行すると、ファイルの書き込みと読み込みに成功したことがわかります。終了コードは0で、
00:01:14シミュレートされたBashシェル内の環境変数も表示されています。ここで重要なのは、
00:01:18先ほども言った通り、これはあくまで「シミュレートされた」Bashシェルであるということです。
00:01:22文字通り、BashコマンドをTypeScriptで書き直したものなのです。つまり、
00:01:26実際の本物のシェルに接続されているわけではなく、単に与えられたコマンドを
00:01:30TypeScriptに変換して実行しているだけです。「greeting.txt」というファイルも、
00:01:34実際のファイルシステム上には存在しません。これはインメモリの仮想ファイルシステムです。
00:01:39(ただし、必要であれば本物のファイルシステムに接続するオプションもあります)。
00:01:44簡単に言えば、`exec` 関数の中に書いたBashコマンドを、
00:01:47単にJavaScriptの関数に変換して実行しているだけなのです。そのため、
00:01:51本物のシェルは必要ありません。実際のコードベースを見てみましょう。`exec` の中に `echo` を入れると、
00:01:55実際にはこのJavaScript関数が実行されます。ここには、Bashの `echo` コマンドが持つフラグを解析し、
00:01:59JavaScriptに変換して、`echo` の後に入力した内容を出力するロジックが含まれています。
00:02:03そして下の方を見ると、JavaScriptの標準出力、標準エラー、
00:02:08そして終了コードを含むオブジェクトを返しているのがわかります。
00:02:11Bashの基本的な機能をすべてカバーできるのか疑問に思うかもしれませんが、
00:02:15ここでサポートされているコマンドのリストを見ることができます。cat、copy、awk、base64など、
00:02:19本当にたくさんのコマンドがあります。jq、Python 3、SQLiteといったデータ処理用の高度なものもありますし、
00:02:23curlを使ってネットワークリクエストを実行することさえ可能です。ホワイトリストを設定できるので、
00:02:27セキュリティも確保されています。また、パイプ、リダイレクト、コマンドチェーンなどの
00:02:33シェル機能も備わっており、基本的なBashシェルができることはほぼ網羅しています。
00:02:36このパッケージが非常に機能的でクールなのはお分かりいただけたと思いますが、
00:02:41なぜTypeScriptによるBash実装が必要なのか、それがどうエージェントを助け、
00:02:45コスト削減に繋がるのか不思議に思っているでしょう。その答えとして、非常にシンプルなチャットアプリでの
00:02:48ユースケースをお見せします。例えば、このチャットアプリで、膨大なレコードを含む
00:02:53このJSONファイルについて話したいとします。AIに特定の情報を抽出させたり、
00:02:57一部のフィールドを分析させたりしたい場合、これは非常に巨大なファイルです。
00:03:02最も単純ですが、間違いなく「正しくない」方法は、ファイルの内容をすべてプロンプトに詰め込むことです。
00:03:06ここではAI SDKとGPT-4o(5.2と発言していますが文脈上モデル名)を使用しています。実際にこのエージェントを動かして、
00:03:11特定のレコードを取得させてみると、アシスタントが回答を返してくれます。最近のモデルは
00:03:15巨大なコンテキストから値を検索するのが得意なので、この回答は正確です。しかし問題は、
00:03:19これだけで133,000トークンを消費したことです。また、より高度な質問、
00:03:24例えばデータの加工や特定の範囲内のデータについて尋ねたりすると、破綻し始めます。
00:03:28先ほども言った通り、これは明らかに間違ったやり方です。次に考えられるのは、RAG(検索拡張生成)を使うか、
00:03:33あるいはエージェントにサンドボックスを与えてBashコマンドでデータを操作させる方法でしょう。
00:03:39しかし、それらのアプローチの問題点は、多くのインフラが必要になることです。そこで代わりに、
00:03:43justbashでこれをシミュレートしてみましょう。AI SDKでこれを行うには、
00:03:48justbashをベースに構築された「bash-tool」パッケージを使用できます。これを使えば、
00:03:51チャットのAPIエンドポイントで新しいBashツールを作成し、シミュレートされたBash環境に
00:03:56含めたいファイルを渡すことができます。私の場合は、先ほどの巨大なJSONファイルを渡しています。
00:04:00次に、これらのファイルが置かれる場所を設定します。ここでは「/workspace」ディレクトリに配置されます。
00:04:05あとは、AI SDKのストリームにこのBashツールを渡すだけです。
00:04:09また、エージェントへの指示(インストラクション)も渡しています。これはパッケージに用意されているもので、
00:04:13AIエージェントがBashツールの使い方を理解するのに役立ちます。この非常にシンプルな設定で、
00:04:17アシスタントに全く同じ質問(JSONファイルからの情報取得)をしてみましょう。
00:04:21自分のコンテキストを消費して「わら山から針を探す」ような検索をする代わりに、
00:04:26エージェントが実際にBashコマンドを実行しに行くのがわかります。繰り返しますが、
00:04:31これはシミュレートされたTypeScript環境での動作です。このケースでは、最初に `jq` コマンドを試しましたが、
00:04:34エラーになったようです。そこで次に `head` コマンドを実行してファイル形式を確認し、
00:04:39正しい形式の `jq` コマンドを組み立てて答えを出しました。全く同じ回答が得られ、
00:04:42時間は少しかかったかもしれませんが、重要なのはここです。消費した入力トークンはわずか6,000でした。
00:04:46以前の方法が133,000トークンだったのに対し、これは長いコンテキストを扱う上で遥かに優れた方法です。
00:04:50利点はそれだけではありません。データについてより深い質問をすると、さらに強力になります。
00:04:54例えば、「1,000から2,500の間で `metadata.active` が `true` のレコードは何件あるか」と聞くと、
00:04:58Bashコマンドを実行して、すぐに答えを出してくれます。これを以前のバージョンで試そうとすると、
00:05:02膨大なコンテキストを消費する上に、おそらく推測に基づいた間違った答えが返ってくるでしょう。
00:05:06今回の方法は、エージェントにBashシェルへの完全なアクセス権を与えているようなものなので、
00:05:10遥かに正確です(厳密には本物のシェルではありませんが)。インフラを追加することなく、
00:05:15エージェントを強力にできる、非常にシンプルで無料の価値向上手段です。そこが本当に気に入っています。
00:05:19今回はユースケースを一つだけ紹介しましたが、他にもたくさんあります。先ほど見たように、
00:05:24基本的なPython、SQL、curlコマンドも動作しますし、必要なら本物のファイルシステムに接続することもできます。
00:05:28justbashについてどう思ったか、コメント欄で教えてください。チャンネル登録も忘れずに。
00:05:33それでは、また次回の動画でお会いしましょう!
00:05:37just simply go off and run a bash command and get us the answer straight away if you actually
00:05:41tried this in the other version a it would take up a lot of context and b it probably
00:05:45just give you a wrong answer based on guessing this is going to be far more accurate as you're
00:05:49essentially just saying to the agent hey you have complete access to a bash shell even though
00:05:53it technically doesn't it's honestly just such a simple free value add that you can provide
00:05:57to your agents to make them more powerful with no additional infrastructure needed and that's
00:06:01what i really love about it hopefully i've showcased just one of its use cases but trust
00:06:05me there is so many more as we actually saw earlier you can get basic python sql and curl
00:06:10commands working in here and if you wanted to you can actually attach this to a real file
00:06:14system let me know what you think of just bash in the comments below while you're there subscribe
00:06:18and as always see you in the next one