# 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](/zh-hk/kai-fa-zhe-zi-yuan/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/zh-hk/kai-fa-zhe-zi-yuan/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.
