LangChain 통합
Rememberizer를 LangChain 검색기로 통합하여 LangChain 애플리케이션에 강력한 벡터 데이터베이스 검색 기능을 제공하는 방법을 배우세요.
LangChain 통합
Rememberizer는 RememberizerRetriever
클래스를 통해 LangChain과 통합되어, Rememberizer의 의미 검색 기능을 LangChain 기반 애플리케이션에 쉽게 통합할 수 있습니다. 이 가이드는 지식 기반에 접근하여 고급 LLM 애플리케이션을 구축하기 위한 이 통합 설정 및 사용 방법을 설명합니다.
소개
LangChain은 대형 언어 모델(LLM)을 사용하여 애플리케이션을 구축하기 위한 인기 있는 프레임워크입니다. Rememberizer를 LangChain과 통합하면 다음을 수행할 수 있습니다:
RAG(검색 증강 생성) 애플리케이션에서 Rememberizer 지식 기반을 사용할 수 있습니다.
문서 및 데이터에 접근할 수 있는 챗봇을 생성할 수 있습니다.
귀하의 지식을 활용하는 질문-답변 시스템을 구축할 수 있습니다.
귀하의 정보를 검색하고 추론할 수 있는 에이전트를 개발할 수 있습니다.
통합은 langchain_community.retrievers
모듈에서 사용할 수 있습니다.
시작하기
필수 조건
시작하기 전에 다음이 필요합니다:
Common Knowledge가 생성된 Rememberizer 계정
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": "AI의 맥락에서 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