일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ai 전문가 과정
- Java
- pandas
- 알고리즘
- AI학습
- 데이터
- 파이썬
- Ai
- 모각코
- 인공지능
- dictionary
- 클래스
- 코딩테스트
- AI 윤리
- list
- 코딩
- AIVLE
- Python
- 데이터과학
- github
- KT AIVLE
- git
- 정처기
- LG Aimers
- 정처기 실기
- KT
- 데이터분석
- 백준
- numpy
- 자바
- Today
- Total
무향향수
[Python] LangChain 본문
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 |