Redisで実現するAIエージェント向け超高速インメモリファイルシステムの設計
CodexやClaude CodeのようなAIエージェントは、bashコマンドの実行が極めて得意です。ファイルシステム内の検索、grepによる絞り込み、シェル経由でのコンテキスト収集まで、驚くほどこなれます。
そこで試したくなるのが、「AIエージェントが扱うファイルシステム全体を、ディスクではなくRedis上に置いたらどうなるのか?」という発想です。エージェントから見れば通常のファイルシステムを使っているように見えるのに、実際には超高速なインメモリストアで動いている——そんな仕組みです。
以下は、私が思い描いた動作イメージです👇

エージェントがgrepコマンドを実行する際(この種のコマンドはどのエージェントも本当に得意です)、Vercelのjust-bashライブラリでそれを横取りし、Redis Searchのクエリへと変換します。
こうすることで、読み取り専用アクセスのためのサンドボックスが不要になり、(理論上は)はるかに高速になるはずです。実際、Mintlifyもすでに似た取り組みを行っていました。
基本となるアイデア
この仕組みが実現可能かどうか検証するため、ロジックを3つの要素に分割しました。
- 各ファイルはRedisのJSONドキュメントとして保存。パス、内容、サイズ、タイムスタンプなどを1つのキーにまとめて格納します。
- マニフェストでディレクトリツリーを管理。フォルダ構造全体を1つのRedisキーに保持することで、
lsやtreeがスキャンなしで済みます。 - grepにはRedis Searchを使用。これにより、
grepは一致箇所を見つけるために全ファイルを読み込む必要がなくなります。
以上です!わずかな要素だけで、通常の(読み取り専用)ファイルシステムとほぼ同等の機能を、はるかに高い速度で実現できます。今回は書き込み処理の実装は見送りました。
最大の課題:grep処理
catやlsのようなコマンドは比較的単純です。単一ファイルを丸ごと読むか、ディレクトリ構造を一覧表示するかのどちらかで、いずれもRedisなら簡単に実装できます。sed -n '1,240p'のようなコマンドは少し複雑ですが、ソート済みセット(Sorted Sets)を使えば十分対応可能です。
一方、grepは話が別です。通常のgrep -R "oauth" /workspaceは、その配下のすべてのファイルを読み込む必要があります。仮想ファイルシステムでは、単語が含まれているか確認するためだけに、Redisからすべてのドキュメントを引き出すことになります。これは非常に遅く、コストもかかります。
しかし最近、Upstash Redis Searchをリリースしました。Rust製の、Redisデータを極めて高速かつ効率的に検索できる機能です。Redis Searchを使えば、grepの実行前に横取りしてクエリに変換し、ファイルを取得せずに高速な結果を得られます。
検索クエリは次のような形になります:
import { Redis } from "@upstash/redis";
const redis = new Redis.fromEnv();
const index = redis.search.index({ name: "vfs" });
const matches = await index.query({
filter: {
$must: [
{ workspaceId: "demo" },
{ kind: "file" },
{ content: { $phrase: "oauth" } },
],
},
select: { path: true },
});
エージェントには、通常のシェルとまったく同じ出力が見えます。
エージェントにシェルを与える
最後のピースは、これをjust-bashに接続し、エージェントがコマンドを実行できるようにすることです。Mintlifyがアシスタントのファイルシステムを構築した方法にヒントを得て、RedisバックエンドのfsアダプタをMountableFsの/workspaceにマウントします:
import { InMemoryFs, MountableFs } from "just-bash";
const mountableFs = new MountableFs({ base: new InMemoryFs() });
mountableFs.mount("/workspace", redisFs); // redisFs talks to Upstash
const bash = new Bash({ fs: mountableFs, cwd: "/workspace" });
エージェントがcat /workspace/src/index.tsを実行すると、そのreadFile呼び出しが直接Redisへ流れます。grepは横取りされ、Redis Searchへ振り分けられます。
エージェントから見れば、それはただのシェルです。ls、cat、grep、find、すべてが動作します。これをVercel AI SDKのbashツールとして組み込めば、完全にRedis上に存在するコードベースを探索できるエージェントのできあがりです。
アイデアのきっかけ
まずひとつは、前述のMintlifyの素晴らしい記事です。もうひとつは、多くのエージェントサンドボックスが重いという点です。コンテナを起動し、ディスクをマウントすると、エージェントが1つのファイルに触れるのか1000個のファイルに触れるのかに関わらず、そのコストを払うことになります。
Redisによる仮想ファイルシステムは常時稼働し、グローバルにレプリケートされ、耐久性があり、そして最もコストのかかる操作(ファイル横断的な検索)こそ、Redis Searchが最も得意とするところです。
それではまた🙌
Josh
-
「インピーダンスミスマッチテスト」:データプラットフォームはシンプルか、それとも複雑か?
「シンプルさこそが究極の洗練である」 — レオナルド・ダ・ヴィンチ 「ほとんどの情報は無関係であり、ほとんどの努力は無駄である。しかし、専門家だけが何を無視すべきかを知っている」 — ジェームズ・クリア著『アトミック・ハビット』 多様なシステムで構成された派手なデータパイプラインをお持ちかもしれません。表面上は洗練されて見えますが、内部は複雑な迷路になっていることが少なくありません。異なるコンポーネントを接続するために大量の配管作業(プラミング)が必要になったり、常時監視が不可欠になったり、独自の専門知識を持つ大規模なチームが運用・デバッグ・管理に追われたりします。さらに、システムが増えれば
-
Mastra と Upstash で構築する AI 論文リサーチアシスタント完全ガイド
AI リサーチエージェントの概要 学術研究の世界は動きが速く、arXiv をはじめとするプレプリントサーバーには毎日新しい論文が投稿されています。すべてを目視で追いかけるのは現実的ではありません。そこで本記事では、次のようなことができる AI リサーチアシスタント の構築方法を解説します。 研究者が自然言語で入力した質問を理解する arXiv のアブストラクトを格納したベクトルデータベースから最も関連性の高い論文を検索する 重要な知見を要約し、それが質問にどう答えているのかを説明する さらに詳しく読むための PDF への直接リンクを提示する 実現には、AI エージェント構築用のオープンソー