ホームページ >テクノロジー周辺機器 >AI >LLM RAG:AI搭載ファイルリーダーアシスタントの作成

LLM RAG:AI搭載ファイルリーダーアシスタントの作成

Linda Hamilton
Linda Hamiltonオリジナル
2025-03-04 10:40:11510ブラウズ

はじめに

aiはどこにでもあります。

少なくとも1日に1回、大きな言語モデル(LLM)とやり取りしないことは困難です。チャットボットはここにとどまります。彼らはあなたのアプリにいます、彼らはあなたがより良く書くのを助け、彼らは電子メールを作成し、彼らは電子メールを読みます...まあ、彼らはたくさんします。

そして、それは悪いとは思わない。実際、私の意見は逆です - 少なくともこれまでのところ。私は日常生活でAIを使用することを擁護し、擁護しています。なぜなら、同意して、それがすべてをより簡単にするからです。

句読点やタイプを見つけるためにドキュメントを二重読みにするのに時間を費やす必要はありません。 aiは私のためにそれをします。毎週月曜日にそのフォローアップメールを書くのに時間を無駄にしません。 aiは私のためにそれをします。主なポイントとアクションポイントを要約するためにAIを持っているとき、私は巨大で退屈な契約を読む必要はありません!

これらは、AIの素晴らしい用途のほんの一部にすぎません。 LLMSのより多くのユースケースを知りたい場合は、私たちの生活を楽にしたい場合は、それらについての本全体を書きました。

今、データサイエンティストとして考え、技術的な側面を見て、すべてがそれほど明るく光沢があるわけではありません。

llmsは、誰またはあらゆる会社に適用されるいくつかの一般的なユースケースに最適です。たとえば、トレーニングのカットオフ日まで作成された一般的なコンテンツに関する質問、要約、または回答。ただし、特定のビジネスアプリケーションに関しては、単一の目的、またはカットオフ日を作成しなかった新しいもの、つまり、

of-of-box

- つまり、回答を知りません。したがって、調整が必要になります。

LLMモデルのトレーニングには数ヶ月と数百万ドルかかることがあります。さらに悪いことに、モデルを調整して目的に合わせない場合、不十分な結果や幻覚があります(クエリを考慮してモデルの応答が意味をなさない場合)。 では、解決策は何ですか?私たちのデータを含めるためにモデルを再訓練する多数のお金を費やしますか?

そうではありません。それは、検索された高等世代(RAG)が有用になるときです。

RAGは、外部の知識ベースから情報を大規模な言語モデル(LLM)と組み合わせたフレームワークです。 AIモデルがより正確で関連性のある応答を生成するのに役立ちます。

次のRagの詳細をご覧ください

rag?

とは何ですか

概念を説明するための物語を教えてください。

私は映画が大好きです。しばらくの間、私はどの映画がオスカーや最高の俳優や女優で最高の映画カテゴリーを競っているかを知っていました。そして、私は確かにその年の像を手に入れたものを確かに知っているでしょう。しかし今、私はその主題についてすべてさびています。誰が競争しているのかと尋ねたら、私は知りません。そして、私があなたに答えようとしたとしても、私はあなたに弱い反応を与えるでしょう。

では、質の高い対応を提供するために、私は他の誰もがしていることをします:オンラインで情報を検索し、それを取得してから、それをあなたに与えます。私がちょうどしたことは、ぼろと同じアイデアです。外部データベースからデータを取得して答えを出しました。

コンテンツストアでLLMを強化した場合、データを取得し、ラグは、モデルが知識を強化し、より正確に対応できるコンテンツストアを作成するようなものです。

要約:

検索アルゴリズムを使用して、データベース、知識ベース、Webページなどの外部データソースを照会します。

取得した情報を前処理します。LLM RAG:AI搭載ファイルリーダーアシスタントの作成

