1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Elasticsearch] Playgroundを利用してノーコードでRAGを試す

Last updated at Posted at 2024-08-18

はじめに

以前に以下の記事にてElasticsearchでRAGを構成するための手順を説明しました。
https://qiita.com/takeo-furukubo/items/e5d43fa734e4338b895f
この方法はPythonの知識を必要とするため、プログラミングに馴染みのない方にはあまりお役に立たなかったかもしれません。
Elasticは8.14というバージョンにてPlaygroundという機能をリリースしました。この機能を使えばプログラミングの知識なしにノーコードでRAGを試すことができます。

2024/08/19現在の最新バージョンである8.15.0ではまだPlayground機能はTech Previewです

2024/08/19現在、PlaygroundはEnterpriseライセンスが必要です

Playground

PlaygroundというのはKibana上で簡単にRAG(Rerieval Augmented Generation)を試せる機能です。
ドキュメントはこちらです。
https://www.elastic.co/guide/en/kibana/current/playground.html
スクリーンショット 2024-08-18 14.58.32.png
以前の記事でも書きましたが、RAGの成否は検索(=Retrieval)にかかっています。PlaygroundではRAGの応答の元になったドキュメントも簡単に確認ができます。
この機能で本番運用できるわけではないですが、まずは社内のドキュメントでRAGがどのような応答になるのか、といった検証には十分利用できます。

準備

Elastic Cloud

以前の記事の「手順」の部分が全く同じなので、こちらの手順を参考にして「Elstic Cloudの作成」「機械学習ノードの作成」「形態素解析のためのExtension追加」を行ってください。
https://qiita.com/takeo-furukubo/items/e5d43fa734e4338b895f#%E6%89%8B%E9%A0%86

設定ファイル

こちらをgit cloneしてください。
https://github.com/legacyworld/playground

E5モデルの展開

以前の記事では東北大学のモデルを使用しましたが、今回はノーコードでやりたいのでKibanaのメニューから展開できるE5を使用します。

メニューからAnalytics -> Machine Learning -> Trained Modelsと選択して、下記の画面で右上の”Add trained model”をクリックします。
スクリーンショット 2024-08-18 15.45.25.png

下記の画面にて一番下にあるE5 (EmbEddings from bidirEctional Encoder rEpresentations)の”Intel and Linux optimized”を選び、Downloadをクリック。
スクリーンショット 2024-08-18 15.46.45.png

すると以下のように”Downloading”が表示されます。
スクリーンショット 2024-08-18 15.47.27.png

ダウンロードが終わると”Ready to deploy”と表示されるので、そのあたりにマウスをホバーさせると右側に▷が表示されるので、それをクリックします。
スクリーンショット 2024-08-18 15.48.18.png

ウィンドウが立ち上がるのでそのまま”Start”をクリックします
スクリーンショット 2024-08-18 15.48.53.png

暫く待つと”Deployed”と表示されます
スクリーンショット 2024-08-18 15.49.22.png

ドキュメントアップロード

以前の記事ではPythonプログラムでアップロードしていますが、今回はノーコードを条件にしているのでKibanaの機能を使います。
ドキュメントは相変わらずNewsAPIです。
https://newsapi.org/
用意しているドキュメント(seminar.ndjson)はNewsAPIで「東京大学」を検索したものです。
このドキュメントではなく新しくNewsAPIで取得する場合には、NewsAPIではJSONで出力されるのでjq -c '.[]' hoge.json > hoge.ndjsonなどでNDJSONに変換をしておきます。

Kibanaからアップロード

メニューからAnalytics -> Machine Learning -> Data Visualizer -> Fileと選択すると下記の画面が表示されます。
スクリーンショット 2024-08-18 15.28.42.png
ここでseminar.ndjsonをアップロードします。(自分でNDJSONをNewsAPIから作った場合はそちらをアップロードします)

以下のように処理がされるのでImportをクリック
スクリーンショット 2024-08-18 15.30.59.png

下記の画面で“Advanced”をクリックして、index nameに名前をいれる(ここではseminarと入れている)

ここではまだ”Import”をクリックしない

