世界を動かす技術を、日本語で。

AIドキュメンテーションアシスタントのためにRAGを仮想ファイルシステムに置き換えました

2026年4月3日原文(mintlify.com)

概要

  • RAGの限界と、複数ページにまたがる情報検索の課題
  • 仮想ファイルシステム「ChromaFs」による高速・低コストな解決策
  • just-bashとChromaDBを活用したUNIXコマンドの仮想化
  • 柔軟なアクセス制御(RBAC)とキャッシュによる効率化
  • 実運用での大規模なコスト削減と即時性の実現

RAGの課題と仮想ファイルシステムへの転換

  • RAG はクエリに一致するテキスト断片しか取得できず、 複数ページにまたがる回答正確な構文検索 に弱点
  • ユーザーがコードベースを探索するように、 エージェントがドキュメントを横断的に探索 する必要性
  • grep, cat, ls, find などのUNIXコマンドを使い、ファイルシステム的にドキュメントを扱う発想
  • 各ドキュメントページを「ファイル」、各セクションを「ディレクトリ」として仮想化
  • 実際のファイルシステムを使う従来方式では、 サンドボックス起動の遅延(約46秒)高額なインフラコスト が発生

ChromaFs:仮想ファイルシステムの設計

  • ChromaDB に既にインデックス・分割保存されたドキュメントを活用し、 ChromaFs を構築
  • UNIXコマンドを仮想ファイルシステムにリダイレクトし、 DBクエリとして変換実行
  • セッション生成時間が約100ミリ秒 に短縮、 マージナルコストはゼロ
  • 既存インフラを再利用するため、 追加コストや新規インフラ不要

just-bashとChromaFsの連携

  • just-bash(Vercel Labs製) はTypeScript実装のbashで、 IFileSystemインターフェース を提供
  • ChromaFsはこのインターフェースを実装し、 ls, cat, grep, find, cd 等をChromaDBクエリに変換
  • パイプやフラグ処理はjust-bash側で担当 し、ファイル操作部分のみChromaFsが担当

ディレクトリツリーの構築とキャッシュ

  • 全ファイルツリーをgzipped JSON(path_tree)としてChromaコレクションに格納
  • 初期化時にサーバーがこのツリーを展開し、 Set<string>とMap<string, string[]> でインメモリ管理
  • ls, cd, findはローカルメモリで即時解決、ネットワークコール不要
  • 同一サイトのセッションでは キャッシュ利用で更に高速化

アクセス制御(RBAC)の実装

  • isPublic, groups フィールドでファイルごとにアクセス制御を設定
  • ユーザーのセッショントークン に基づき、ファイルツリー構築時に 閲覧可能ファイルのみ抽出
  • Linuxユーザーグループやchmod管理不要、 数行のフィルタリング処理で完結

ページの再構成とキャッシュ

  • catコマンド実行時、対象ページの全チャンクを chunk_index順に結合 して完全なページを再現
  • キャッシュにより繰り返しアクセス時のDB負荷を削減
  • 巨大なOpenAPI仕様書などはlazy pointer登録、実際にアクセスされるまで取得しない設計
  • 書き込み操作は常にEROFS(Read-Only File System)エラー、システムの完全なステートレス化

grep高速化とネットワーク効率

  • grep -r 等の再帰検索は、ChromaDBでまず粗いフィルタをかけ、 該当チャンクをRedisキャッシュへ一括取得
  • マッチファイルのみjust-bash側で詳細フィルタ、 大規模検索もミリ秒単位で完了

実運用と成果

  • ChromaFsは1日3万件超の会話・数十万ユーザーのドキュメントアシスタントを支える基盤
  • サンドボックス不要・即時起動・ゼロコスト・柔軟なRBAC を実現
  • Mintlifyドキュメントサイトやmintlify.com/docsで体験可能

Hackerたちの意見

ファイルシステムベースの検索で人々が再発見している本当のことは、埋め込みベースの検索ではないセマンティック検索の一種があるってことだと思う。図書館の司書がドメインに基づいてファイルを棚に整理するような感じだね。私たちは、何十年も前から知っていた検索の形を再発見しているんだ。そして、それらはエージェントにとっても解釈しやすいことがわかった。

知識労働をしている何百万もの人々は司書じゃないし、みんな適当にやってるってことがわかった。

誰かがどこかでRAGはベクター検索に基づいているに違いないと単純に思い込んで、みんなそれに従ったんだ。

これはオントロジカルNLPに戻る話で、知識表現を言語処理のためのプリミティブとして使っていたんだ。そっち方面には本当にたくさんの研究があるよ。

逆インデックスは、ブール演算子をサポートする大きな利点があるね。

LLMがリアルタイムで大規模にこういう分類をできるのはすごいと思う。単なる「検索」以上のツールをLLMに与えると、実際にズルしてる感じになるね。

PageIndex [1]と似たような取り組みで、基本的に目次のようなツリーを作るんだ。そしたら、LLMがそのツリーをたどって、プロンプトの文脈に関連するチャンクを見つける。1: https://github.com/VectifyAI/PageIndex

俺の直感だけど、AIアシスタントってLLMによって自動的に完成される物語の中のキャラクターだから、人間の言語とのインタラクションとして解釈できるメカニズムが、脳の働きについての推測や抽象概念に近いメカニズムよりも意外なアドバンテージを持ってる気がするんだよね。

次はタグベースのファイルシステムについて話そう。

同意。400以上のPythonファイルがあるコードベースで作業してるけど、その違いは明らかだよ。埋め込みベースのRAGだと、単語が一致する無関係なコードスニペットを引っ張ってきちゃってた。エージェントにディレクトリツリーをブラウズさせて、必要なファイルをその都度読ませるようにしたら、モジュール構造を約30秒で理解して、正しいファイルをパスで要求し始めた。ディレクトリ階層はすでに人間がキュレーションしたナレッジグラフみたいなもんだから、ベクトル数学に夢中になってそれを忘れちゃってたんだよね。

これは間違いなく正しい方法だね。実際のサンドボックスには良いユースケースがある(エージェントが任意のコードを実行するなら、エアギャップ環境でやるべきだよ)。でも、UnixのIOプリミティブを使うためにVMを立ち上げるのはやりすぎだと思う。エージェントがUnixライクなツールコールを出して、プロダクションスタックがIOを処理するのに使う方がずっと理にかなってる。

100%同意。ただ、リソースのトレードオフがなければ、FUSEマウントが一番良いと思う。

Hacker Newsで議論の続きを見る