処理された情報をLLMに組み込みます。

  1. なぜrag?
  2. を使用するのか
  3. 今では、Ragフレームワークが何であるかを知っているので、なぜそれを使用する必要があるのか​​を理解しましょう。
  4. ここに利点のいくつかがあります:
実際のデータを参照することにより、事実上の正確さを強化します

ragは、LLMSのプロセスを支援し、知識を統合して、より関連性の高い回答を作成する

RAGは、LLMSが内部組織データなどの追加の知識ベースにアクセスするのに役立ちます

ragは、LLMがより正確なドメイン固有のコンテンツを作成するのに役立ちます

    ラグは、知識のギャップとAIの幻覚を減らすのに役立ちます
  • 以前に説明したように、私はRAGフレームワークで、知識ベースに追加するコンテンツの内部検索エンジンを提供していると言いたいです。
  • まあ。それはすべて非常に興味深いです。しかし、ぼろきれの適用を見てみましょう。 AIを搭載したPDFリーダーアシスタントを作成する方法を学びます。
  • プロジェクト
  • これは、ユーザーがPDFドキュメントをアップロードし、AI駆動の自然言語処理(NLP)ツールを使用してそのコンテンツについて質問することができるアプリケーションです。
  • アプリは、フロントエンドとしてRimeLittを使用します。
  • Langchain、OpenaiのGPT-4モデル、およびFAISS(Facebook AIの類似性検索)ドキュメントの取得とバックエンドでの質問の質問のための。

より良い理解のために手順を分解しましょう:

  1. PDFファイルをロードして、テキストのチャンクに分割します。
    1. これにより、データが取得
    2. に最適化されます
  2. 埋め込みツールにチャンクを提示します。
    1. 埋め込みは、機械が理解できる方法で関係、類似性、意味をキャプチャするために使用されるデータの数値ベクトル表現です。それらは、自然言語処理(NLP)、推奨システム、および検索エンジンで広く使用されています。
  3. 次に、検索のために同じDBにテキストと埋め込みを添えます。
  4. 最後に、LLMを利用できるようにします。
  5. データの準備

a

コンテンツストアの準備

LLMのために、ちょうど見たように、いくつかのステップを踏みます。それでは、ファイルをロードしてテキストチャンクに分割できる関数を作成して、効率的な検索を行うことから始めましょう。 次に、retrienlidアプリの構築を開始し、次のスクリプトでその機能を使用します。

webアプリケーション
# Imports
from  langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

def load_document(pdf):
    # Load a PDF
    """
    Load a PDF and split it into chunks for efficient retrieval.

    :param pdf: PDF file to load
    :return: List of chunks of text
    """

    loader = PyPDFLoader(pdf)
    docs = loader.load()

    # Instantiate Text Splitter with Chunk Size of 500 words and Overlap of 100 words so that context is not lost
    text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
    # Split into chunks for efficient retrieval
    chunks = text_splitter.split_documents(docs)

    # Return
    return chunks

Pythonで必要なモジュールのインポートを開始します。それらのほとんどは、Langchainパッケージから来ています

FAISSはドキュメントの取得に使用されます。 OpenAiembedingsは、テキストチャンクを数値スコアに変換して、LLMによるより良い類似性計算を行います。 Chatopenaiは、Openai APIと対話できるようにするものです。 create_retrieval_chainは、実際にラグが行うことであり、そのデータでLLMを取得して増強します。 create_stuff_documents_chainモデルとchatprompttemplateを接着します

注:このスクリプトを実行できるように、

openaiキー

を生成する必要があります。アカウントを作成するのが初めてである場合は、無料のクレジットを取得します。しかし、しばらくの間それを持っている場合、OpenaiのAPIにアクセスできるように5ドルのクレジットを追加する必要がある可能性があります。オプションは、ハグの顔の埋め込みを使用することです

