LoginSignup
0
1

OpenAIのGPT-4oモデルとObjectBoxベクターデータベースを使用したRAGアプリケーションの構築

Last updated at Posted at 2024-05-18

こんにちは。今回はKrishakさんの動画を参考に、OpenAIの最新モデルであるGPT-4oと、オープンソースのベクターデータベースであるObjectBoxを使用して、エンドツーエンドのRAG(リトリーバル・オーグメンテッド・ジェネレーション)アプリケーションを構築する方法を紹介します。

概要

このチュートリアルでは、以下のステップに従ってRAGアプリケーションを構築します。
Google Colaboで試してみました。

  1. 環境変数の設定
  2. ドキュメントのロードとチャンクへの分割
  3. テキストをベクターに変換し、ベクターデータベースに保存
  4. クエリと応答生成のためのRAGパイプラインの構築

1. 環境変数の設定

OpenAI APIキーなどの環境変数をロードします。

import os
from google.colab import userdata
# 環境変数にAPIキーを設定
os.environ["OPENAI_API_KEY"] =  userdata.get('OPENAI_API_KEY')

ご自身の環境にあわせてAPI_KEYを設定する実装にしてください。

必要なモジュールをインストールします。

!pip install langchain_community
!pip install langchain_objectbox
!pip install langchainhub
!pip install langchain_openai

2. ドキュメントのロードとチャンクへの分割

次に、Webサイトのコンテンツを読み込み、ドキュメントローダーを使用してドキュメントを取得します。その後、ドキュメントをチャンクに分割します。

from langchain_community.document_loaders import WebBaseLoader

loader = WebBaseLoader("https://docs.smith.langchain.com/user_guide")
data = loader.load()
data

3. テキストをベクターに変換し、ベクターデータベースに保存

取得したドキュメントをOpenAIの埋め込みを使用してベクターに変換し、ObjectBoxベクターデータベースに保存します。

from langchain_objectbox.vectorstores import ObjectBox
from langchain_openai import OpenAIEmbeddings

from langchain_text_splitters import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter()
documents = text_splitter.split_documents(data)

from langchain_openai import OpenAIEmbeddings
vector = ObjectBox.from_documents(documents, OpenAIEmbeddings(), embedding_dimensions=768)
vector

from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import RetrievalQA
from langchain import hub

llm = ChatOpenAI(model="gpt-4o") ## Calling Gpt-4o
prompt = hub.pull("./rlm/rag-prompt")
prompt

4. クエリと応答生成のためのRAGパイプラインの構築

最後に、RAGパイプラインを構築し、クエリに対する応答を生成します。

qa_chain = RetrievalQA.from_chain_type(
        llm,
        retriever=vector.as_retriever(),
        chain_type_kwargs={"prompt": prompt}
    )

question = "Explain what is langsmith"
result = qa_chain({"query": question })
result

image.png

結論

Krishakさんの動画を参考に、OpenAIのGPT-4oモデルとローカルのObjectBoxベクターデータベースを使用して、RAGアプリケーションを構築する方法を紹介しました。これにより、データセットを効率的に扱いながら、高度な質問応答システムを実現できます。

注意事項

2024年5月18日時点ではこのコードで動作を確認していますが、ライブラリのバージョン更新などで動作しなくなる可能性があります。それについては、ご了承ください。

pythonのライブラリのバージョン
langchain                        0.2.0
langchain-community              0.2.0
langchain-core                   0.1.52
langchain-objectbox              0.1.0a4
langchain-openai                 0.1.7
langchain-text-splitters         0.2.0
langchainhub                     0.1.15
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1