LangChain 통합¶
Rememberizer는 RememberizerRetriever 클래스를 통해 LangChain과 통합되어, Rememberizer의 의미 검색 기능을 LangChain 기반 애플리케이션에 쉽게 통합할 수 있습니다. 이 가이드는 지식 기반에 접근하여 고급 LLM 애플리케이션을 구축하기 위한 이 통합 설정 및 사용 방법을 설명합니다.
소개¶
LangChain은 대형 언어 모델(LLM)을 사용하여 애플리케이션을 구축하기 위한 인기 있는 프레임워크입니다. Rememberizer를 LangChain과 통합하면 다음을 수행할 수 있습니다:
- RAG(검색 증강 생성) 애플리케이션에서 Rememberizer 지식 기반을 사용할 수 있습니다.
- 문서 및 데이터에 접근할 수 있는 챗봇을 생성할 수 있습니다.
- 귀하의 지식을 활용하는 질문-답변 시스템을 구축할 수 있습니다.
- 귀하의 정보를 검색하고 추론할 수 있는 에이전트를 개발할 수 있습니다.
통합은 langchain_community.retrievers 모듈에서 사용할 수 있습니다.
https://python.langchain.com/docs/integrations/retrievers/rememberizer/
시작하기¶
필수 조건¶
시작하기 전에 다음이 필요합니다:
- Common Knowledge가 생성된 Rememberizer 계정
- Common Knowledge에 접근하기 위한 API 키
- LangChain이 설치된 Python 환경
Common Knowledge를 생성하고 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에서 문서를 검색하는 간단한 예입니다:
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 결과는 더 높은 가중치를 가집니다 ) ```
문제 해결¶
일반적인 문제¶
- 인증 오류: API 키가 올바르고 제대로 구성되었는지 확인하세요.
- 결과가 반환되지 않음: 공통 지식에 관련 정보가 포함되어 있는지 확인하세요.
- 요금 제한: 대량 애플리케이션에 대한 API 요금 제한을 염두에 두세요.
디버그 팁¶
- LangChain 디버그 모드를 설정하여 자세한 API 호출을 확인합니다:
python import langchain langchain.debug = True - LLM에 전달하기 전에 원시 검색 결과를 검사하여 검색 문제를 식별합니다
관련 자료¶
- LangChain 검색기 개념 가이드
- LangChain 검색기 사용 방법 가이드
- Rememberizer API 문서
- Rememberizer의 벡터 저장소
- Rememberizer GPT 만들기 - AI 통합을 위한 대안 접근법