この最初のコードスニペットは、アプリタイトルを作成し、ファイルアップロード用のボックスを作成し、load_document()関数に追加するファイルを準備します。 マシンはテキストよりも数字をよく理解しているため、最終的には、クエリを実行するときに比較して類似性を確認できる数字のデータベースをモデルに提供する必要があります。この次のコードでは、埋め込みがvector_dbを作成するのに役立ちます。 次に、vector_dbでナビゲートするレトリーバーオブジェクトを作成します。 # Imports from langchain_community.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter def load_document(pdf): # Load a PDF """ Load a PDF and split it into chunks for efficient retrieval. :param pdf: PDF file to load :return: List of chunks of text """ loader = PyPDFLoader(pdf) docs = loader.load() # Instantiate Text Splitter with Chunk Size of 500 words and Overlap of 100 words so that context is not lost text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100) # Split into chunks for efficient retrieval chunks = text_splitter.split_documents(docs) # Return return chunks

先に進むと、RAGフレームワークのコアを作成し、Retriverオブジェクトとプロンプトを一緒に貼り付けます。このオブジェクトは、データソース(ベクトルデータベースなど)から関連するドキュメントを追加し、LLMを使用して処理して応答を生成する準備ができています。

# Imports
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain.chains import create_retrieval_chain
from langchain_openai import ChatOpenAI
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
from scripts.secret import OPENAI_KEY
from scripts.document_loader import load_document
import streamlit as st
最後に、ユーザー入力の変数質問を作成します。この質問ボックスがクエリで満たされている場合、それをチェーンに渡します。チェーンは、LLMを呼び出してアプリの画面に印刷される応答を処理して返すように呼びます。

ここに結果のスクリーンショットがあります。
# Create a Streamlit app
st.title("AI-Powered Document Q&A")

# Load document to streamlit
uploaded_file = st.file_uploader("Upload a PDF file", type="pdf")

# If a file is uploaded, create the TextSplitter and vector database
if uploaded_file :

    # Code to work around document loader from Streamlit and make it readable by langchain
    temp_file = "./temp.pdf"
    with open(temp_file, "wb") as file:
        file.write(uploaded_file.getvalue())
        file_name = uploaded_file.name

    # Load document and split it into chunks for efficient retrieval.
    chunks = load_document(temp_file)

    # Message user that document is being processed with time emoji
    st.write("Processing document... :watch:")

そして、これはあなたがファイルリーダーAIアシスタントが行動しているのを見るためのGIFです!LLM RAG:AI搭載ファイルリーダーアシスタントの作成

あなたが行く前に

LLM RAG:AI搭載ファイルリーダーアシスタントの作成 このプロジェクトでは、RAGフレームワークとは何か、LLMのパフォーマンスが向上し、特定の知識でうまく機能するのに役立つ方法を学びました。

AIは、取扱説明書、企業のデータベース、一部のファイナンスファイル、または契約の知識を供給し、ドメイン固有のコンテンツクエリに正確に対応するために微調整できます。ナレッジベースは、コンテンツストアで

拡張されています。

要約すると、これがフレームワークの仕組みです:

1なりユーザークエリ

→入力テキストが受信されます

2️⃣

関連するドキュメントを取得

→知識ベース(データベース、ベクターストアなど)を検索します。 3かコンテキストの増強

→取得ドキュメントが入力に追加されます。

4法応答を生成

→LLMが組み合わせた入力を処理し、答えを生成します。

githubリポジトリ https://github.com/gurezende/basic-rag

私について このコンテンツが気に入っていて、私の仕事についてもっと知りたい場合は、ここに私のウェブサイトがあります。ここでは、すべての連絡先も見つけることができます。

https://gustavorsantos.me

参照

https://cloud.google.com/use-cases/retrieval-augmented-generation

https://www.ibm.com/think/topics/retrieval-augmented-generation

https://youtu.be/t-d1ofcdw1m?si=g0uwfh5-wznmu0nw

https://python.langchain.com/docs/introduction

https://www.geeksforgeeks.org/how-to-get-your-openai-apii-key

以上がLLM RAG:AI搭載ファイルリーダーアシスタントの作成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。