このプロジェクトは、ユーザーがPDFドキュメントをアップロードし、コンテンツからベクトル埋め込みを生成し、テキストクエリを使用してドキュメント内の情報を検索できるようにする簡単なWebアプリケーションを提供します。 OpenAIの埋め込みおよび言語モデルは、ベクトルの埋め込みと情報の取得を作成するために使用されます。
PDFドキュメントの摂取:ユーザーは、情報検索のためにWebインターフェイスを介してPDFドキュメントをアップロードできます。
ベクトル埋め込みの生成:テキストコンテンツはPDFから抽出され、Langchainを使用して小さなチャンクに分割されます。埋め込みは、OpenAIのテキスト埋め込みモデル(テキスト埋め込み-ADA-002など)を使用して、各チャンクに対して生成されます。
ベクトルデータベースストレージ:類似性検索のために、生成されたベクトル埋め込みをPineconeのようなベクトルデータベースに保存します。
ユーザークエリの洗練:ユーザークエリは、OpenAIのチャット完了APIを使用して洗練され、検索の正確性が向上します。
情報の検索:ユーザーはテキストクエリを入力して、アップロードされたドキュメント内の情報を検索できます。システムは、クエリの埋め込みとのベクトルの類似性に基づいて、関連するテキストチャンクを取得します。
応答を生成する:取得したテキストチャンク、コンテキスト(以前のクエリおよび応答)、およびユーザーのクエリに基づいて、OpenAIモデル(GPT-4O、GPT-4、またはGPT-3.5-ターボ)を使用して応答が生成されます。ユーザーは、Webインターフェイスを介してOpenAIモデルを選択できます。モデルの選択は、応答スタイル、詳細、および精度に影響を与える可能性があります。
requastion.txtファイルには、必要なPythonパッケージと、アプリケーションの実行に必要なバージョンがリストされています。各パッケージの内訳は次のとおりです。
Flask :Webアプリケーションを構築するための軽量のPython Webフレームワーク。
Pinecone-Client :アプリケーションで使用されるベクトルデータベースであるPineconeと対話するための公式のPythonクライアントライブラリ。
Openai :Openai APIの公式Pythonクライアントライブラリは、テキストの埋め込みを生成し、Openaiの言語モデルと対話するために使用されます。
PYPDF2 :PDFファイルからテキストを抽出するための純粋なパイソンライブラリ。
Langchain :テキストの分割とチャンクのためにアプリケーションで使用される、大規模な言語モデルを使用してアプリケーションを構築するためのフレームワーク。
Numpy :多次元アレイとベクトルの操作に使用されるPythonの科学コンピューティングのパッケージ。
これらの依存関係をインストールするには、新しいPython仮想環境を作成して、次のコマンドを実行できます。
PIPインストール-R要件。txt
OpenAIおよびPineconeと統合するには、これらのプラットフォームのそれぞれのAPIキー、ホスト(Pinecone)情報を取得および構成する必要があります。 OpenaiおよびPinecone APIキーを設定し、Linuxの環境変数としてPineconeホストを設定します。次のLinuxコマンドを使用して、これらの変数をエクスポートします。
openai_api_key = 'your-openai-key'
Pinecone_api_keyをエクスポートする
Pinecone_host = 'Your-Pinecone-host'をエクスポート
有効なAPIキーを備えたOpenAIアカウントを持っていることを確認してください。 Openaiプラットフォーム(https://platform.openai.com/)からAPIキーを作成または取得して、それらを管理できます(https://platform.openai.com/organization/api-keys)。さらに、この例では有料のOpenAIアカウントが必要であるため、アカウントに十分な使用クォータがあることを確認してください。
Pinecone環境(Pinecone Freeアカウント使用https://www.pinecone.io/):1)松ぼっくりインデックスが使用される2)寸法:1536 3)ホストタイプ:サーバーレス。
Centos Linuxリリース8.5.2111はLinux OSとして使用されます。パブリックIP(オプション)を備えたクラウドLinux VMがWebインターフェイスについてテストされています。ローカルIPも使用できます。プロジェクト依存関係を分離するために、Python仮想環境(オプションが推奨)を作成します。
このアプリケーションは、Python WebフレームワークであるFlaskで構築されたWebインターフェイスを提供します。ユーザーは、PDFドキュメントをアップロードし、クエリを入力し、使用するOpenAI言語モデル(GPT-3.5-Turbo、GPT-4、またはGPT-4O)を選択し、アップロードされたPDFドキュメントから抽出された情報に基づいて詳細な応答を受信できます。
PDFドキュメントの摂取とベクトル埋め込みの作成
アプリケーションは、ユーザーがPDFドキュメントをアップロードできるWebインターフェイスを提供します。 PDFファイルをアップロードすると、テキストコンテンツがドキュメントから抽出され、LangChainライブラリのrecursiveCharacterTextSplitterを使用して小さなチャンクに分割されます。この分割プロセスにより、コンテキストを維持しながら、テキストが管理可能なチャンクに分割されることが保証されます。
次に、OpenaiのText-dembedding-aad-002モデルを使用して、各テキストチャンクに対してベクトル埋め込みが生成されます。これらの埋め込みは、テキストの意味的な意味をキャプチャする高次元ベクトルであり、効率的な類似性検索を可能にします。
松ぼっくりにベクトル埋め込みを保存します
生成されたベクトル埋め込みは、対応するテキストのチャンクとページ番号とともに、松ぼっくりベクトルデータベースに保存されます。 Pineconeは、高次元ベクトルの保存とクエリ用に設計されたスケーラブルで効率的なベクターデータベースです。
クエリ処理
ユーザーがWebインターフェイスを介してクエリを送信すると、アプリケーションは次の手順で処理します。
クエリの洗練:
ユーザーのクエリは、OpenAIの言語モデル(GPT-3.5-ターボ、GPT-4、またはGPT-4Oなど)に送信され、クエリを改良および改善して検索精度を向上させます。
クエリの生成を埋め込みます
洗練されたクエリは、OpenaiのText-dembedding-Ada-002モデルを使用してベクター埋め込みに変換されます。
類似性検索:
クエリの埋め込みは、ベクトルの類似性に基づいて、最も意味的に類似したテキストチャンクのPinecone Vectorデータベースを検索するために使用されます。
注:Pinecone Indexを照会して最上位の結果を取得するには、次のコードが使用されます(app.py)
#ADJUSTと、ユースケースに基づいてTOP_K値を実験してください
結果= pinecone_index.query(vector = padded_query_vector.tolist()、top_k = 1、include_metadata = true)
TOP_Kパラメーターは、クエリから返すための上位の結果の数を指定します。 TOP_K値を調整すると、クエリ応答の品質に影響を与える可能性があります。より高いTOP_K値は、より包括的な結果を提供する可能性がありますが、関連性の低いデータを導入することもできます。逆に、TOP_K値が低いと、より正確になりますが、結果が少ない場合があります。さまざまなTOP_K値を試して、特定のユースケースの最適なバランスを見つけることが重要です。さらに、特に結果を処理するために有料のOpenAIモデルを使用する場合、TOP_K値を増やすこともコストに影響を与えることに注意してください。 TOP_K値が高いと、モデルによって送信および処理されるデータが増え、使用料が増加する可能性があります。
注:SCORE_THRESHOLDパラメーターは、クエリ応答の品質に影響を与える可能性のある結果を考慮するために必要な最小関連スコアを決定します。したがって、ユースケースと実験(app.py)に基づいてしきい値を調整します。
#ユースケースに基づいてしきい値を調整します
SCORE_THRESHOLD = 0.65
応答生成:
データベースから取得された関連するテキストチャンクは、以前のコンテキスト(もしあれば)と元のユーザークエリと組み合わされます。この情報は、Openaiの言語モデル(クエリの洗練に使用されるのと同じモデル)に送信され、包括的なコンテキストに関連する応答を生成します。
コンテキスト認識応答:
アプリケーションは、以前のクエリと応答のコンテキストを維持します。このコンテキストは、応答生成ステップ中にOpenAIの言語モデルに渡され、生成された応答が会話履歴を考慮し、正確で文脈的に関連する情報を提供することを保証します。
アプリケーションを実行するには、次の手順に従ってください。
Python仮想環境をアクティブにする(オプション):( venv)[user@host project_directory]#
app.pyスクリプトを実行:python app.py
アプリケーションはポート5000で実行を開始し、次のような同様の出力が表示される場合があります。
アプリケーションがポート5000で着信接続を積極的に聞いていることを確認してください。
netstat -outpn | Grep -I 5000 TCP 0 0 0.0.0:5000 0.0.0.0:* 525661/Pythonを聞く
http://127.0.0.1:5000/(ローカルアクセス用)
http:// vm public ip:5000/(インターネット上のリモートアクセス用)
注:パブリックIPを介してアプリケーションにアクセスする予定の場合は、VMのファイアウォールを介してポート5000の入ってくるトラフィックを許可してください。これにより、パブリックIPを介した通信が許可され、Webインターフェイスにリモートでアクセスできます。
また、アップロードされたPDFファイルを含むLinuxマシンのフォルダーに、同じ名前のPDFファイルが含まれていないことを確認してください。ファイルが既に存在する場合、上書きされます。
PDFファイルを選択し、[アップロード]ボタンを使用してアップロードします。
「プロセスファイル」をクリックします(この段階では、ベクトル埋め込みが作成され、Pineconeデータベースに保存されます)。
検索クエリを入力します。ドロップダウンメニューからOpenAI言語モデルを選択します。
クエリ応答を確認してください。後続のクエリを送信します。
完了したら、「エンドセッション」をクリックします(データベース内のアップロードされたファイルとベクトル埋め込みの削除をトリガーします)
Linux Macineで、Ctrl+Cを押してアプリケーションを閉じます(app.py)。