# 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 账户
2. 一个用于访问您的公共知识的 API 密钥
3. 安装了 LangChain 的 Python 环境

有关创建公共知识和生成 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\_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-cn/kai-fa-zhe-zi-yuan/integration-options/creating-a-rememberizer-gpt) - 一种 AI 集成的替代方法
