Googleドライブにアップロードするだけで使えるQAアプリを作成してみた
こんにちは、福田です。
今回は、Googleドライブにアップロードするだけで使えるQAアプリを作成してみました。
はじめに
この記事では、OpenAIとGradioを使用して質問応答システムを開発する方法について説明します。このシステムは、Google Driveからデータを読み込み、それを基に質問に回答します。
全体コード
import os
import openai
from dotenv import load_dotenv
import gradio as gr
from llama_index import download_loader, VectorStoreIndex, QuestionAnswerPrompt
# 環境変数の設定をロード
load_dotenv()
folder_id = os.getenv("FOLDER_ID")
opeanai_api_key = os.getenv("OPENAI_API_KEY")
# Google Driveからのデータ読み込みのための設定
GoogleDriveReader = download_loader("GoogleDriveReader")
loader = GoogleDriveReader()
# QAテンプレートの設定
QA_PROMPT_TMPL = (
"以下の情報を参照してください。 \n"
"---------------------\n"
"{context_str}"
"\n---------------------\n"
"この情報を使って、次の質問に回答してください。: {query_str}\n"
)
# データをロード
documents = loader.load_data(folder_id=folder_id)
index = VectorStoreIndex.from_documents(documents)
QA_PROMPT = QuestionAnswerPrompt(QA_PROMPT_TMPL)
query_engine = index.as_query_engine(text_qa_template=QA_PROMPT)
def answer_question(question, button_click):
global query_engine
if button_click:
documents = loader.load_data(folder_id=folder_id)
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(text_qa_template=QA_PROMPT)
return "フォルダのデータがアップデートされました。チェックを外して質問してみてください."
response = query_engine.query(question)
return response
interface = gr.Interface(
fn=answer_question,
inputs=[
"text",
gr.inputs.Checkbox(label="✅をしてSubmitすることで、フォルダのデータを更新します。(新しくファイルを追加した際は、1度だけチェックボックスにチェックを入れてください)")
],
outputs="text"
)
interface.launch(share=True)
前準備(google driveへの認証まわり)
ここの部分が一番複雑ですが、以下の説明に従えば問題ありません。
今回無理やりGoogle Colabで作成しようとしましたが、諦めました。
ローカル環境で行います。
https://llamahub.ai/l/google_drive
システムの概要
このシステムはPythonで開発されており、主に以下のライブラリを使用しています:os, openai, dotenv, gradio, llama_index。
システムのアーキテクチャは以下の通りです:
環境変数の設定
Google Driveからのデータ読み込み
QAテンプレートの設定
データのロードとインデックス作成
質問応答関数の作成
Gradioインターフェースの設定と起動
コードの詳細
環境変数の設定
まず、必要な環境変数を設定します。これには、Google DriveのフォルダIDとOpenAI APIキーが含まれます。
load_dotenv()
folder_id = os.getenv("FOLDER_ID")
opeanai_api_key = os.getenv("OPENAI_API_KEY")
Google Driveからのデータ読み込み設定
次に、Google Driveからデータを読み込むための設定を行います。
GoogleDriveReader = download_loader("GoogleDriveReader")
loader = GoogleDriveReader()
QAテンプレートの設定
QAテンプレートを設定します。これは、質問応答プロンプトで使用されます。
QA_PROMPT_TMPL = (
"以下の情報を参照してください。 \n"
"---------------------\n"
"{context_str}"
"\n---------------------\n"
"この情報を使って、次の質問に回答してください。: {query_str}\n"
)
データのロードとインデックス作成
Google Driveからデータをロードし、それを基にインデックスを作成します。
documents = loader.load_data(folder_id=folder_id)
index = VectorStoreIndex.from_documents(documents)
QA_PROMPT = QuestionAnswerPrompt(QA_PROMPT_TMPL)
query_engine = index.as_query_engine(text_qa_template=QA_PROMPT)
質問応答関数の作成
質問応答関数を作成します。この関数は、ユーザーからの質問に対して回答を生成します。
def answer_question(question, button_click):
global query_engine
if button_click:
documents = loader.load_data(folder_id=folder_id)
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(text_qa_template=QA_PROMPT)
return "フォルダのデータがアップデートされました。チェックを外して質問してみてください."
response = query_engine.query(question)
return response
Gradioインターフェースの設定と起動
最後に、Gradioインターフェースを設定し、起動します。
interface = gr.Interface(
fn=answer_question,
inputs=[
"text",
gr.inputs.Checkbox(label="✅をしてSubmitすることで、フォルダのデータを更新します。(新しくファイルを追加した際は、1度だけチェックボックスにチェックを入れてください)")
],
outputs="text"
)
interface.launch(share=True)
システムの使用方法
システムは非常に使いやすくなっています。まず、システムを起動します。次に、質問欄に質問を入力します。必要に応じて、データを更新するためのチェックボックスを使用します。
結論
この記事では、OpenAIとGradioを使用して質問応答システムを開発する方法について説明しました。このシステムは、Google Driveからデータを読み込み、それを基に質問に回答します。今後の改善点としては、データの更新プロセスを自動化することや、より高度な質問応答モデルの採用などが考えられます。