LangChain에서 상위 문서 검색기를 사용하는 방법은 무엇입니까?

Langchain Eseo Sang Wi Munseo Geomsaeggileul Sayonghaneun Bangbeob Eun Mueos Ibnikka



LangChain 프레임워크를 통해 개발자는 자연어로 된 텍스트를 이해하고 생성할 수 있는 대규모 언어 모델을 구축할 수 있습니다. LangChain 모델은 방대한 양의 데이터에 대해 훈련되므로 모델은 데이터를 벡터 저장소에 저장하여 언어를 이해할 수 있습니다. 또한 사용자는 모델에 대해 저장된 모든 데이터가 포함된 데이터베이스 또는 벡터 저장소에서 데이터를 추출할 수 있는 검색기를 구축할 수 있습니다.

이 게시물은 LangChain에서 상위 문서 검색기를 사용하는 프로세스를 보여줍니다.

LangChain에서 상위 문서 검색기를 사용하는 방법은 무엇입니까?

LangChain의 상위 문서 검색기는 문서를 더 작은 덩어리로 분할하여 삽입 순간에 의미를 잃지 않도록 하는 방식으로 사용할 수 있습니다. 상위 문서는 전체 문서 또는 작은 청크가 추출되는 큰 청크라고 할 수 있습니다.







LangChain에서 상위 문서 검색기를 사용하는 프로세스를 알아보려면 이 가이드를 확인하세요.



1단계: 모듈 설치



먼저 pip 명령을 사용하여 LangChain 프레임워크를 설치하여 상위 문서 검색기 사용을 시작합니다.





pip 설치 랭체인

문서의 임베딩을 저장하고 문서에서 데이터를 검색하려면 Chroma 데이터베이스 모듈을 설치하십시오.



pip 설치 크로마DB

작은 청크를 생성하여 문서의 토큰을 가져오는 토크나이저인 tiktoken을 설치하려면:

pip 설치 틱토큰

Python 노트북에서 다음 명령을 실행하여 OpenAI 모듈을 가져와 해당 종속성과 라이브러리를 가져옵니다.

pip 설치 openai

2단계: 환경 설정 및 데이터 업로드

다음 단계는 환경을 설정하다 OpenAI 계정의 API 키 사용:

수입
수입 getpass

. [ 'OPENAI_API_KEY' ] = getpass . getpass ( 'OpenAI API 키:' )

이제 파일 라이브러리를 가져온 후 로컬 시스템에서 문서를 업로드한 다음 upload() 메서드를 호출합니다.

~에서 Google. 수입 파일
업로드됨 = 파일. 업로드 ( )

3단계: 라이브러리 가져오기

다음 단계에는 LangChain 프레임워크를 사용하여 상위 문서 검색기를 사용하는 데 필요한 라이브러리를 가져오는 코드가 포함되어 있습니다.

~에서 랭체인. 리트리버 수입 상위 문서 검색자
~에서 랭체인. 벡터스토어 수입 크로마
~에서 랭체인. 임베딩 수입 OpenAI임베딩
~에서 랭체인. text_splitter 수입 RecursiveCharacterTextSplitter
~에서 랭체인. 저장 수입 인메모리스토어
~에서 랭체인. document_loaders 수입 텍스트로더

파일 경로와 함께 TextLoader() 메서드를 사용하여 검색기를 빌드하기 위한 문서를 로드합니다.

로더 = [
텍스트로더 ( '데이터.txt' ) ,
텍스트로더 ( 'state_of_the_union.txt' ) ,
]
문서 = [ ]
~을 위한 ~에 로더:

4단계: 전체 문서 검색

문서/파일이 모델에 로드되면 문서의 임베딩을 구축하고 벡터 저장소에 저장하면 됩니다.

child_splitter = RecursiveCharacterTextSplitter ( 청크_크기 = 400 )

벡터스토어 = 크로마 (
컬렉션_이름 = '전체_문서' ,
embedding_function = OpenAI임베딩 ( )
)

가게 = 인메모리스토어 ( )
리트리버 = 상위 문서 검색자 (
벡터스토어 = 벡터스토어 ,
의사 저장소 = 가게 ,
child_splitter = child_splitter ,
)

이제 검색기를 사용하여 add_documents() 메서드를 호출하여 문서에 대한 검색기를 가져옵니다.

리트리버. add_documents ( 문서 , 아이디 = 없음 )

