LangChain 集成¶
Rememberizer 通过 RememberizerRetriever 类与 LangChain 集成,使您能够轻松地将 Rememberizer 的语义搜索功能纳入您的 LangChain 驱动的应用程序中。本指南解释了如何设置和使用此集成,以构建具有访问您的知识库的高级 LLM 应用程序。
介绍¶
LangChain 是一个流行的框架,用于构建大型语言模型(LLMs)应用程序。通过将 Rememberizer 与 LangChain 集成,您可以:
- 在 RAG(检索增强生成)应用程序中使用您的 Rememberizer 知识库
- 创建可以访问您的文档和数据的聊天机器人
- 构建利用您的知识的问答系统
- 开发能够搜索和推理您信息的代理
该集成可在 langchain_community.retrievers 模块中使用。
https://python.langchain.com/docs/integrations/retrievers/rememberizer/
开始使用¶
先决条件¶
在开始之前,您需要:
- 一个创建了公共知识的 Rememberizer 账户
- 一个用于访问您的公共知识的 API 密钥
- 安装了 LangChain 的 Python 环境
有关创建公共知识和生成 API 密钥的详细说明,请参见 注册和使用 API 密钥。
安装¶
安装所需的包:
如果您计划使用 OpenAI 模型(如下例所示):
认证设置¶
有两种方法可以验证 RememberizerRetriever:
-
环境变量:设置
REMEMBERIZER_API_KEY环境变量 -
直接参数:在初始化检索器时直接传递 API 密钥
配置选项¶
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_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 的结果权重更高 ) ```
故障排除¶
常见问题¶
- 身份验证错误:确认您的 API 密钥正确且已正确配置
- 未返回结果:确保您的常识包含相关信息
- 速率限制:注意高流量应用的 API 速率限制
调试提示¶
- 设置 LangChain 调试模式以查看详细的 API 调用:
python import langchain langchain.debug = True - 在传递给 LLM 之前检查原始搜索结果,以识别检索问题
相关资源¶
- LangChain 检索器概念指南
- LangChain 检索器使用指南
- Rememberizer API 文档
- Rememberizer 中的 向量存储
- 创建一个 Rememberizer GPT - 一种 AI 集成的替代方法