🦙

LlamaIndexを触ってみた

2023/07/26に公開

はじめに

先日クラスメソッドさん主催のDevelopersIO 2023に参加してきました!
どれも聞き応えのあるセッションで大変勉強になりました。
その中でLlamaIndexというライブラリを利用して、ChatGPTに独自データを付与するセッションがあり、ChatGPTのAPI初心者である自分でもできそうだったのと、面白そうだなと思ったのでやってみました!

LlamaIndexとは

LlamaIndexは、大規模言語モデル(LLM) と外部データを接続するためのインターフェースを提供します。LlamaIndex を使うと、自分の持っているデータをLLMに組み込んで、質問があった際はこのデータを参照しつつ返答を返すことができます。
https://gpt-index.readthedocs.io/en/latest/index.html

パッケージのインストール

Pythonで以下のパッケージをインストールします。
今回はPDFから独自データを読み取るためpypdfもインストールします。

pip install llama-index
pip install openai
pip install pypdf

読み込むデータの準備

LlamaIndexに読み込ませるPDFを準備します。
今回は以下のような休暇申請マニュアルのPDFを作成しました。
※ちなみに以下のPDFはChatGPTに作成してもらいました✨

OpenAIのAPIキーをセット

OpenAIのサイトからAPIキーを発行し、以下のようにセットします。
本来であれば環境変数等にセットすべきですが、ひとまず今回はハードコードします。

import openai

openai.api_key = "{OpenAIのAPIキー}"

PDFファイルの読み込みとインデックスの作成

LlamaIndexには、指定したディレクトリ以下のファイルをデータとして読み込むクラス SimpleDirectoryReaderが用意されていますので、以下のようにしてデータの読み込みとインデックスを作成します。
※PDFファイルは「input」というフォルダ配下に配置しています。

from llama_index import GPTVectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("input").load_data()
index = GPTVectorStoreIndex.from_documents(documents)

クエリエンジンの作成

作成したインデックスからクエリエンジンを作成し、作成したクエリエンジンの引数に質問内容を渡します。

query_engine = index.as_query_engine()

question = "休暇申請の種類を教えてください"

response = query_engine.query(question)
print(response)

全体のコード

全体のコードは以下になります。

from llama_index import GPTVectorStoreIndex, SimpleDirectoryReader
import openai

openai.api_key = "{OpenAIのAPIキー}"

# PDFファイルの読み込み
documents = SimpleDirectoryReader("input").load_data()

# インデックスの作成
index = GPTVectorStoreIndex.from_documents(documents)

# クエリエンジンの作成
query_engine = index.as_query_engine()

question = "休暇申請の種類を教えてください"

response = query_engine.query(question)
print(response)

実行結果

実行した結果は以下になりました。
PDFファイルにある休暇申請の種類が回答として返ってきていますね😊

当社では、以下のような主な休暇の種類があります。
・有給休暇
・有給病気休暇
・特別休暇
・その他の休暇(慶弔休暇など)

ちなみにChatGPTで同じ質問を投げると、以下のような回答が返ってきます。

まとめ

簡単に独自データを付与したQAボットが作成できました。
社内にあるFAQを読み込ませれば、簡単に社内FAQ用のQAボットが作成できそうですね✨
今回はPDFを読み込みましたが、wordや画像からも読み込む事ができるようなので、今後も色々試してみたいと思います!

コラボスタイル Developers

Discussion