FessでS3/GCSの対応

次にリリースされるFess 15.4で、Amazon S3とGoogle Cloud Storage(GCS)のファイルクロールに対応する予定です。

これまでFessでは、file、smb、ftp、storageなどのプロトコルでファイルをクロールできましたが、クラウドストレージに対応してほしいという要望があったので、S3とGCSのサポートを追加しました。

設定としては、crawler.file.protocolss3gcsが追加されるので、ファイルシステムクロールの設定でs3://bucket/pathgcs://bucket/pathといったURLを指定することで、クラウドストレージ上のファイルをクロールできるようになります。

クロール処理の内部では、これらのURLをファイルパスとして認識して、適切に処理するようにProtocolHelperに対応を追加しています。詳細はPR #2982を参照してください。

Fess 15.4がリリースされたら、ぜひ試してみてください。

Gemini APIのファイル検索を試す

File Search Tool in Gemini APIというので、新たなものかと思ったけど、これは、Gemini APIでファイル検索をツールで使いますよ、という話っぽい。なので、RAGを簡単にできるのでよろしく的な感じだと思われる。

とはいえ、使ってみないとよくわからないので、gemini-file-search-exampleを作って試してみた。ファイルをアップロードして、ファイル検索ストアを作るコマンドを用意して、あとはファイル検索ストアをGemini APIのコンテンツ生成する際に渡すだけでRAGの応答ができるという感じである。

RAGをサクッと作りたい場合の選択肢としては、良さそうな感じではあるけど、ファイル検索ストアでインデックス作るのに加えて、Gemini APIの使用料はそれはそれでかかりそうな気がする。flashとかのモデルであれば、たいした金額にはならないかもしれないけど。

Intasteを作り始める

RAGというか、検索をAIで効率化みたいな話を言われるケースが増えてきている。その流れで、Fessで検索して、AIで何かできないの?みたいなことも言われたりと。

多くの場合、RAGを使って〜、みたいな方向になったりもするけど、エンタープライズサーチ的なところで、RAGでベクトル検索でやろうとすると、一大プロジェクトとして進めるくらいの気持ちがないと実現は難しいような気もする。ベクトル検索でやろうとすると、考えることも多いし、何といってもお金がかかる…。

なので、AIを使うにしても、既存のエンタープライズサーチ的なものを活用しつつ、実現する必要がある。AI Assisted Search的なものであれば、既存のものにアドオン的に実現できるのでは?と思い、Intelligent Assitive Search Technologyとして、IntasteというプロダクトをOSSで考え始めました。

IntasteはAIが検索作業を肩代わりしてくれるような感じで、検索のフローとしては、

  1. 自然言語で検索文を入力
  2. 生成AIで検索文から検索クエリーを生成
  3. 検索クエリーをFessで検索
  4. 取得した検索結果を検索文と一致度を生成AIが評価
  5. 一致している検索結果をピックアップして、生成AIが一致した検索結果の説明を作成
  6. 検索結果と説明文を返す

といった感じの流れで、検索結果を返します。一致する検索結果が見つからなければ、検索クエリーを再検討して、再度検索します。なので、人間が最適な検索結果を見つけるまでのフローをIntasteが内部的にやってくれるみたいな感じです。

現状は、Fessだけにしか、検索を投げていませんが、Fessに依存しているわけではないので、そこの部分はSearchAgentとして、Intaste内では定義されているので、並列で複数の検索システムに検索して、取りまとめることもできるはずです。

現状の課題としては、生成AIにOllama(gpt-oss)を利用していますが、GPUがないと時間がかかるので、検索時間を以下に短縮するかとかもあったりします。現時点では、検索結果を得るまでに1分くらいかかるので、この辺の効率化はやっていきたいところ。

あとは、このプロジェクトのコード自体は、ほぼほぼClaude Codeで生成しています。API部分はFastAPIで、UI部分はNextJSで作っていますが、できる限り自分で書かずに、プロンプトの指示だけでどこまで作れるか的なチャレンジもしてます。そんな感じで、思った以上のClaude Codeで作れるもんだなーという感じです。

そんな感じで、Intasteを作っていこうと思いますので、興味があれば、お試しください。