콘텐츠로 이동

LangChain 통합

Rememberizer는 RememberizerRetriever 클래스를 통해 LangChain과 통합되어, Rememberizer의 의미 검색 기능을 LangChain 기반 애플리케이션에 쉽게 통합할 수 있습니다. 이 가이드는 지식 기반에 접근하여 고급 LLM 애플리케이션을 구축하기 위한 이 통합 설정 및 사용 방법을 설명합니다.

소개

LangChain은 대형 언어 모델(LLM)을 사용하여 애플리케이션을 구축하기 위한 인기 있는 프레임워크입니다. Rememberizer를 LangChain과 통합하면 다음을 수행할 수 있습니다:

  • RAG(검색 증강 생성) 애플리케이션에서 Rememberizer 지식 기반을 사용할 수 있습니다.
  • 문서 및 데이터에 접근할 수 있는 챗봇을 생성할 수 있습니다.
  • 귀하의 지식을 활용하는 질문-답변 시스템을 구축할 수 있습니다.
  • 귀하의 정보를 검색하고 추론할 수 있는 에이전트를 개발할 수 있습니다.

통합은 langchain_community.retrievers 모듈에서 사용할 수 있습니다.

https://python.langchain.com/docs/integrations/retrievers/rememberizer/

시작하기

필수 조건

시작하기 전에 다음이 필요합니다:

  1. Common Knowledge가 생성된 Rememberizer 계정
  2. Common Knowledge에 접근하기 위한 API 키
  3. LangChain이 설치된 Python 환경

Common Knowledge를 생성하고 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`: 문서에 대한 추가 정보

메타데이터 구조의 예:

```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에 전달하기 전에 원시 검색 결과를 검사하여 검색 문제를 식별합니다

관련 자료