LangChain 整合
學習如何將 Rememberizer 作為 LangChain 檢索器整合,以便為您的 LangChain 應用程序提供強大的向量數據庫搜索功能。
LangChain 整合
Rememberizer 通過 RememberizerRetriever
類別與 LangChain 整合,使您能夠輕鬆地將 Rememberizer 的語義搜索功能納入您的 LangChain 驅動的應用程序中。本指南說明了如何設置和使用此整合,以構建具有訪問您的知識庫的高級 LLM 應用程序。
介紹
LangChain 是一個流行的框架,用於構建大型語言模型(LLMs)應用程序。通過將 Rememberizer 與 LangChain 整合,您可以:
在 RAG(檢索增強生成)應用程序中使用您的 Rememberizer 知識庫
創建可以訪問您的文檔和數據的聊天機器人
構建利用您的知識的問答系統
開發可以搜索和推理您信息的代理
該整合可在 langchain_community.retrievers
模塊中使用。
開始使用
前置條件
在開始之前,您需要:
一個已創建的 Rememberizer 帳戶,並擁有 Common Knowledge
一個用於訪問您的 Common Knowledge 的 API 金鑰
安裝了 LangChain 的 Python 環境
有關創建 Common Knowledge 和生成 API 金鑰的詳細說明,請參見 註冊和使用 API 金鑰。
安裝
安裝所需的套件:
pip install langchain langchain_community
如果您計劃使用 OpenAI 模型(如下例所示):
pip install langchain_openai
認證設置
有兩種方式來驗證 RememberizerRetriever
:
環境變數:設置
REMEMBERIZER_API_KEY
環境變數import os os.environ["REMEMBERIZER_API_KEY"] = "rem_ck_your_api_key"
直接參數:在初始化檢索器時直接傳遞 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`: 有關文件的附加信息
元數據結構的示例:
```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 來形成答案的問答系統:
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 檢索器概念指南
LangChain 檢索器操作指南
Rememberizer API 文件
Rememberizer 中的 向量存儲
創建一個 Rememberizer GPT - 一種 AI 整合的替代方法
Last updated