다음 코드는 업로드된 파일에 대해 데이터베이스에 저장된 문서의 임베딩을 추출합니다.

목록 ( 가게. Yield_keys ( ) )

문서의 임베딩을 가져온 후 쿼리와 함께 유사성 검색() 메서드를 호출하여 문서에서 작은 청크를 가져옵니다.

하위 문서 = 벡터스토어. 유사성_검색 ( '저스티스 브레이어' )

print() 메서드를 호출하여 쿼리를 기반으로 이전 코드에서 호출된 청크를 표시합니다.

인쇄 ( 하위 문서 [ 0 ] . page_content )

다음 코드를 사용하여 데이터베이스에 저장된 모든 토큰을 가져오려면 전체 검색기() 함수를 호출하십시오.

검색된 문서 = 리트리버. get_relevant_documents ( '저스티스 브레이어' )

모든 문서를 인쇄하려면 엄청난 시간과 처리 능력이 필요하므로 이전에 검색한 문서의 길이를 가져오면 됩니다.

오직 ( 검색된 문서 [ 0 ] . page_content )

5단계: 더 큰 청크 검색

이 단계에서는 문서 전체를 다루지는 않습니다. 그러나 문서에서 더 큰 다람쥐를 가져와서 더 작은 덩어리를 검색합니다.

parent_splitter = RecursiveCharacterTextSplitter ( 청크_크기 = 2000 )
child_splitter = RecursiveCharacterTextSplitter ( 청크_크기 = 400 )
벡터스토어 = 크로마 ( 컬렉션_이름 = '분할_부모' , embedding_function = OpenAI임베딩 ( ) )
가게 = 인메모리스토어 ( )

''에 저장된 거대한 데이터 풀에서 더 작은 토큰을 가져오도록 검색기를 구성합니다. 벡터스토어 ” 변수:

리트리버 = 상위 문서 검색자 (
벡터스토어 = 벡터스토어 ,
의사 저장소 = 가게 ,
child_splitter = child_splitter ,
parent_splitter = parent_splitter ,
)

검색기를 호출하여 벡터 저장소에서 더 큰 청크를 가져옵니다. 문서 함수 인수의 변수:

리트리버. add_documents ( 문서 )

해당 문서의 길이를 다음에서 확인하세요. 문서 아래 명령을 통해 변수:

오직 ( 목록 ( 가게. Yield_keys ( ) ) )

이전 스크린샷에는 벡터 저장소에 23개의 문서가 저장되어 있음이 표시되어 있으므로 큰 덩어리에서 작은 덩어리를 가져오면 됩니다. 쿼리는 다음을 사용하여 관련 데이터를 가져오는 데 사용됩니다. 유사성_검색() 벡터 저장소에서 데이터를 검색하는 방법:

하위 문서 = 벡터스토어. 유사성_검색 ( '저스티스 브레이어' )

이전 코드에서 언급한 쿼리를 사용하여 더 작은 청크를 인쇄하여 화면에 표시합니다.

인쇄 ( 하위 문서 [ 0 ] . page_content )

이제 쿼리를 함수의 인수로 사용하여 데이터베이스에 저장된 전체 데이터세트에서 검색기를 사용합니다.

검색된 문서 = 리트리버. get_relevant_documents ( '저스티스 브레이어' )

데이터베이스에 생성되고 저장된 전체 청크의 길이를 가져옵니다.

오직 ( 검색된 문서 [ 0 ] . page_content )

모든 청크를 표시할 수는 없지만 다음 코드를 사용하면 인덱스 번호가 0인 첫 번째 청크가 표시됩니다.

인쇄 ( 검색된 문서 [ 0 ] . page_content

이것이 LangChain에서 상위 문서 검색기를 사용하는 과정에 관한 것입니다.

결론

LangChain에서 상위 문서 검색기를 사용하려면 모듈을 설치하고 API 키를 사용하여 OpenAI 환경을 설정하기만 하면 됩니다. 그런 다음 상위 문서 검색기를 사용하기 위해 LangChain에서 필요한 라이브러리를 가져온 다음 모델에 대한 문서를 로드합니다. 사용자는 상위 문서를 전체 문서 또는 큰 청크로 사용할 수 있으며 쿼리를 사용하여 더 작은 청크를 얻을 수 있습니다. 이번 포스팅에서는 LangChain에서 상위 문서 검색기를 사용하는 과정을 자세히 설명했습니다.