# LangChain 整合

## LangChain 整合

Rememberizer 通過 `RememberizerRetriever` 類別與 LangChain 整合，使您能夠輕鬆地將 Rememberizer 的語義搜索功能納入您的 LangChain 驅動的應用程序中。本指南說明了如何設置和使用此整合，以構建具有訪問您的知識庫的高級 LLM 應用程序。

### 介紹

LangChain 是一個流行的框架，用於構建大型語言模型（LLMs）應用程序。通過將 Rememberizer 與 LangChain 整合，您可以：

* 在 RAG（檢索增強生成）應用程序中使用您的 Rememberizer 知識庫
* 創建可以訪問您的文檔和數據的聊天機器人
* 構建利用您的知識的問答系統
* 開發可以搜索和推理您信息的代理

該整合可在 `langchain_community.retrievers` 模塊中使用。

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

### 開始使用

#### 前置條件

在開始之前，您需要：

1. 一個已創建的 Rememberizer 帳戶，並擁有 Common Knowledge
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`：

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": "在人工智慧的背景下，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. **未返回結果**：確保您的常識包含相關信息
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](https://docs.rememberizer.ai/zh-hk/kai-fa-zhe-zi-yuan/integration-options/creating-a-rememberizer-gpt) - 一種 AI 整合的替代方法