スクリーンショット 2024-08-18 15.32.02.png

Importを押してインデックスを作ってしまった方は、気にせずに同じ手順で別の名前のインデックスを作ってください

インデックス設定

左端の"Index Settings"にある文字をすべて消して、index.txtの内容を全てコピ&ペーストします。
形態素解析を行う基本的な設定が行われています。

Mapping設定

真ん中の"Mappings"にある文字をすべて消して、mapping.txtの内容を全てコピ&ペーストします。

Inget Pipeline設定

右端の"Ingest Pipeline"にある文字をすべて消して、ingestpipeline.txtの内容を全てコピ&ペーストします。
ここではテキストデータの投入と同時にベクトル化をE5モデルで行っています。

全て変更し終わったら"Import"をクリックします。
スクリーンショット 2024-08-19 8.17.43.png

問題がなければ以下のような画面になります。”View Index in Discover”をクリックするとDiscoverでデータを見ることができます。
スクリーンショット 2024-08-18 15.53.01.png

Playgroundの設定

では本題のPlaygroundを使っていきます。まずは以下の2点の設定が必要です。

  • LLM
  • インデックスと検索するフィールド

Search -> Playgroundとクリックすると以下の画面になります。まずはLLMの設定を行います。
スクリーンショット 2024-08-18 16.16.35.png
すでに設定されている方はスキップしてください。

LLM

下記の画面のようにAWS Bedrock, Google Gemini, OpenAIが使用できます。APIキーなどは各LLMにてご準備ください。
スクリーンショット 2024-08-19 8.11.12.png

インデックス

LLMの設定に問題なければ以下のように自動的に”LLM Connected”となるので、”Add data sources”をクリックします。ここで設定するのはどのデータを使ってRAGを行うかを選択しています。
スクリーンショット 2024-08-19 8.19.28.png

先ほど入力したインデックス名を選択(ここでは”seminar”)。Available Indicesの下に表示されているので、それをクリックして、最後に"Save and Continue"をクリックします。
スクリーンショット 2024-08-19 8.20.51.png

画面右下に“Context fields”という部分があります。ここにある”description”を選択します。これは検索して取ってきたドキュメントのどのフィールドをコンテキストとしてLLMに渡すか、という設定です。この設定については”Save”などをクリックしなくても適用されていますので、このまま次のステップに進みます。
スクリーンショット 2024-08-19 8.22.53.png

クエリ

ページ上部にある”Query”を選択します。ここでクエリ文(どのように検索するか)を決めます。
スクリーンショット 2024-08-19 8.23.58.png

デフォルトでは”text_embedding”のみ選ばれています。これはベクトル検索のみ行う設定です。”description”をEnableするとキーワード検索部分が追加されてハイブリッド検索(RRF: Reciprocal Rank Fusion)となっています。
スクリーンショット 2024-08-19 8.25.23.png

ページ上部にある”Chat”をクリックしてチャットを行う画面に戻り、ページ下部にある”Ask a quesion”に”東京大学の授業料について教えて”と入力します
スクリーンショット 2024-08-19 8.26.13.png

例えばAWS Bedrock Claude3 Haikuだとこのように要約されています。”3 document sources”をクリックするとこの要約を作成した根拠の文書が示されます。選択したLLMによってこの要約部分は結構変わります。
スクリーンショット 2024-08-19 8.27.10.png

スクリーンショット 2024-08-19 8.28.38.png

アプリケーションコード

右上の"View Code"をクリックすると、これと同じことを行うソースコードが表示されます。現状ではOpenAIのみです。
スクリーンショット 2024-08-19 8.33.06.png

まとめ

いかがでしたでしょうか。非常に簡単にRAGを試せることを実感いただけかと思います。
似たようなサービスはあるとは思いますが、クエリ文を変更してRRFまで自動的に設定できるものはほとんど無いと思います。
またインデックスと同時にベクトル化も行えるため、ベクトル化のためのプログラムも必要ありません。
更に形態素解析の設定を簡単なので、高度な日本語処理も行えます。

是非Playgroundを利用してRAGに取り組んでみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?