この包括的なチュートリアルでは、Meta AIの最先端のLlama 3言語モデルを使用して、強力な検索補完生成(RAG)アプリケーションを構築する方法について探求します。 Llama 3とRAGの技術を活用することで、ユーザーは対話的な会話をWebページと行い、関連情報を取得し、ユーザーのクエリに対して正確な応答を生成するアプリを作成できます。 このチュートリアルでは、開発環境のセットアップ、Webページデータの読み込みと処理、埋め込みとベクトルストアの作成、およびRAGチェーンの実装のステップバイステップのプロセスについて詳しく説明します。
記事の要約
- Streamlitアプリのセットアップと必要なライブラリのインストール
- WebBaseLoaderとRecursiveCharacterTextSplitterを使用してWebページデータを読み込み、処理する
- OllamaEmbeddingsとChromaを使用してOllamaの埋め込みとベクトルストアを作成
- RAGチェーンを実装し、関連情報を取得し、応答を生成する
Llama 3とは何ですか?
Llama 3は、Meta AIによって開発された先進的な言語モデルであり、人間のようなテキストの理解と生成に優れています。
- 自然言語処理の驚異的な能力により、Llama 3は複雑なクエリを理解し、正確な応答を提供し、文脈に関連する会話を行うことができます。
- 幅広いトピックに対応できる能力と処理の効率性により、知識ベースを構築するのに理想的な選択肢です。
- Llama 3のパワーをテストしてみたいですか? 今すぐAnakin AIとチャットしてみましょう!(利用可能なほとんどのAIモデルをサポート!)
![](https://assets.anakin.ai/www/favicon-og-v3.png)
RAGとは何ですか?
Retrieval Augmented Generation(RAG)は、情報検索と言語生成を組み合わせて、質問応答システムの性能を向上させる技術です。
- 単純に言えば、RAGはAIモデルが知識ベースや文書から関連情報を取得し、その情報を使用してユーザーの質問により正確で文脈に適した応答を生成することを可能にします。
- 検索と生成の力を活用することで、RAGはユーザーに高度に関連性の高い情報を提供できるインテリジェントチャットボットや質問応答アプリケーションの作成を可能にします。
- コーディングの経験がないユーザーがRAGシステムを実行したい場合は、Anakin AIを試すことができます。ノーコードビルダーで素晴らしいAIアプリを作成できます!
![AI Powered Automation with Anakin AI](https://assets.anakin.ai/blog/2024/04/anakin-2-2.webp)
上記の情報をすべて把握したら、始めましょう!
ローカルLlama 3 RAGアプリを実行するための前提条件
始める前に、次の前提条件がインストールされていることを確認してください:
- Python 3.7以上
- Streamlit
- ollama
- langchain
- langchain_community
次のコマンドを実行して必要なライブラリをインストールできます:
pip install streamlit ollama langchain langchain_community
Llama-3を使用してローカルに独自のRAGアプリを実行するためのステップバイステップのガイド
ステップ1:Streamlitアプリのセットアップ
まず、Streamlitアプリの基本的な構造をセットアップしましょう。新しいPythonファイルapp.py
を作成し、次のコードを追加します:
import streamlit as st
import ollama
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import OllamaEmbeddings
st.title("Webページとのチャット 🌐")
st.caption("このアプリでは、ローカルのLlama-3とRAGを使用してWebページとチャットすることができます")
# ユーザーからWebページのURLを取得
webpage_url = st.text_input("WebページのURLを入力してください", type="default")
このコードは、Streamlitアプリの基本的な構造を設定します。タイトル、キャプション、ユーザーがWebページのURLを入力するための入力フィールドが含まれています。
ステップ2:Webページデータの読み込みと処理
次に、指定されたWebページからデータを読み込み、それを後の使用のために処理する必要があります。以下のコードをapp.py
に追加してください:
if webpage_url:
# 1. データの読み込み
loader = WebBaseLoader(webpage_url)
docs = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=10)
splits = text_splitter.split_documents(docs)
ここでは、langchain_community
のWebBaseLoader
を使用してWebページデータを読み込みます。その後、langchain
のRecursiveCharacterTextSplitter
を使用して、読み込まれたドキュメントをより小さなチャンクに分割します。
ステップ3:Ollamaの埋め込みとベクトルストアの作成
Webページから関連情報を効率的に取得するために、埋め込みとベクトルストアを作成する必要があります。次のコードを追加してください:
# 2. Ollamaの埋め込みとベクトルストアの作成
embeddings = OllamaEmbeddings(model="llama3")
vectorstore = Chroma.from_documents(documents=splits, embedding=embeddings)
ここでは、langchain_community
のOllamaEmbeddings
クラスを使用してOllamaの埋め込みを作成し、llama3
モデルを指定します。次に、langchain_community
のChroma
クラスを使用してベクトルストアを作成し、分割されたドキュメントと埋め込みを渡します。
ステップ4:Ollama Llama-3モデル関数を定義する
次に、Ollama Llama-3モデルを使用して、ユーザーの質問と関連するコンテキストに基づいて応答を生成する関数を定義しましょう。以下のコードを追加してください:
# 3. Ollama Llama3モデルを呼び出す
def ollama_llm(question, context):
formatted_prompt = f"Question: {question}\n\nContext: {context}"
response = ollama.chat(model='llama3', messages=[{'role': 'user', 'content': formatted_prompt}])
return response['message']['content']
この関数は、ユーザーの質問と関連するコンテキストを入力として受け取ります。質問とコンテキストを組み合わせてプロンプトをフォーマットし、ollama.chat
関数を使用してLlama-3モデルを使用して応答を生成します。
ステップ5:RAGチェーンのセットアップ
ユーザーの質問に基づいてベクトルストアから関連情報を取得するために、RAG(Retrieval Augmented Generation)チェーンをセットアップする必要があります。以下のコードを追加してください:
# 4. RAGのセットアップ
retriever = vectorstore.as_retriever()
def combine_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
def rag_chain(question):
retrieved_docs = retriever.invoke(question)
formatted_context = combine_docs(retrieved_docs)
return ollama_llm(question, formatted_context)
st.success(f"{webpage_url}を正常にロードしました!")
ここでは、ベクトルストアからリトリーバーを作成するためにas_retriever
メソッドを使用しています。関連するドキュメントを1つのフォーマットされたコンテキスト文字列に結合するために、ヘルパー関数combine_docs
を定義しています。 rag_chain
関数は、ユーザーの質問を受け取り、リトリーバーを使用して関連文書を取得し、文書をフォーマットされたコンテキストに結合し、問題とコンテキストをollama_llm
関数に渡して応答を生成します。
ステップ6:チャット機能の実装
最後に、Streamlitアプリのチャット機能を実装しましょう。以下のコードを追加してください:
# Webページについて質問する
prompt = st.text_input("Webページについての質問を入力してください")
# Webページとチャットする
if prompt:
result = rag_chain(prompt)
st.write(result)
このコードは、ユーザーがWebページについての質問をするための入力フィールドを追加します。ユーザーが質問を入力して送信すると、rag_chain
関数が呼び出され、ユーザーの質問が渡されます。生成された応答はst.write
を使用して表示されます。
最終ステップ:アプリを実行しましょう!
アプリを実行するには、app.py
ファイルを保存し、同じディレクトリでターミナルを開きます。次のコマンドを実行します:
streamlit run app.py
これにより、Streamlitアプリが開始され、指定されたURLでウェブブラウザでアクセスできます。
結論
おめでとうございます!ローカルでLlama-3を使用したRAGアプリを正常に構築しました。このアプリでは、ローカルのLlama-3とRAGの技術の力を活用して、Webページとのチャットができます。ユーザーはWebページのURLを入力し、アプリがWebページデータを読み込み、埋め込みとベクトルストアを作成し、RAGチェーンを使用してユーザーの質問に基づいて関連情報を取得し、応答を生成します。
機能をさらに追加したり、ユーザーインターフェースを改善したり、必要に応じて追加の機能を統合するなど、アプリをさらに探求して拡張してください。
それなら、Anakin AIを絶対に見逃せません!
Anakin AIは、すべてのワークフローオートメーションに適したオールインワンプラットフォームです。使いやすいノーコードアプリビルダーでパワフルなAIアプリを作成し、Llama 3、Claude、GPT-4、Uncensored LLMs、Stable Diffusionなどの高性能なAIモデルを利用してください!
Anakin AIで夢のAIアプリを数分で構築しましょう!