始める無料で始める

ドキュメントとベクターデータベースの準備

次のいくつかの演習では、Balaguer et al.(2024)による論文RAG VS ファインチューニング:パイプライン、トレードオフ、および農業に関するケーススタディを含むPDFドキュメントと会話するための完全なRAGワークフローを構築します。これは、ドキュメントをチャンクに分割し、ベクターデータベースに保存し、取得したドキュメントとユーザー入力を接続するプロンプトを定義し、LLMがこの外部データにアクセスするための検索チェーンを構築することで機能します。

この演習では、ドキュメントをストレージ用に準備し、Chroma ベクターデータベースに取り込みます。RecursiveCharacterTextSplitter を使って PDF をチャンクに分割し、OpenAI の埋め込み関数を使って Chroma ベクターデータベースに取り込みます。コースの他の演習と同様に、ご自身の OpenAI API キーを用意する必要はありません

次のクラスはすでにインポートされています: RecursiveCharacterTextSplitterChromaOpenAIEmbeddings

この演習はコースの一部です

LangChainを使ったLLMアプリケーション開発

コースを見る

演習の手順

  • data 内のドキュメントを、RecursiveCharacterTextSplitterchunk_size に、300chunk_overlap に設定した 50 を使って分割します。
  • .from_documents() メソッドを使って、提供された OpenAI 埋め込み関数でドキュメントを埋め込み、Chroma ベクターデータベースに取り込みます。
  • vectorstore を、最終的な RAG チェーンで使用する上位 3 件のドキュメントを返すリトリーバーオブジェクトに設定します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

loader = PyPDFLoader('rag_vs_fine_tuning.pdf')
data = loader.load()

# Split the document using RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
    chunk_size=____,
    chunk_overlap=____)
docs = splitter.split_documents(data) 

# Embed the documents in a persistent Chroma vector database
embedding_function = OpenAIEmbeddings(api_key='', model='text-embedding-3-small')
vectorstore = Chroma.____(
    docs,
    embedding=embedding_function,
    persist_directory=os.getcwd()
)

# Configure the vector store as a retriever
retriever = vectorstore.as_retriever(
    search_type="similarity",
    search_kwargs={"k": ____}
)
コードを編集して実行