見出し画像

OpenAIのGPT-3.5-Turbo-16kを使ったPDFファイルに対して質問するウェブアプリの作り方

OpenAIのGPT-3.5-Turbo-16k-0613というモデルを使ってみました。GPT-3.5-Turboとの違いは、16kと書いてあり、1024*16トークンまで対応可能なOpenAIの言語モデルとなります。

普段は、API利用料が気になるので一番安いgpt-3.5-turboを利用していますが、GPT-3.5-Turbo-16k-0613は使用したことがなので使ってみます。

Chatのコードだと味気無いですので、今回は、pdfフォルダの配下に置いたPDFファイルの内容に対して、問い合わせを行うことが出来るウェブアプリを作ってみます。


完成図

随分シンプルです。

さて、今回利用したコードは以下となります。

requirements.txtとして、以下の内容のファイルを用意します。

streamlit
openai
PyPDF2

次に、app.pyとして、以下の内容のファイルを用意します。

import streamlit as st
from PyPDF2 import PdfReader
import os
import openai

# OpenAI APIキーの設定
openai.api_key = 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# Streamlitアプリケーション
def app():
    # ユーザーからの質問を入力
    question = st.text_input("あなたの質問を入力してください:")

    if question:
        # PDFファイルの読み込みとテキストの抽出
        pdf_folder = "pdf"
        text = ""
        for filename in os.listdir(pdf_folder):
            if filename.endswith(".pdf"):
                pdf_file = os.path.join(pdf_folder, filename)
                with open(pdf_file, 'rb') as f:
                    reader = PdfReader(f)
                    for page in reader.pages:
                        text += page.extract_text()

        # OpenAIでの質問
        response = openai.ChatCompletion.create(
          model="gpt-3.5-turbo-16k-0613",
          messages=[
                {"role": "system", "content": "You are a helpful assistant."},
                {"role": "user", "content": text},
                {"role": "user", "content": question}
            ]
        )

        # 結果の表示
        st.write(response['choices'][0]['message']['content'])

if __name__ == "__main__":
    app()

sk-xxxxxxxには、OpenAIで取得したAPIキーを記載します。
次に、pdf_folder="pdf"のところには、PDFファイルを配置するフォルダ名を記載します。今回は、pdfフォルダとなります。


次に、app.py、requirements.txt、pdfフォルダを同じ階層に配置します。pdfファイルは、pdfフォルダの配下に置きます。


階層イメージ

次に、以下を自PCで実行します。

python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
streamlit run app.py


実行しますと、下記の画面が出てきます。


初期画面


今回のスクリプトでは、pdfフォルダの配置したpdfファイルを読み込んで、それをgpt-3.5-turbo-16k-0613モデルにAPI経由で渡して、質問しています。

16kのため、pdfファイルに記載の文字数が多すぎるとエラーになります。

この記事が気に入ったらサポートをしてみませんか?