무향향수

[Python] LangChain 본문

kt aivle

[Python] LangChain

튼튼한장 2024. 6. 3. 21:11

 

LangChain

LangChain은 대규모 언어 모델(LLM)을 활용하여 체인을 구성한다.

체인을 통해, 복잡한 작업을 자동화하고 쉽게 수행할 수 있도록 돕는 라이브러리.

 

 

LLM with RAG

1. 사용자 질문을 받는다.

2. 준비된 정보 DB에서 답변에 필요한 문서를 검색한다.

3. 필요한 문서를 포함한 프롬프트를 생성한다.

4. LLM이 답변을 생성한다.

 

준비된 정보 DB

Vector DB, 대규모 텍스트 데이터 및 임베딩 벡터를 저장하고 검색하는데 사용

LLM with RAG 절차 다시 살펴보기

1. 사용자 질문을 받는다.

- 임베딩: 벡터로 변환(질문 벡터)

2. 준비된 정보 DB에서 답변에 필요한 문서를 검색한다.

- [질문 벡터]와 DB내 저장된 [문서 벡터]와 유사도 계산

- 가장 유사도가 높은 문서 n개 찾기

3. 필요한 문서를 포함한 프롬프트를 생성한다.

4. LLM이 답변을 생성한다.

Vector DB로 Chroma DB 사용

 

 

RAG

Retrieval Augmented Generation

Chroma DB를 이용하여 검색 시 계산되는 유사도 점수

Cosine Distance 이용

Cosine Distance (A, B) = 1 - Cosine Similarity (A, B)

코사인 거리는 0에 가까울 수록 유사도가 높음

 

코사인 유사도 Cosine Similarity(A,B) 

코사인 유사도는 1에 가까울 수록 유사도가 높다.

수학적 의미: 두 단위 벡터의 내적

자연어 처리에서의 의미: 유사한 벡터 -> 유사한 문맥적 의미

 

Vector DB 구축 절차(Chroma DB)

텍스트 추출: Document Loader

- 다양한 문서(word, pdf, web page 등)로 부터 텍스트 추출하기

텍스트 분할: Text Splitter

- chunk 단위로 분할

- Document 객체로 만들기

텍스트 벡터화: Text Embedding

Vector DB로 저장: Vector Store

 

Chroma DB

SQLite3 기반 Vector DB

DB Browser for SQLite3로 접속 가능

 

Vector DB 생성

임베딩 모델을 지정

Chroma DB 선언

- 경로 지정(persist_directory)

- 임베딩 모델 지정(embedding_function)

 

Memory

대화의 맥락을 이어나가기 위해

사람: 이전 대화를 기억하면서 현재 대화를 진행

챗봇:

이전 대화를 기억

- 이전 질문 답변을 Memory에 저장하고

- 이를 Prompt에 포함

현재 대화 진행

- 다시 질문

 

 

Chain

각 모듈 연결하기

LLM 모델

Retriever

Memory

 

예시코드

LangChain 구현하기

# 1) 위키피디아 데이터 준비
wiki_retriever = WikipediaRetriever(lang='ko')

# 2) 모델 준비
chat = ChatOpenAI(model="gpt-3.5-turbo")

# 3) 연결(chain)
wiki_chat = RetrievalQA.from_llm(llm = chat, retriever = wiki_retriever,
                             return_source_documents=True) # 정보를 가져온 원본 문서를 반환

# 4) 질문 답변
result = wiki_chat("When is the StrayKids Felix's birthday?")
print(result['result']) 
# result는 dict_keys(['query', 'result', 'source_documents'])로 구성되어있다.
# Felix from Stray Kids was born on September 15, 2000.

'kt aivle' 카테고리의 다른 글

[Python] 단변량 분석 - 숫자형  (1) 2024.06.08
[Python] matplotlib 패키지 - 데이터 시각화  (1) 2024.06.06
[Python] API  (0) 2024.06.03
[Python] CRISP-DM  (1) 2024.06.02
[Python] 시계열 데이터 처리  (1) 2024.06.02