文書から即座に回答が得られることを望まない人はいないでしょうか?それはまさに RAG チャットボットが行うことです。検索と AI 生成を組み合わせて、迅速かつ正確な応答を実現します。
このガイドでは、検索拡張生成 (RAG) と LangChain および Streamlit を使用してチャットボットを作成する方法を説明します。このチャットボットはナレッジ ベースから関連情報を取得し、言語モデルを使用して応答を生成します。
OpenAI、Gemini、または Fireworks のいずれを使用するかに関係なく、応答生成のための複数のオプションを提供しながら、各ステップを順を追って説明します。コスト効率の高いソリューションです。
RAG は、取得 と 生成 を組み合わせて、より正確でコンテキストを認識したチャットボット応答を提供する方法です。取得プロセスではナレッジ ベースから関連ドキュメントを取得し、生成プロセスでは言語モデルを使用して、取得したコンテンツに基づいて一貫した応答を作成します。これにより、言語モデル自体がその情報に基づいて特別にトレーニングされていない場合でも、チャットボットは最新のデータを使用して質問に回答できるようになります。
質問に対する答えを常に知っているわけではないパーソナル アシスタントがいると想像してください。ですから、あなたが質問すると、彼らは本を読んで関連する情報を見つけ出し(検索)、その情報を要約して自分の言葉で教えてくれます(生成)。これは基本的に RAG の仕組みであり、両方の長所を組み合わせたものです。
フローチャートでは、RAG プロセスは次のようになります。
それでは、独自のチャットボットを取得してみましょう!
このチュートリアルでは主に Python を使用します。JS の知識がある場合は、説明に従って langchain js のドキュメントを読むことができます。
まず、プロジェクト環境をセットアップする必要があります。これには、プロジェクト ディレクトリの作成、依存関係のインストール、さまざまな言語モデルの API キーの設定が含まれます。
まず、プロジェクト フォルダーと仮想環境を作成します。
mkdir rag-chatbot cd rag-chatbot python -m venv venv source venv/bin/activate
次に、requirements.txt ファイルを作成して、必要な依存関係をすべてリストします。
langchain==0.0.329 streamlit==1.27.2 faiss-cpu==1.7.4 python-dotenv==1.0.0 tiktoken==0.5.1 openai==0.27.10 gemini==0.3.1 fireworks==0.4.0 sentence_transformers==2.2.2
次に、これらの依存関係をインストールします。
pip install -r requirements.txt
チャットボットの応答生成には、OpenAI、Gemini、または Fireworks を使用します。好みに応じてこれらのいずれかを選択できます。
実験中であっても心配する必要はありません。Fireworks は 1 ドル相当の API キーを無料で提供しており、gemini-1.5-フラッシュ モデルもある程度は無料です。
優先モデルの API キーを保存する .env ファイルを設定します。
mkdir rag-chatbot cd rag-chatbot python -m venv venv source venv/bin/activate
これらのサービスにサインアップして API キーを取得してください。 Gemini と Fireworks は両方とも無料枠を提供していますが、OpenAI は使用量に応じて課金されます。
チャットボットにコンテキストを与えるには、ドキュメントを処理し、管理可能なチャンクに分割する必要があります。大きなテキストは埋め込みとインデックス作成のために分割する必要があるため、これは重要です。
ドキュメント処理を処理するために document_processor.py という新しい Python スクリプトを作成します。
langchain==0.0.329 streamlit==1.27.2 faiss-cpu==1.7.4 python-dotenv==1.0.0 tiktoken==0.5.1 openai==0.27.10 gemini==0.3.1 fireworks==0.4.0 sentence_transformers==2.2.2
このスクリプトはテキスト ファイルをロードし、チャンク間でコンテキストが失われないように、小さな重複を含む約 1000 文字の小さなチャンクに分割します。処理が完了すると、ドキュメントを埋め込んでインデックスを作成する準備が整います。
ドキュメントがチャンク化されたので、次のステップは、ドキュメントを 埋め込み (テキストの数値表現) に変換し、高速に取得できるようにインデックスを付けることです。 (機械は言葉より数字を理解しやすいため)
embedding_indexer.py という名前の別のスクリプトを作成します:
pip install -r requirements.txt
このスクリプトでは、Hugging Face モデル (all-MiniLM-L6-v2) を使用して埋め込みが作成されます。次に、これらの埋め込みを FAISS ベクターストアに保存します。これにより、クエリに基づいて同様のテキスト チャンクを迅速に取得できます。
ここからがエキサイティングな部分です。検索と言語生成を組み合わせるのです。次に、ベクターストアから関連するチャンクを取得し、言語モデルを使用して応答を生成する RAG チェーン を作成します。 (vectorstore は、数値に変換されたデータをベクトルとして保存したデータベースです)
ファイル rag_chain.py を作成しましょう:
# Uncomment your API key # OPENAI_API_KEY=your_openai_api_key_here # GEMINI_API_KEY=your_gemini_api_key_here # FIREWORKS_API_KEY=your_fireworks_api_key_here
ここでは、指定した API キーに基づいて、OpenAI、Gemini、または Fireworks のいずれかを選択します。 RAG チェーンは、最も関連性の高い上位 3 つのドキュメントを取得し、言語モデルを使用して応答を生成します。
予算や使用方法の好みに応じてモデルを切り替えることができます。Gemini と Fireworks は無料ですが、OpenAI は使用量に応じて課金されます。
次に、RAG チェーンを使用してユーザー入力を受け取り、応答を生成するシンプルなチャットボット インターフェイスを構築します。
chatbot.py という名前の新しいファイルを作成します:
mkdir rag-chatbot cd rag-chatbot python -m venv venv source venv/bin/activate
このスクリプトは、ユーザー入力を継続的にリッスンし、RAG チェーンを通じて処理して、生成された応答を返すコマンドライン チャットボット インターフェイスを作成します。
Streamlit を使用して Web インターフェイスを構築し、チャットボットをさらに使いやすくしましょう。これにより、ユーザーはブラウザを通じてチャットボットと対話できるようになります。
app.py を作成します:
langchain==0.0.329 streamlit==1.27.2 faiss-cpu==1.7.4 python-dotenv==1.0.0 tiktoken==0.5.1 openai==0.27.10 gemini==0.3.1 fireworks==0.4.0 sentence_transformers==2.2.2
Streamlit アプリを実行するには、以下を使用します:
pip install -r requirements.txt
これにより、テキスト ファイルをアップロードし、質問し、チャットボットから回答を受け取ることができる Web インターフェイスが起動します。
パフォーマンスを向上させるために、テキストを分割するときにチャンク サイズとオーバーラップを試してみることができます。チャンクが大きいほど、より多くのコンテキストが提供されますが、チャンクが小さいほど、検索が高速になる可能性があります。 Streamlit キャッシュを使用して、埋め込みの生成などの高価な操作の繰り返しを避けることもできます。
コストを最適化したい場合は、クエリの複雑さに応じて OpenAI、Gemini、または Fireworks を切り替えることができます。OpenAI を使用し、コストを削減するための簡単な質問には Gemini または Fireworks を使用します。
以上が独自の AI RAG チャットボットを作成する: LangChain を使用した Python ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。