00:00:00モデルが強力になり始めて以来、多くの人々が素晴らしいプロダクトを作り、
00:00:04そこにモデルを統合して、私たちの多くの課題を解決してきました。しかし、これらのシステムは大量の
00:00:09トークンを消費します。特にAPIを使ってモデルを統合している場合は顕著です。その解決策は、
00:00:15思っているよりもずっとシンプルです。最善のアーキテクチャは、極端なパイプラインや高度なチューニングではなく、
00:00:20実はUnixベースのシステムの基礎となっている「すべてはファイルである」という古い哲学なのです。
00:00:25もちろん、彼らはモデルのコストについて話していたわけではなく、デバイスやファイルの話でした。しかし
00:00:30驚くべきことに、この高コスト問題の解決策も、全く同じ原則にあります。そしてこれこそが、
00:00:35Vercelのソフトウェアエンジニアが語っている内容なのです。なぜファイルが解決策になるのかを探る前に、
00:00:41まずはこれらのモデルが実際にどのように機能しているのか、いくつか理解しておきましょう。モデルは
00:00:46膨大な量のコードで学習されてきました。だからこそ、モデルはコードや
00:00:50ディレクトリ構造、そして開発者がファイルを移動したり必要なものを探したりするのに使う、ネイティブなBashスクリプトを深く理解しているのです。
00:00:56エージェントがgrepやlsを使うとき、それは新しいことをしているわけではありません。すでに知っていることを
00:01:01より制御された方法で行っているだけなのです。このアプローチはコードに限定されません。エージェントは
00:01:06コードであれ何であれ、あらゆるディレクトリをナビゲートできます。なぜなら、彼らはすでに
00:01:11コマンドに慣れており、ファイルシステムを理解しているからです。エージェントが何かを必要とするときは、
00:01:17lsやfindといったネイティブなBashコマンドを使ってファイルシステム内を探し回ります。findを使って目的のファイルを特定すると、
00:01:23grepやcatによるパターンマッチングを使って、そのファイル内の関連するコンテンツを検索します。
00:01:27関連する情報の小さな断片だけがモデルに送信され、残りはメモリ外に留まるため、
00:01:32コンテキストウィンドウをクリーンに保てます。つまり、モデルが必要としない無関係なデータに
00:01:36トークンを浪費することがなくなるのです。このアプローチにより、エージェントは構造化された出力を返します。
00:01:41このパターンは非常にうまく機能したため、Vercelはこれに特化したBashツールをオープンソース化しました。
00:01:46これにより、エージェントは開発者と同じようにファイルシステムを探索できるようになります。
00:01:51大規模言語モデル(LLM)システムを構築する際、モデルに適切な情報を提供する方法は2つあります。
00:01:561つは詳細なシステムプロンプトを使用してエージェントがそれに従うことを期待する方法、
00:02:00もう1つは大量のデータをベクトルデータベースに投入し、セマンティック検索を使用して抽出する方法です。しかし、
00:02:06どちらのアプローチにも限界があります。システムプロンプトはトークンウィンドウに制限があり、一度に
00:02:10モデルに送信できる情報量が限られます。より大きなデータセットを扱うには、クエリに対する意味の近さで
00:02:15情報を探すセマンティック検索を使いますが、ベクトル検索は
00:02:20「正確な検索」ではなく「意味的な類似性」のために使われます。クエリの全体的な文脈に一致するデータの塊を返しますが、
00:02:25必ずしも探している特定の値を返すわけではありません。そのため、膨大な塊の中から正しい内容を抽出する作業をモデル自体に委ねることになります。
00:02:30一方、ファイルシステムは異なるアプローチを提供します。ファイルシステムでは、その構造が実際の
00:02:35ドメインに直接対応しています。フォルダ構造内のファイル間の関係が、
00:02:40親フォルダ間の関係を反映していることが多いのです。ファイルシステムを使えば、
00:02:45これらの関係をモデルが理解できるベクトルチャンクに平坦化(フラット化)する必要がありません。
00:02:49これにより、セマンティック検索で失われがちな「関係性」を維持できます。これらの階層的な
00:02:54繋がりは自然に保存され、データに元々備わっている組織的なロジックが維持されます。もう一つの
00:02:59利点は、リトリーバル(検索)が正確であることです。grepやBashツールは完全一致を返しますが、
00:03:05ベクトル検索はクエリに緩く一致するすべてのチャンクを返し、どれを使うかはモデルの判断に任せてしまいます。
00:03:10ファイルシステムなら、必要な値だけを取得できます。エージェントがBashツールを使う際、コンテキストは最小限で済みます。
00:03:15なぜなら、必要な特定のチャンクだけを受け取り、他の多くの不要なチャンクはメモリに入らないからです。
00:03:20これにより、エージェントは無関係なデータに惑わされることなく、正確な情報に集中し続けることができます。
00:03:25さて、このアイデアは決して聞き慣れないものではありません。この概念は、
00:03:30Claude CodeやすべてのCLIエージェントですでに採用されており、Bash関数を使ってパターンマッチングで検索範囲を絞り込んでいます。
00:03:36私たちも、評価するあらゆるアイデアの調査目的で、ファイルシステムと
00:03:41Claude Codeの機能をすでに活用しています。私たちは通常、見つけたソフトウェアツールを
00:03:46独自の評価基準を含む複数のフェーズで構成されたこのパイプラインに通します。調査はそれらの基準をクリアしなければなりません。
00:03:51これらすべては、テストするツールの要件や目的、最終ドキュメントの書き方、
00:03:56各フェーズに必要な全情報が記載されたMarkdownファイルに定義されています。また、
00:04:01スタイルの手本として特定のドキュメントをサンプルとしてClaudeに提供しており、
00:04:06最終的なドキュメントは「research results」フォルダに保存されます。調査をガイドするために、
00:04:11各フェーズを一つずつクリアする方法を説明したClaude.mdファイルを用意しており、
00:04:17最終的にすべてのチェックを満たす調査ドキュメントが得られるようになっています。
00:04:22何か調査したいことがあるときは、Claudeにそのアイデアやツールを伝えるだけです。すると、
00:04:27まずツールやアイデアを理解し、次に6段階の検証プロセスを一つずつ実行していきます。
00:04:32すべてのフェーズが完了すると、Claudeは最終報告書を生成します。
00:04:37私たちはそれを読んで、そのアイデアに可能性があるかどうかを判断できます。このファイルシステムのアプローチにより、
00:04:42本来なら手動で一歩ずつ進めなければならない調査プロセスを自動化でき、大幅な時間の節約になっています。
00:04:47もしこのパイプラインをご自身のユースケースで試してみたい場合は、
00:04:52最近立ち上げたコミュニティ「AI Labs Pro」で、私たちのものと同様の調査パイプラインを作成するための、
00:04:57すぐに使えるテンプレートを入手できます。これに限らず、これまでのすべての動画についても、
00:05:03プロジェクトに直接組み込めるテンプレート、プロンプト、コマンド、スキルが用意されています。
00:05:08私たちの活動に価値を感じてくださり、チャンネルを支援したい方は、これが最良の方法です。リンクは概要欄にあります。
00:05:12さて、このアーキテクチャを使って「販売概要エージェント」を構築する方法を説明した彼らのケーススタディを読んでいたとき、
00:05:17彼らはそれもオープンソース化していましたが、そこから自分でも試してみたい面白いアイデアが浮かびました。
00:05:22実は、社内規定プロジェクトを構築していたのですが、そこにはJSON、Markdown、TXT形式の
00:05:27大量の社内データがあり、それらは部署ごとに分かれていました。通常なら、
00:05:32Chromaのようなベクトルデータベースを使ってこのシステムを実装するところですが、このツールを試してみることにしました。
00:05:39そしてこのアーキテクチャを実装しました。バックエンドには、会社のデータが入っている
00:05:44ドキュメントフォルダへのパスを含め、エージェントにはls、cat、grep、findコマンドへのアクセス権を与えました。
00:05:49ツールの使い方や各コマンドをいつ使うべきかのガイドも添えました。モデルにはGemini 2.5 Flashを使用し、
00:05:55VercelのBashツールを組み込んで、ツール内でドキュメントへのパスを指定しました。
00:06:01そして、データに関する質問をしてエージェントをテストしたところ、ハンドブックや
00:06:06休暇規定のドキュメントなど、社内規定の正確な内容に基づいて回答してくれました。
00:06:11動作を確認するために、ターミナルでツールの使用ログを記録しました。
00:06:16エージェントはまずlsコマンドを使用して利用可能なドキュメントを確認し、
00:06:21次にgrepとパターンマッチングを使って「休暇」やそれに類する用語を探していました。
00:06:27これらの一連のコマンドによってクエリが処理され、RAGシステムと同等の精度で結果が得られました。
00:06:32このプロジェクトのソースコードが必要な場合は、私たちのコミュニティからダウンロードして試すことができます。
00:06:38さて、このツールを見て最初に頭に浮かんだ疑問は、
00:06:43「エージェントにサーバー上でコマンドを実行させるのは、本当に安全なのか?」ということでした。
00:06:47昨年の12月、React Server Componentsに最高値である10.0の脆弱性が見つかったばかりですが、
00:06:52それもサーバー上でのコード実行が関わっていました。ですから、これはエージェントに与えるには非常に強力で、
00:06:57潜在的に危険な能力です。では、なぜ私はこのツールを信頼したのでしょうか?それは、
00:07:03サンドボックス内で動作し、隔離されているからです。指定した特定のディレクトリにのみアクセスし、
00:07:08他には何も変更しません。記事の中では、エージェントは本番システムにアクセスせずにファイルを探索するため、
00:07:14たとえエージェントがサーバー上で有害なコマンドを実行しようとしても、本番コードは安全に保たれると言及されています。
00:07:19このツールは2種類の隔離環境を提供します。1つ目はインメモリ環境です。
00:07:24このセットアップでは、私たちがエージェントを作ったときのように、アクセス権を持つファイルに対してのみBashスクリプトを実行します。
00:07:292つ目は、Vercel Sandboxを使用した完全な仮想マシン隔離による、
00:07:35完全互換のサンドボックス環境です。ニーズに合わせてどちらかを選択できます。
00:07:40インメモリアプローチはシンプルで高速ですが、より強力なセキュリティ保証が必要な場合は
00:07:46完全なVM隔離の方が適しています。このアプローチはモデルの呼び出しごとのコスト削減に非常に有効ですが、
00:07:51すべての問題に対して正しいアプローチというわけではありません。Bashツールは正確な一致を目的としているため、
00:07:56言葉の意味の類似性を一致させる必要がある場合には理想的ではありません。エージェントを呼び出したときに見られたように、
00:08:01特定のキーワードを使って必要なデータを特定します。また、ファイル構造が整理されていない場合、
00:08:06エージェントが何度もツールを呼び出すことになり、適していません。エージェントが簡単にナビゲートできる構造の方がはるかに優れています。
00:08:11個人的な提案としては、データが高度に構造化されており、リクエストの内容(何を求めているか)が
00:08:17ほとんど明確な場合には、Bashツールを使用してください。ファイルに書かれている内容の「意味」を重視する場合や、
00:08:22クエリが曖昧になりそうな場合には、RAGを使用してください。最後に、スポンサーである
00:08:27Brilliantからのお知らせです。優れたエンジニアは単に構文を知っているだけでなく、第一原理から問題を分解します。
00:08:32だからこそ、私たちはBrilliantと提携しました。彼らの哲学は「実践することで最もよく学べる」というものです。
00:08:37能動的な問題解決を優先しているため、単に暗記するのではなく、概念に直接触れることができます。
00:08:42例えば「AIの仕組み」というコースでは、ただ読むだけでなく、実際のロジックを操作します。
00:08:47損失空間での損失計算や、補間の視覚化といった技術的な内容を実際に体験することで、
00:08:52動画講義だけでは得られない深い直感的な理解を築くことができます。インタラクティブな技術コースを通じて、
00:08:57私たちが話している概念を真に習得するための最も効果的な方法を提供します。
00:09:02また、年間プレミアムプランが20%オフになり、数学、データ、コンピュータサイエンスの全コースをアンロックして、
00:09:07スキルアップのための完全なロードマップを手に入れることができます。概要欄のリンクをクリックするか、
00:09:12画面上のQRコードをスキャンして、30日間の無料トライアルをお試しください。それでは、
00:09:17今回の動画は以上です。もしチャンネルをサポートし、このような動画作りを応援してくださるなら、
00:09:22下の「スーパーサンクス」ボタンからお願いいたします。いつものように、ご視聴ありがとうございました。それではまた次回の動画で。
00:09:28this video. If you'd like to support the channel and help us keep making videos like this, you can
00:09:32do so by using the super thanks button below. As always, thank you for watching and I'll see you in the next one.