# LangChain統合

## LangChain統合

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

### はじめに

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

* RAG（Retrieval Augmented Generation）アプリケーションでRememberizerの知識ベースを使用する
* ドキュメントやデータにアクセスできるチャットボットを作成する
* あなたの知識を活用した質問応答システムを構築する
* あなたの情報を検索し推論できるエージェントを開発する

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

{% embed url="<https://python.langchain.com/docs/integrations/retrievers/rememberizer/>" %}

### 始めに

#### 前提条件

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

1. Common Knowledge を作成した Rememberizer アカウント
2. Common Knowledge にアクセスするための API キー
3. LangChain がインストールされた Python 環境

Common Knowledge の作成と API キーの生成に関する詳細な手順については、[API キーの登録と使用](https://docs.rememberizer.ai/developer/registering-and-using-api-keys)を参照してください。

#### インストール

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

```bash
pip install langchain langchain_community
```

OpenAIモデルを使用する予定がある場合（以下の例に示すように）：

```bash
pip install langchain_openai
```

#### 認証設定

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

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

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

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

```python
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`: ドキュメントに関する追加情報

メタデータ構造の例：

```python
{
  '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を使用して回答を作成する質問応答システムを作成します：

```python
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に渡す前に生の検索結果を調べて、取得の問題を特定します

### 関連リソース

* LangChain [リトリーバーの概念ガイド](https://python.langchain.com/docs/concepts/#retrievers)
* LangChain [リトリーバーのハウツーガイド](https://python.langchain.com/docs/how_to/#retrievers)
* Rememberizer [API ドキュメント](https://docs.rememberizer.ai/developer/api-docs/)
* Rememberizer の [ベクターストア](https://docs.rememberizer.ai/developer/vector-stores)
* [Rememberizer GPT の作成](/ja/rissu/integration-options/creating-a-rememberizer-gpt.md) - AI 統合のための代替アプローチ


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.rememberizer.ai/ja/rissu/integration-options/langchain-integration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
