PDFに質問しよう8 ~ 動作確認とトラブルシューティング | SkillhubAI(スキルハブエーアイ)

PDFに質問しよう8 ~ 動作確認とトラブルシューティング

動作確認とトラブルシューティング

実際に動かしてみよう!

  1. コードをapp.pyとして保存
  2. ターミナルで実行:streamlit run app.py
  3. サイドバーでAPIキーを入力
  4. PDFをアップロード
  5. 「処理を開始」ボタンをクリック
  6. 処理が完了したら「Ask My PDF(s)」ページへ移動
  7. 検索キーワードを入力して検索!

よくあるトラブルと解決方法

「APIキーが無効です」というエラー

これはよくあるエラーです。以下を確認してください: - APIキーが正しくコピーされているか(前後に空白が入っていないか) - OpenAIのダッシュボードでAPIキーが有効になっているか - クレジットが残っているか(無料枠を使い切っていないか)

「PDFが読み込めません」というエラー

PDFには2種類あります: - テキストPDF:文字データが含まれている(こちらが必要) - 画像PDF:スキャンした画像だけ(これは読めません)

テキストが選択できるPDFか確認してください。スキャンPDFの場合は、OCRツールで先に文字認識する必要があります。

処理が遅い

大きなPDFだと処理に時間がかかります。最初は10ページ程度の小さなPDFで試してみてください。また、インターネット接続が遅いと、APIとの通信に時間がかかります。

コストについて(重要!)

OpenAI APIの料金(2025年9月時点): - Embedding: 1000トークンあたり約$0.00002(ほぼ無料) - 10ページのPDFで約1円程度

つまり、実験レベルならほとんどお金はかかりません。ただし、何百ものPDFを処理する場合は注意してください。

ベクトルDBに保存されたデータの確認

データが本当に保存されているか確認したいですよね。以下の方法で確認できます:

Pythonで確認する方法

# 別のPythonファイルで実行
from qdrant_client import QdrantClient

client = QdrantClient(path="./local_qdrant")

# コレクション情報を取得
info = client.get_collection("my_pdfs")
print(f"保存されたチャンク数: {info.points_count}")

# 実際に検索してみる
from openai import OpenAI
client_openai = OpenAI(api_key="your-api-key")

# 検索クエリ
query = "売上"

# クエリをEmbeddingに変換
response = client_openai.embeddings.create(
    model="text-embedding-3-small",
    input=[query]
)
query_embedding = response.data[0].embedding

# 検索実行
results = client.search(
    collection_name="my_pdfs",
    query_vector=query_embedding,
    limit=3
)

# 結果表示
for result in results:
    print(f"スコア: {result.score}")
    print(f"テキスト: {result.payload['text'][:200]}...")
    print("---")

ファイルシステムで確認

Qdrantはローカルにフォルダを作ってデータを保存します:

ls -la ./local_qdrant/
# collections/
# └── my_pdfs/
#     ├── ... (いろんなファイル)

このフォルダがあれば、データが保存されている証拠です!

まとめ

非常に長い章になってしまいました。本当にお疲れ様でした!でも、ここまで来たあなたはすごいです。以下のことができるようになりました:

今回学んだこと

Streamlitでマルチページアプリを作る方法 複数ページの切り替えができるアプリが作れるようになりました。これで複雑なアプリも作れます!

PDFからテキストを抽出する方法 PyPDF2を使って、PDFの中身を取り出せるようになりました。これは色んな場面で役立ちます。

長いテキストを適切に分割する方法 tiktokenを使った正確なトークン計算で、最適なチャンク分割ができるようになりました。

OpenAI Embeddings APIの使い方 文章を数値(ベクトル)に変換する方法を学びました。これがAIアプリの基礎です。

Qdrantベクトルデータベースの基本 Embeddingを保存して検索できるデータベースの使い方を習得しました。

次回予告

次の章「PDFに質問しよう(後編)」では、いよいよ本格的な質問応答システムを作ります!

作る機能: - ChatGPT APIを使った回答生成 - 関連文書を使ったプロンプト作成 - ストリーミング応答(リアルタイムで回答が表示される!) - 会話履歴の管理 - より高度な検索機能

楽しみにしていてください!PDFに「この資料の要点を3つ教えて」とか「売上が最も高かった月は?」みたいな質問ができるようになります。

さらに学びたい人へ

チャレンジ問題: 1. 複数のPDFを同時にアップロードできるように改造してみよう 2. チャンクサイズを変更できるUIを追加してみよう 3. アップロード履歴を表示する機能を追加してみよう

参考リソース: - OpenAI公式ドキュメント - Streamlit公式ドキュメント - Qdrant公式ドキュメント


最後まで読んでくれてありがとうございます!プログラミングは「習うより慣れろ」です。エラーが出ても諦めずに、一つずつ解決していけば必ずできるようになります。

わからないことがあれば、エラーメッセージをそのままChatGPTに聞いてみるのも良い方法です。「このエラーが出たんだけど、どう直せばいい?」って聞けば、優しく教えてくれますよ。

次の章でお会いしましょう!頑張ってください!🚀