RAGのTutorialやってみた part1(初期設定)
RAG
RAGとはRetrieval Augmented Generationの略称で検索拡張生成という意味です。
ここでは単純なQ&Aアプリケーションをテキストデータソースを使用して作ります。作りながら、よくあるQ&A機能とその他の追加機能を学習していきます。
概要
RAGは「インデックス貼り」と「検索と生成」の二つからなります。
- インデックス貼り:外部の情報源からデータを収集し、そのデータを効率的に検索できる形式に変換するプロセス
- データの取り込み(Ingesting Data):最初に、データソース(例えば、ドキュメント、ウェブページ、データベースなど)から必要な情報を取り込む処理です。取り込むデータは、テキストファイルやJSON、CSV形式など、さまざまな形態を取ることができます。
- データの前処理(Preprocessing):取り込んだデータを適切に処理します。例えば、テキストデータであれば、ノイズの除去(不要な文字や記号の削除)、正規化(単語の統一)、トークン化(テキストを意味のある単位に分割)などの作業が行われます。
- インデックス作成(Indexing):データを効率的に検索できるようにインデックスを作成します。インデックスとは、データの検索を高速化するためのデータ構造です。例えば、ElasticsearchやFAISS(Facebook AI Similarity Search)といったツールを使って、取り込んだデータの内容をベクトル化し、検索可能な形式に変換します。これにより、後でユーザーからのクエリに対して関連する情報を素早く検索することが可能になります。
- 検索と生成:ユーザーのクエリを受け取って関係しているデータを先ほどインデックスを貼ったデータ群から取得し、クエリと関連データをchatGPTなどのモデルに渡します。
データからQ&Aまでの流れ
-
インデックス貼り
- ロード:最初にドキュメントデータをロードします(DocumentLoaderというものを使用します)
- 分割:膨大な文章を細かいセンテンスに分割します。(Text splitterというものを使用します)これは文章データにインデックスを貼ったりモデルに文書を渡す際に有用です。
- 保存:インデックスを貼ったデータを保存します。これによって後でいつでも検索することができます。(VectorStoreとEmbeddingというものを使用します)
-
検索と生成
4. 検索:ユーザーからの入力が与えられて、関連するセンテンス(分割されたもの)を先ほど保存した場所から取り出します(Retrieverをここで使用します)
5. 生成:ChatGPTなどのLLMモデルがユーザー入力と検索されたセンテンスをもとに回答を生成します
一度「インデックス貼り」が終われば、LangGraphという検索と生成のプロセスを管理し、効率よく実行するためのツールを使用して検索と生成という一連の処理を効率よく行います
環境構築
今回私はcondaを使用しました。
$ conda create -n rag_tutorial
でrag用の環境を作ります。
次に作成した環境に入るために
$ conda activate rag_tutorial
と打てば
(rag_study)$
とコマンドライン上にrag_studyと表示されます。
チュートリアルではjupyterが推奨されていたので、vscode上でrag_tutorial.ipynbファイルを作成し、vscodeのターミナルで$ conda activate rag_study
を実行します。(vscode上でターミナルを開くには上のターミナルと書いてあるところおすか、Ctrl+Shift+^でターミナルを開けます)
先ほど作成したrag_tutorial.ipynbをvscode上で開き、右上のスマホみたいなアイコンを押すと
インタープリターを選択するように迫られるので、Python環境->rag_tutorialを選択します。すると、カーネルをインストールするか聞かれるのでインストールします。これでセットアップは終了です。
API設定
RAGではチャットモデルとユーザーの入力やドキュメントデータを数字に変換するためのモデルが必要とされます。今回はopenaiが提供しているapiでこれらのモデルを使用します。api使用には課金をする必要があるので、そのやり方をここで説明します。
最初にこのページに行ってください
次に課金の設定をするために、左上の設定アイコンをクリックして、左のナビゲーションバーのBillingという項目をクリックしてください。
すると以下のような画面が表示されるかと思います。
緑色のadd creditでクレジットカードの登録をします。この際、自動的にチャージしていいか?(Would you like to do automatic recharge見たいのが表示される)と聞かれますがこれはNoにしてください。
$10だけチャージしてください。
最後に、請求額が知らぬまま増加するのを防ぐためにLimitsの項目をクリックしてください。すると以下のような画面が表示されると思います。
このページのUsage limitsという所で、警告金額と請求限度額を設定しSaveボタンを押します。今回は20$と40$に設定しました。(10$しかチャージしておらず、自動課金もoffにしているので問題はないと思いますが念のため)
これで初期設定は終わりです。
次回は実際にコードを書いてRAGを使用していきます、オヒオヒ
Discussion