LangChain統合

RememberizerをLangChainリトリーバーとして統合し、LangChainアプリケーションに強力なベクトルデータベース検索へのアクセスを提供する方法を学びます。

LangChain統合

Rememberizerは、RememberizerRetrieverクラスを通じてLangChainと統合されており、Rememberizerのセマンティック検索機能をLangChainを活用したアプリケーションに簡単に組み込むことができます。このガイドでは、知識ベースにアクセスする高度なLLMアプリケーションを構築するために、この統合を設定し使用する方法を説明します。

はじめに

LangChainは、大規模言語モデル(LLM)を使用してアプリケーションを構築するための人気のフレームワークです。RememberizerをLangChainと統合することで、次のことができます:

  • RAG(Retrieval Augmented Generation)アプリケーションでRememberizerの知識ベースを使用する

  • ドキュメントやデータにアクセスできるチャットボットを作成する

  • あなたの知識を活用した質問応答システムを構築する

  • あなたの情報を検索し推論できるエージェントを開発する

統合はlangchain_community.retrieversモジュールで利用可能です。

始めに

前提条件

始める前に、次のものが必要です:

  1. Common Knowledge を作成した Rememberizer アカウント

  2. Common Knowledge にアクセスするための API キー

  3. LangChain がインストールされた Python 環境

Common Knowledge の作成と API キーの生成に関する詳細な手順については、API キーの登録と使用を参照してください。

インストール

必要なパッケージをインストールします:

OpenAIモデルを使用する予定がある場合(以下の例に示すように):

認証設定

RememberizerRetrieverを認証する方法は2つあります:

  1. 環境変数: REMEMBERIZER_API_KEY環境変数を設定します

  2. 直接パラメータ: リトリーバーを初期化する際にAPIキーを直接渡します

設定オプション

RememberizerRetriever クラスは、これらのパラメータを受け入れます:

パラメータ
タイプ
デフォルト
説明

top_k_results

int

10

検索から返すドキュメントの数

rememberizer_api_key

str

None

認証用のAPIキー(環境変数として設定されている場合はオプション)

裏側では、リトリーバーは追加の設定可能なパラメータを使用して Rememberizer の検索エンドポイントにAPIコールを行います:

高度なパラメータ
説明

prev_chunks

一致したチャンクの前に含めるチャンクの数(デフォルト:2)

next_chunks

一致したチャンクの後に含めるチャンクの数(デフォルト:2)

return_full_content

完全なドキュメントコンテンツを返すかどうか(デフォルト:true)

基本的な使い方

以下は、LangChainを使用してRememberizerからドキュメントを取得する簡単な例です:

ドキュメント構造の理解

リトリーバーによって返される各ドキュメントには以下が含まれます:

  • page_content: 一致したドキュメントチャンクのテキストコンテンツ

  • metadata: ドキュメントに関する追加情報

メタデータ構造の例:

高度な例

RAG質問応答システムの構築

この例では、Rememberizerから情報を取得し、GPT-3.5を使用して回答を作成する質問応答システムを作成します:

APIキーの設定

os.environ["REMEMBERIZER_API_KEY"] = "rem_ck_your_api_key" os.environ["OPENAI_API_KEY"] = "your_openai_api_key"

リトリーバーと言語モデルの初期化

retriever = RememberizerRetriever(top_k_results=5) llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)

取得QAチェーンを作成する

qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", # 最も簡単な方法 - すべての文書をプロンプトに詰め込む retriever=retriever, return_source_documents=True )

質問をする

response = qa_chain.invoke({"query": "AIの文脈におけるRAGとは何ですか?"})

答えを印刷する

print(f"答え: {response['result']}") print("\n出典:") for idx, doc in enumerate(response['source_documents']): print(f"{idx+1}. {doc.metadata['name']}")

APIキーの設定

os.environ["REMEMBERIZER_API_KEY"] = "rem_ck_your_api_key" os.environ["OPENAI_API_KEY"] = "your_openai_api_key"

コンポーネントの初期化

retriever = RememberizerRetriever(top_k_results=5) llm = ChatOpenAI(model_name="gpt-3.5-turbo") memory = ConversationBufferMemory( memory_key="chat_history", return_messages=True )

会話チェーンを作成する

conversation = ConversationalRetrievalChain.from_llm( llm=llm, retriever=retriever, memory=memory )

例の会話

questions = [ "RAGとは何ですか?", "大規模言語モデルはどのようにそれを使用しますか?", "このアプローチの制限は何ですか?", ]

for question in questions: response = conversation.invoke({"question": question}) print(f"質問: {question}") print(f"回答: {response['answer']}\n")

リトリーバーを作成する

rememberizer_retriever = RememberizerRetriever(top_k_results=3) web_retriever = WebResearchRetriever(...) # 別のリトリーバーを設定する

重み付けスコアを持つアンサンブルを作成する

ensemble_retriever = EnsembleRetriever( retrievers=[rememberizer_retriever, web_retriever], weights=[0.7, 0.3] # Rememberizerの結果はより高い重みを持つ )

  • LLMに渡す前に生の検索結果を調べて、取得の問題を特定します

関連リソース

Last updated