LlamaIndex
概要
これ何?
ChatGPT のプロンプトの中に別のデータソースから得た情報を埋め込んでいくためのライブラリ
何を解決してくれるか?
LLMの回答に、自社データなどを読み込ませて、その結果をプロンプトに押し込める
それゆえ、LLMから、特殊なより正確なよりカスタマイズされた回答を得られる
皆さん、膨大な社内文書について「ChatGPTに質問できたらいいのに……」と思ったことはありませんか?
月間20万ダウンロードを超えるPythonのライブラリ・Llamaindexを使えば、ChatGPTに社内のローカルナレッジや最新情報
を学習&回答させられるんです!
API経由でLLMに最新情報や事実が示せたり、専門知識や社外秘について回答できるチャットボットを開発できる。
入力プロンプトにコンテキストを埋め込むというアプローチで、外部情報をChatGPT等の大規模言語モデル(LLM)に接続することによって、Q&Aを実現するフレームワーク。
入力プロンプトにコンテキストを与えるとは?
この図がとてもわかりやすい!
https://scrapbox.io/files/657af77ee656370026e53fb2.png
1.「質問文」を受け取る。
2.「質問文」を OpenAI の Embeddings API でベクター化。
3. 「質問文」のベクターでローカルファイルへベクター検索して、類似性が高い文章をいくつか取得。
4. 「質問文」と「類似性が高い文書」を一緒にプロンプトにまとめて OpenAI API で gpt-3.5-turbo に質問
5. 「質問文」と「1回目の回答」と「類似性が高い文書その2」を一緒にプロンプトにまとめて OpenAI API で gpt-3.5-turbo に質問(Chat Completion API 実行)(Refine処理)。
⇒ 類似性の高い文書があるだけ Refine 処理を繰り返す。
6. 最終回答を表示。
ベクターストアとは?
各データをベクトルで表現していて、その方向性が近い、つまり似ているもの同士を近くに集めている
つまり、このストアにクエリを渡すと、類似度検索を行って関連性の高いデータだけを瞬時に返してくれる。
ということはつまり?
LLMとの連携時に活きてくる。
最新情報や事実のうち関連性の高いものだけをベクターストアから取り出して、トークンの消費が少ないベクトル形式のままプロンプトに埋め込める。
ベクターストアの構築はどうやっているか?
https://scrapbox.io/files/657afc79ed2245002c5bfd08.png
1. 元ネタの文書のテキストファイルをローカルフォルダに入れておく。そのフォルダからdocumentオブジェクトを取得する。(Web上のURLでもよい)
2. OpenAI の Embeddings API で元ネタ文書をベクター化し Index 作成。
3. ローカルの専用ファイルとしてベクターを保存する。
LlamaIndexを使った開発の流れ
学習元データ or データソースの準備
自社のシステム・サービス・文書など、プロンプトに埋め込みたいデータを用意する。
PDF、テキスト、doc、CSV、Twitter、Slackの情報など
学習元データの整形
ベクターストアであれば、ほとんど手間要らず
文字コードをUTF-8にして、全角半角などの表記ゆれを解消するなど
ベクターストアの構築
数行のPythonコードを実行するだけでベクターストアの構築が完了する。
格納先についてはLlamaindex純正のベクターストアのほか、外部のベクトルデータベースも選択可能。
LLMとの連携・検証
LlamaindexとLLMを、API連携させる
ChatGPTの場合、Embedding APIとcompletion APIの2つが必要になる
LlamaIndexを使う時のチューニング課題
すごく詳しく載っており、必見
事例
自社サービスのQ&Aツール