RAGを使った検索体験。その裏側ではどんな技術が動いているのか
続いて、杉本氏はElasticsearchの検索結果とRAGの差分を実際に示すべく、デモを行った。今回は、Elasticの日本語ブログをElasticsearchのWebクローラーに読み込ませたものを使用。フロントエンドのWebアプリはPythonで記述し、裏でLLM(OpenAI)に投げている。
これが「ベンチマークツールについて教えて」と聞いたときの、Elasticsearchの通常の検索結果だ。
同様の質問をRAGに投げかけるとどうなるのか。上位3つの検索結果の全文を掛け合わせて要約したものが、サマリーとして表示されているのがわかる。
「裏では、泥臭いことをいっぱいしている」と言いながら、杉本氏はベクトル検索と全文検索を組み合わせたPythonのコードを見せた。ChatGPTのモデルを使うとプロンプトが長くなり過ぎてしまうので、2500字で切るような工夫もしている。
なかでも注目したいのが、タイトルの横にある「+」と「-」のボタンだ。これはリアルタイムなデータの重み付けをするためのものである。データの鮮度や重要性などによって、重視したいものは「+」を押して順位を上げることで任意の値が付与され、検索結果の順位が変わると同時に、サマリーの内容も変わるのだ。
「LLMのモデルの中で何かをしなくても、『このデータを使って回答して』とリアルタイムで指示できるのが一番有用なポイントだ」(杉本氏)
ちなみに最新バージョンに近いElasticsearchにはWebクローラーも搭載されている。サイトの一部をインデックスに含める/除外するといったクローリングのルールを自由に設定できるほか、各種API経由でフレキシブルにクローラーを管理することも可能だ。
また、「ElasticsearchのIngest Pipelinesという機能を使えば、外のAPIに投げることなく、Elasticsearch内でテキストエンベディング(=ベクトル化)することもできる」とし、わずか数クリックでデプロイする様子も見せてくれた。
「Elasticは検索エンジンだけでは終わっていない。生成AIの他にも、さまざまな先進的な取り組みを進めている。RAGや生成AIは銀の弾丸ではなく、あくまでもひとつのツール。これからも試行錯誤は必要だし、Elasticが寄与できることがたくさんあると知ってもらえれば」と語り、また14日間のフリートライアルもあるのでぜひElasticsearchを体験頂きたい、とセッションを終えた。