TypeScriptでBashコマンドを実行?(これは天才的)

BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술

Transcript

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

Key Takeaway

justbashを使用することで、追加のインフラなしにAIエージェントへ安全で低コストなBash実行環境を提供し、トークン節約と回答精度の向上を同時に実現できます。

Highlights

TypeScriptでBash環境をシミュレートする画期的なパッケージ「justbash」の紹介

インメモリ仮想ファイルシステムにより、複雑なサーバーインフラなしでBashコマンドが実行可能

AIエージェントにBashツールを与えることで、コンテキストトークンの消費を劇的に削減(133kから6kへ)

jq、Python 3、SQLite、curlなどの主要なコマンドやパイプ、リダイレクトをサポート

巨大なデータ解析において、推測ではなく正確なコマンド実行による回答の精度向上

Timeline

justbashの概要とTypeScriptによるBashシミュレーション

動画の冒頭では、AIエージェントにBashコマンドを実行させるための従来の手法が、サーバーやコンテナなどの膨大なインフラを必要としていた課題を指摘しています。新しく登場した「justbash」は、TypeScriptで実装されたインメモリ仮想ファイルシステムを持つシミュレート環境であり、この複雑さを解消します。具体例として、`env.exec`を使用してファイルを書き込み、その内容を読み出すデモが行われ、標準出力や終了コードが正しく返される様子が示されます。これは本物のシェルに接続しているのではなく、BashコマンドをJavaScriptのロジックに変換して実行しているため、非常に軽量でセキュアです。このアプローチにより、開発者はインフラ管理の手間から解放され、コスト削減も期待できると説明されています。

サポートされるコマンドと内部ロジックの詳細

ここでは、justbashがどのようにTypeScriptでBashコマンドを再現しているかの内部構造について深掘りします。例えば、`echo`コマンドが実行されると、内部ではフラグを解析しJavaScriptの標準出力を返す特定の関数が呼び出される仕組みになっています。サポートされているコマンドは多岐にわたり、catやcopyといった基本操作から、jq、Python 3、SQLite、さらにはcurlによるネットワーク通信まで含まれています。また、ホワイトリストによるセキュリティ制御や、パイプ、リダイレクト、コマンドチェーンといったシェルの基本機能も網羅されています。これにより、シミュレート環境でありながら実用的なBash操作のほとんどが可能であることが強調されています。

巨大なデータ処理におけるAIエージェントの課題

なぜTypeScriptによるBash実装が必要なのかという点について、具体的なAIチャットアプリのユースケースを用いて解説しています。巨大なJSONファイルから特定の情報を抽出する際、ファイルの内容をすべてプロンプトに詰め込む「ナイーブ」な方法は、膨大なトークンを消費するため非効率です。動画内では、GPT-4oを使用した例で133,000トークンも消費してしまい、さらに複雑なデータ加工では回答が破綻し始めるリスクが示されています。RAG(検索拡張生成)や外部サンドボックスの利用も検討されますが、それらには依然として高いインフラコストが伴います。このセクションでは、効率的で正確なデータ操作を実現するための新しいアプローチの必要性が論じられています。

bash-toolによるトークン削減と精度の検証

AI SDKと「bash-tool」パッケージを組み合わせることで、AIエージェントにjustbash環境を統合する手順が示されます。エージェントは自らjqやheadコマンドを組み立てて実行し、133,000トークン必要だった処理をわずか6,000トークンで完結させることに成功しました。特筆すべきは、モデルが巨大なテキストを読み解くのではなく、正確なBashコマンドを「道具」として使うため、計算やフィルタリングの精度が飛躍的に向上する点です。例えば、特定の数値範囲かつ特定のステータスを持つレコード数を数えるといった複雑な質問に対しても、コマンド実行によって即座に正確な回答を導き出せます。これは、追加のサーバー費用をかけずにAIの能力を拡張できる「無料の価値向上手段」であると結論づけられています。

まとめとその他の活用可能性

最後に、justbashのさらなる拡張性について触れ、基本的なPythonやSQL、curlコマンドの利用だけでなく、必要に応じて本物のファイルシステムに接続するオプションがあることも紹介されています。AIエージェントが「本物のシェルへの完全なアクセス権」を持っているかのように振る舞えるこの技術は、開発者にとって非常に強力な武器となります。スピーカーは、このツールがインフラ不要でエージェントを強力にするシンプルさを改めて高く評価しています。視聴者に対して、この革新的なアプローチについての意見をコメント欄で募集し、チャンネル登録を促して動画を締めくくります。全体を通して、AI開発における効率化と精度向上のための実践的なテクニックが提示されました。

Community Posts

View all posts