LangChain 集成

了解如何将 Rememberizer 作为 LangChain 检索器集成,以便为您的 LangChain 应用程序提供强大的向量数据库搜索访问。

LangChain 集成

Rememberizer 通过 RememberizerRetriever 类与 LangChain 集成,使您能够轻松地将 Rememberizer 的语义搜索功能纳入您的 LangChain 驱动的应用程序中。本指南解释了如何设置和使用此集成,以构建具有访问您的知识库的高级 LLM 应用程序。

介绍

LangChain 是一个流行的框架,用于构建大型语言模型(LLMs)应用程序。通过将 Rememberizer 与 LangChain 集成,您可以:

  • 在 RAG(检索增强生成)应用程序中使用您的 Rememberizer 知识库

  • 创建可以访问您的文档和数据的聊天机器人

  • 构建利用您的知识的问答系统

  • 开发能够搜索和推理您信息的代理

该集成可在 langchain_community.retrievers 模块中使用。

开始使用

先决条件

在开始之前,您需要:

  1. 一个创建了公共知识的 Rememberizer 账户

  2. 一个用于访问您的公共知识的 API 密钥

  3. 安装了 LangChain 的 Python 环境

有关创建公共知识和生成 API 密钥的详细说明,请参见 注册和使用 API 密钥

安装

安装所需的包:

pip install langchain langchain_community

如果您计划使用 OpenAI 模型(如下例所示):

pip install langchain_openai

认证设置

有两种方法可以验证 RememberizerRetriever

  1. 环境变量:设置 REMEMBERIZER_API_KEY 环境变量

    import os
    os.environ["REMEMBERIZER_API_KEY"] = "rem_ck_your_api_key"
  2. 直接参数:在初始化检索器时直接传递 API 密钥

    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 检索文档的简单示例:

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 的结果权重更高 )


## 故障排除

### 常见问题

1. **身份验证错误**:确认您的 API 密钥正确且已正确配置
2. **未返回结果**:确保您的常识包含相关信息
3. **速率限制**:注意高流量应用的 API 速率限制

### 调试提示

- 设置 LangChain 调试模式以查看详细的 API 调用:
  ```python
  import langchain
  langchain.debug = True
  • 在传递给 LLM 之前检查原始搜索结果,以识别检索问题

相关资源

Last updated