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 キーの登録と使用を参照してください。

インストール

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

pip install langchain langchain_community

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

pip install langchain_openai

認証設定

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

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

    import os
    os.environ["REMEMBERIZER_API_KEY"] = "rem_ck_your_api_key"
  2. 直接パラメータ: リトリーバーを初期化する際にAPIキーを直接渡します

    retriever = RememberizerRetriever(rememberizer_api_key="rem_ck_your_api_key")

設定オプション

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からドキュメントを取得する簡単な例です:

import os
from langchain_community.retrievers import RememberizerRetriever

# APIキーを設定する
os.environ["REMEMBERIZER_API_KEY"] = "rem_ck_your_api_key"

# リトリーバーを初期化する
retriever = RememberizerRetriever(top_k_results=5)

# クエリに関連するドキュメントを取得する
docs = retriever.get_relevant_documents(query="ベクトル埋め込みはどのように機能しますか?")

# 最初のドキュメントを表示
if docs:
    print(f"ドキュメント: {docs[0].metadata['name']}")
    print(f"内容: {docs[0].page_content[:200]}...")

ドキュメント構造の理解

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

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

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

メタデータ構造の例:

{
  'id': 13646493,
  'document_id': '17s3LlMbpkTk0ikvGwV0iLMCj-MNubIaP',
  'name': 'What is a large language model (LLM)_ _ Cloudflare.pdf',
  'type': 'application/pdf',
  'path': '/langchain/What is a large language model (LLM)_ _ Cloudflare.pdf',
  'url': 'https://drive.google.com/file/d/17s3LlMbpkTk0ikvGwV0iLMCj-MNubIaP/view',
  'size': 337089,
  'created_time': '',
  'modified_time': '',
  'indexed_on': '2024-04-04T03:36:28.886170Z',
  'integration': {'id': 347, 'integration_type': 'google_drive'}
}

高度な例

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

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

import os
from langchain_community.retrievers import RememberizerRetriever
from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI

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']}")


### メモリを持つ会話エージェントの構築

この例では、会話履歴を維持できる会話エージェントを作成します:

```python
import os
from langchain_community.retrievers import RememberizerRetriever
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
from langchain_openai import ChatOpenAI

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")


## ベストプラクティス

### 検索パフォーマンスの最適化

1. **クエリを具体的にする**: より具体的なクエリは通常、より良い結果をもたらします
2. **`top_k_results`を調整する**: 3-5件の結果から始め、アプリケーションのニーズに基づいて調整します
3. **コンテキストウィンドウを使用する**: リトリーバーは、自動的に一致したチャンクの周りのコンテキストを含めます

### セキュリティに関する考慮事項

1. **APIキーを保護する**: 環境変数や秘密管理ツールを使用して安全に保存する
2. **専用のキーを作成する**: 異なるアプリケーション用に別々のAPIキーを作成する
3. **定期的にキーをローテーションする**: 定期的に新しいキーを生成し、古いものを段階的に廃止する

### 統合パターン

1. **事前取得処理**: ユーザーのクエリを前処理して検索の関連性を向上させることを検討する
2. **事後取得フィルタリング**: LLMに渡す前に取得したドキュメントをフィルタリングまたはランク付けする
3. **ハイブリッド検索**: `EnsembleRetriever`を使用してRememberizerと他のリトリーバーを組み合わせる

```python
from langchain.retrievers import EnsembleRetriever
from langchain_community.retrievers import RememberizerRetriever, WebResearchRetriever

リトリーバーを作成する

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

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

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


## トラブルシューティング

### 一般的な問題

1. **認証エラー**: APIキーが正しく設定されていることを確認してください
2. **結果が返されない**: Common Knowledgeに関連情報が含まれていることを確認してください
3. **レート制限**: 高トラフィックアプリケーションのAPIレート制限に注意してください

### デバッグのヒント

- LangChainのデバッグモードを設定して、詳細なAPI呼び出しを確認します:
  ```python
  import langchain
  langchain.debug = True
  • LLMに渡す前に生の検索結果を調べて、取得の問題を特定します

関連リソース

Last updated