OpenAI APIでPDF読み込みできるか試した話
はじめに
ChatGPTを使って手軽にファイルの読み込みができるようになりました!
操作は簡単で、添付マークをクリックしてファイルを選択するだけです。
でも追加の処理をしたいのでpythonのコードでAPIを使ってPDF読み取りしたいです。
OpenAI APIを使ってPDF読み込みできるのか、挑戦してみたいと思います!!
目次
- はじめに
- 目次
- 挑戦:企業の決算資料のPDF資料をOpenAI APIを使って読み込んでもらう
- 検証:gpt4-visionをOpenAI APIを使って読み取ってもらう
- 何とかならないか⇒何とかなった
- おわりに
挑戦:企業の決算資料のPDF資料をOpenAI APIを使って読み込んでもらう
今回はメルカリが公開している「決算説明会資料」のPDF資料を利用します。
https://pdf.irpocket.com/C4385/MH4b/aRze/Gjgz.pdf
たとえばスプレッドシートと連携して、ワンクリックでいろんな企業の決算資料の要約一覧が作れたら便利そうだと思っています。
検証:gpt4-visionをOpenAI APIを使って読み取ってもらう
先に結果をお伝えすると、PDFファイルの読み込みはできませんでした、残念です・・・。
原因は「gpt4-visionではjpeg、やpngの画像ファイルとtextの文字ファイルのみ読み込み可能」だったためです。
検証の過程を解説します。
OpenAI APIのVisionについての公式ドキュメントはこちらです。
https://platform.openai.com/docs/guides/vision
このドキュメントに記載されているコードを抜粋します。
from openai import OpenAI client = OpenAI() response = client.chat.completions.create( model="gpt-4-vision-preview", messages=[ { "role": "user", "content": [ {"type": "text", "text": "What’s in this image?"}, { "type": "image_url", "image_url": { "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg", }, }, ], } ], max_tokens=300, ) print(response.choices[0])
このコードで読み取ろうとしている画像はこちらです。
では、ドキュメントのコードに以下の変更を加えて実行してみましょう。
- google colabで使える
- 日本語で回答を出力
!pip install openai import os os.environ["OPENAI_API_KEY"] = "あなたのOPENAI_API_KEY" from openai import OpenAI client = OpenAI() response = client.chat.completions.create( model="gpt-4-vision-preview", messages=[ { "role": "user", "content": [ {"type": "text", "text": "この画像は何ですか?"}, # ここでタイプを「image_url」として画像読み込みしている { "type": "image_url", "image_url": { "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg", }, }, ], } ], max_tokens=300, ) print(response.choices[0].message.content)
実行結果 この画像は、緑豊かな草原または湿地を通る木製の歩道を示しています。青空が広がり、美しい自然風景です。歩道は観察や散策に使われることがありますし、湿地や自然保護地域など、地面が不安定または濡れている場所でよく見かける設備です。
画像の情景が正しく読み取れています!!
では、強引にcontentのタイプを「 "type": "pdf_url",」として、PDFファイルの読み込みができるか検証してみます。
from openai import OpenAI client = OpenAI() response = client.chat.completions.create( model="gpt-4-vision-preview", messages=[ { "role": "user", "content": [ {"type": "text", "text": "このPDFファイルには何が書かれていますか?"}, # ここでタイプを「image_url」として画像読み込みしている { "type": "pdf_url", "pdf_url": { "url": "https://pdf.irpocket.com/C4385/MH4b/aRze/Gjgz.pdf", }, }, ], } ], max_tokens=300, ) print(response.choices[0].message.content)
するとこのエラーが出ました。
BadRequestError: Error code: 400 - {'error': {'message': 'Invalid chat format. Content blocks are expected to be either text or image_url type.', 'type': 'invalid_request_error', 'param': None, 'code': None}}
どうやら、messageのcontentのタイプはtextとimage_url typeの2種類のみのようです。
というわけで、gpt4-visionをOpenAI API使ってPDFファイルを読み込むことはできませんでした。
何とかならないか⇒何とかなった
情報を探したところ、Assistants APIを使って読み取ってもらうという方法がありました! ※2023年11月現在、Assistants APIはbeta版です
OpenAI APIのAssistants APIについての公式ドキュメントはこちらです。 https://platform.openai.com/docs/api-reference/assistants/createAssistant
このAPIを活用するときの流れがすごくわかりやすいのはnpakaさんのnoteです!!
流石としか言いようがない・・・。
公式ドキュメント読んでも全然理解できなかったので、本当にありがとうございます!!
google claboで動くPythonコードも記載されています。
Google Colab で OpenAI API の Retrieval を試す|npaka
記載されているコードをマルっとコピーするわけにいかないので、何を変えたかだけ簡単に解説します。
先に、https://pdf.irpocket.com/C4385/MH4b/aRze/Gjgz.pdfをダウンロードして「メルカリ決算資料.pdf」というファイル名にしいて、googleドライブにマウントします。
- 読み込みファイル名を「メルカリ決算資料.pdfに変更する
- 役割(instructions)を「あなたはファイナンスコンサルタントです。この決算資料について回答してください」に変更する
- "role": "user"のcontentを「メルカリの決算について簡単に概要を教えてください。」に変更する
そのときの回答がこちらです。
user : メルカリの決算について簡単に概要を教えてください。 assistant : メルカリの2024年度第1四半期(FY2024.6 1Q)の決算概要は以下の通りです: - トップライン(売上高)の成長及び収益性を重視した経営が継続され、事業方針に基づく進捗が想定通りであることが示されています。特に、メルカードの発行枚数がローンチから約11か月で200万枚を突破し、ユーザ一人当たりの平均購入金額(ARPU)の向上や出品数の増加に寄与してグループシナジーの創出が進んでいます【7†source】。 - Marketplaceのセグメントにおいては、売上収益は前年比で12%増加し、月間アクティブユーザー(MAU)は2300万人に到達しました。Fintechセグメントでは、月間ユーザー数は1624万人で、債権残高は1314億円となりました【8†source】。 - 米国セグメントに関しては、GMV成長率は前年比で11%の減少を示しましたが、MAUは横ばいで推移しています【7†source】。 - 連結財務においては、売上収益は前年同期比11%増の398億円から442億円へと成長し、コア営業利益は同81%増の25億円から47億円へ改善しました【9†source】。 これらの結果は、メルカリがその戦略を実行しており、いくつかの主要指標において前向きな進捗が見られることを示しています。しかし、米国市場においてはGMVの減少が見られるなど、地域によるパフォーマンスの差も認識されています。
ちゃんと読み込めています!! どこまで細かい粒度で読み込んでいるかは今後検証してみます。
なお、assistants toolsに対応している拡張子はこちらです。
たくさんあります!!
https://platform.openai.com/docs/assistants/tools/supported-files
おわりに
正直、GPT plas(有料会員)になってチャット画面でファイル添付したほうが楽だし早いです。
ノーコードでできるので、プログラミングの知識もいりません。
しかし、会社の環境で「みんなが使える環境で外部情報を活用す」などの観点ではAPI活用したほうが汎用性は高いと思います。
とはいえ、GPTsなども出てきているしCode Interpreterもあるのでプログラミングを自分で書くという行為の価値がわからなくなって生きている昨今です。
と、ネガティブになっても仕方ないのでこれからもOpenAI APIはきちんと続けていきたいと思います!!