ローカルRAGアプリをラマ3で構築する方法(完全ガイド)

この包括的なチュートリアルでは、最先端の言語モデルであるMeta AIのLlama 3を使用して、強力なリトリーバル強化生成(RAG)アプリケーションを構築する方法について探求します。

Anakin AIを無料で利用開始

ローカルRAGアプリをラマ3で構築する方法(完全ガイド)

Start for free
目次

この包括的なチュートリアルでは、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モデルをサポート!)
Anakin.ai - One-Stop AI App Platform
Generate Content, Images, Videos, and Voice; Craft Automated Workflows, Custom AI Apps, and Intelligent Agents. Your exclusive AI app customization workstation.

RAGとは何ですか?

Retrieval Augmented Generation(RAG)は、情報検索と言語生成を組み合わせて、質問応答システムの性能を向上させる技術です。

  • 単純に言えば、RAGはAIモデルが知識ベースや文書から関連情報を取得し、その情報を使用してユーザーの質問により正確で文脈に適した応答を生成することを可能にします。
  • 検索と生成の力を活用することで、RAGはユーザーに高度に関連性の高い情報を提供できるインテリジェントチャットボットや質問応答アプリケーションの作成を可能にします。
  • コーディングの経験がないユーザーがRAGシステムを実行したい場合は、Anakin AIを試すことができます。ノーコードビルダーで素晴らしいAIアプリを作成できます!
AI Powered Automation with Anakin AI
Anakin AIを使用したAIパワードオートメーション

上記の情報をすべて把握したら、始めましょう!

ローカル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_communityWebBaseLoaderを使用してWebページデータを読み込みます。その後、langchainRecursiveCharacterTextSplitterを使用して、読み込まれたドキュメントをより小さなチャンクに分割します。

ステップ3:Ollamaの埋め込みとベクトルストアの作成

Webページから関連情報を効率的に取得するために、埋め込みとベクトルストアを作成する必要があります。次のコードを追加してください:

    # 2. Ollamaの埋め込みとベクトルストアの作成
    embeddings = OllamaEmbeddings(model="llama3")
    vectorstore = Chroma.from_documents(documents=splits, embedding=embeddings)

ここでは、langchain_communityOllamaEmbeddingsクラスを使用してOllamaの埋め込みを作成し、llama3モデルを指定します。次に、langchain_communityChromaクラスを使用してベクトルストアを作成し、分割されたドキュメントと埋め込みを渡します。

ステップ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チェーンを使用してユーザーの質問に基づいて関連情報を取得し、応答を生成します。

機能をさらに追加したり、ユーザーインターフェースを改善したり、必要に応じて追加の機能を統合するなど、アプリをさらに探求して拡張してください。

💡
AIの最新トレンドに興味がありますか?

それなら、Anakin AIを絶対に見逃せません!

Anakin AIは、すべてのワークフローオートメーションに適したオールインワンプラットフォームです。使いやすいノーコードアプリビルダーでパワフルなAIアプリを作成し、Llama 3ClaudeGPT-4Uncensored LLMsStable Diffusionなどの高性能なAIモデルを利用してください!

Anakin AIで夢のAIアプリを数分で構築しましょう!