베하 ~!
문땅훈과 루피입니다.
오늘은 'Langchain'에 대해 알아보도록 하겠습니다.
1. LangChain
- 언어모델을 기반으로 한 애플리케이션을 개발하기 위한 프레임워크
- API를 통해 언어 모델을 호출하는 것 뿐만 아니라, 외부 데이터를 인식하거나 타 시스템과의 상호 작용하는 애플리케이션을 개발하고자 하는 요구 사항에서 시작된 오픈소스
- 데이터 인식 : 언어 모델을 다른 데이터 소스에 연결
- 에이전트화(Be agentic) : 언어 모델이 환경과 상호 작용하도록 허용
2. 특징
(1) 언어 모델 호출 API 제공
- LangChain은 언어 모델을 호출하는 API를 제공하여 더욱 강력하고 다양한 애플리케이션을 구현할 수 있도록 함
- 또한, 데이터 인식 및 에이전트화와 같은 기능도 제공하여 언어 모델과 다른 데이터 소스를 연결하고 환경과 상호작용할 수 있게 함
(2) 필수적인 컴포넌트에 대한 추상화 모듈과 구현체 제공
- Langchain은 언어 모델과 함께 작동하는 데 필요한 컴포넌트에 대한 모듈식 추상화를 제공함
- Langchain은 이러한 모든 추상화에 대한 구현 모듬도 제공
- 컴포넌트는 Langchain 프레임워크의 사용 여부에 관계없이 쉽게 사용할 수 있도록 설계됨
(3) 사용 사례별 체인 제공
- 체인은 특정 사용 사례를 가장 잘 달성하기 위해 이러한 컴포넌트를 특정 방식으로 조합할 수 있음
- 사용자 정의 즉, 커스터마이징이 가능하도록 설계됨
3. LangChain의 주요 모둘
3-1. Model I/O
랭체인은 모든 언어 모델과 인터페이스 할 수 있도록 빌딩 블록 제공
- Prompt : 모델 입력을 템플릿화, 동적으로 선택 및 관리
- Language models (LLM): 공통 인터페이스를 통해 언어 모델 호출
- LLM은 Langchain의 핵심 구성 요소
+) LLM이란?
대규모 언어 모델(Large Language Model) 대규모 언어 모델(LLM)은 딥러닝 기술과 방대한 데이터 셋을 사용하여 새로운 콘텐츠를 이해, 요약, 생성 및 예측하는 일종의 인공 지능(AI) 알고리즘
- 자체 LLM을 제공하지 않지만, 오히려 다양한 LLM과 상호 작용하기 위한 표준 인터페이스를 제공
- +) LLM 제공업체 (OpenAI, Cohere, Hugging Face 등)
- Output Parser : 모델 출력에서 정보 추출
3-2. Retrieval
- 많은 LLM 애플리케이션에는 모델 교육 세트의 일부가 아닌 사용자별 데이터가 필요함
- 이를 달성하는 기본 방법은 검색 증강 생성(RAG) 이용 ⇒ 이 과정에서 외부 데이터를 검색한 후 생성 단계를 수행할 때 LLM으로 전달
- Langchain은 단순한 것부터 복잡한 것까지 RAG 애플리케이션을 위한 모든 빌딩 블록을 제공함
(1) Load
- 다양한 소스에서 문서 로드 가능
- Langchain은 100개 이상 다양한 문서 로더를 제공할 뿐만 아니라 같은 업계의 다른 주요 제공업체와의 통합도 제공
- private s3 buckets, public websites에서 모든 유형의 문서(PDF, HTML, 코드)를 로드 가능
(2) 문서 변환기
- 검색의 핵심 부분은 문서의 관련 부분만 가져오는 것 ⇒ 검색할 문서를 잘 준비하기 위한 여러 변환 단계가 포함됨
- 여기서 가장 중요한 작업이 큰 문서를 작은 덩어리로 분할(청크화) 작업 하는 것 ! (뒤에 내용 있습니다.)
- 이를 수행하기 위해 Langchain은 여러 가지 알고리즘과 특정 문서 유형(코드, 마크다운 등)에 최적화된 논리 제공함
(3) 텍스트 임베딩 모델
- 문서에 대한 임베딩 만들기 (뒤에 내용 있습니다.)
(4) 벡터 저장소
- 임베딩의 효율적인 저장 및 검색을 지원하기 위하여 벡터 DB 사용
(4) Retriver
- 데이터가 DB에 있으면 계속 검색해야 함
- Langchain은 다양한 검색 알고리즘을 지원
3-3. Chains
- 호출 시퀀스 구성
- 간단한 애플리케이션은 LLM 단독으로 사용할 수 있지만, 더 복잡한 애플리케이션의 경우 서로 또 다른 기능을 수행하는 컴포넌트와 함께 LLM을 연결해야 함
- 이때, Langchain의 이름과 같이 체인처럼 연결할 수 있는 인터페이스를 제공하고, 컴포넌트에 대한 호출 시퀀스로 정의함
4. LangChain 주요 작업
- 질문을 받게 되면 바로 LLM에게 질문 하는 것이 아니라, 벡터 저장소에서 질문과 가장 흡사한 청크를 모아서 document 묶음을 만들고, 질문과 document 묶음을 LLM에 함께 보내고 답변 얻게 되는 방식
(1) 청크 작업 (용량이 큰 문서를 잘게 부수는 작업)
(EX) 문장을 1,000개씩 나눠서 각각의 document로 독립적인 문서로 보관
(2) 임베딩 처리
- 각각 청크된 문서들은 임베딩 처리 하게됨
- 벡터에 저장될 수 있는 벡터 값으로 변경됨
- 벡터 DB에 저장이 되면, 시멘틱 검색 가능
- 외부 벡터 DB에 저장하는 이유? - 시맨틱 검색이 가능하기 때문에
- 로컬에서만 아니 외부에서도 쿼리 검색이 가능
+) 참고 : OpenAI의 API 비용 및 질문
- 추후 Langchain을 구성하기 위해 OpenAI를 사용하게 되는데 요청된 토큰 수에 따라 비용이 발생하며, 즉 유료로 토큰을 사용해야 합니다
그럼 다음 시간에 봐요 ~
베빠 ~ 😀
[참고 링크]
https://python.langchain.com/docs/get_started/introduction.html
'Database' 카테고리의 다른 글
문서 검색 챗봇 만들기 (0) | 2023.09.13 |
---|---|
[Airflow] Celery Executer (0) | 2023.09.04 |
SQL과 NoSQL 데이터베이스 (0) | 2023.08.18 |
Airflow : API를 활용한 Image 다운로드 (0) | 2023.08.17 |
Airflow를 통한 Dataproc 연동 (0) | 2023.08.16 |
댓글