Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
Joinc와 함께하는 LLM - LangChain을 이용한 RAG
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2024-06-08
2024-06-08
729
![LangChain](https://docs.google.com/drawings/d/e/2PACX-1vTtzUuT4PuL2OwOLwOOMVXpw0MaTBWkYucmnNZKXWhegJMr9D6-lHt0ppYH--a5xAtmcDV8RCPcsiR3/pub?w=1340&h=364) ### 소개 LangChain은 자연어 처리(NLP)와 관련된 애플리케이션을 개발하기 위한 파이썬 기반의 프레임워크다. 특히 GPT-3, GPT-4등의 언어 모델을 활용하여 다양한 작업을 수행하는데 중점을 둔다. LanChain는 언어 모델들을 효과적으로 통합할 수 있는 도구와 라이브러리들을 제공한다. ### 왜 LangChain을 사용해야 하는가 ChatGPT는 일반적인 범용 지식을 가지고 있다는 것을 알고 있다. 인터넷에 공개된 데이터들이라면 거의 무엇이든 물어볼 수 있으며 상당히 좋은 답변을 얻을 수 있다. 하지만 기업이나 개인이 가지고 있는 독점적인 정보들(파일, 데이터베이스, 특허, 메뉴얼, 고객상담 문서, 의료데이터)을 이용해서 전문적인 정보를 얻고 싶다고 가정해보자. 이러한 정보는 ChatGPT가 제공해 줄 수 없기 때문에 "연동"이 필요하다. LangChain을 사용하면 ChatGPT와 같은 LLM을 특정 데이터에 연결 할 수 있다. ![LangChain 사례](https://docs.google.com/drawings/d/e/2PACX-1vSXR7oGTOBcezXgZNvdcVDMcNRV09hAHadPLTpBtjsjQw4I514jbWsqQ7tF_XNJ3AW7vC9JMuNAvvM0/pub?w=880&h=467) 예를 들어서 LinkedIn의 개인 프로필에 접근해서 프로필을 요약, 분류해서 레포트를 제공하는 서비스를 만든다고 가정해보자. ChatGPT는 요약과 분류는 매우 잘하지만, LinkedIn에 있는 개인정보는 가지고 있지 않다. LanChain을 이용해서 LinkedIn에 있는 개인 프로필을 읽어서 ChatGPT에 제공하면, 개인 프로필을 제공하는 서비스를 만들 수 있을 것이다. ### LangChain 핵심 모듈 LangChain의 핵심 모듈들을 살펴보자. ![LangChain 핵심 컴포넌트](https://docs.google.com/drawings/d/e/2PACX-1vTV12aTQWk_Ge9XnzgwwMnYbEhzgwpOFMiUmV8_979TI5dwEo6YjOROZHGgn87iSQRFml-Bezp52lfw/pub?w=716&h=339) 🎯 **Components** * LLM Wrapper: LLM/채팅 모델에 대한 연결을 대신 처리한다. 다양한 LLM과 편하게 연결할 수 있다. * Prompt Templates: LLM은 자연어 형태로 응답을 만드는데, 많은 경우 정형화된 보고서 형태로 응답을 만들어야 할 것이다. Python의 'f'를 이용해서 포맷하는 것보다 더 쉽고 효율적으로 템플릿을 만들 수 있다. * 색인: 데이터에서 관련 정보를 추출 할 수 있다. 🎯 **Chains** LangChain에서 **Chain**이라는 단어를 사용하는 이유는 여러 개의 처리 단계를 체인처럼 연결하여서 복잡한 작업을 수행 할 수 있도록 설계했기 때문이다. 복잡하게 생각 할 것 없다. 사람의 경우에도 어떤 일을 처리 할 때, 1. 문서를 수집하고 2. 문서를 분류하고 3. 문서 작성을 요청하고 4. 전달된 문서를 리뷰 하는 방식으로 처리한다. 일종의 Chain을 만드는 것인데, 왜냐하면 혼자서 모든 것을 처리 할 수 없기 때문이다. LLM도 모든 것을 처리 할 수는 없다. LangChain을 이용하여 Chain을 만들면 작업 파이프라인을 만들 수 있다. 🎯 **Agent** Chain으로 작업을 하려면, 이를 조율해야 할 것이다. LangChain의 Agent는 정보검색, 데이터베이스 조회, 계산등을 수행해서 작업 파이프라인이 효과적으로 작동 할 수 있도록 해주는 소프트웨어다. 일종의 봇(bot)이라고 보면 된다. ### LangChat 주요 사용 사례 분석 ![LangChain 사용사례](https://docs.google.com/drawings/d/e/2PACX-1vQL9PmtiI_bvmjwfjmvmcrMSt80IkEoZaP_T-rR2uqEvo5y_X34twilqBjERoY4DKyZ5igGWpx6RlBM/pub?w=756&h=581) ##### 문서에 대한 QA 메뉴얼 만들기 ![문서에 대한 QA](https://docs.google.com/drawings/d/e/2PACX-1vRgFTLRHLpQUmNvwk4OUPRQzBslDNBGRZ-J18tHCAFFL27xvvrEe1pObTzrwMR7OLW0er-usq2RriU6/pub?w=850&h=277) 현재 토큰 제한이 4096개인 ChatGPT API를 사용하고 있다고 가정해보자. 그리고 200페이지 분량의 문서를 이용해서 QA 메뉴얼을 만들려고 한다. 200페이지 모든 문서의 내용을 LLM 텍스트로 보내야 할까 ? 텍스트 청크와 유사성 검색은 벡터 스토어에 맡기고, 실제 검색된 텍스트만 LLM으로 전송하면 토큰을 줄여 비용을 절감 할 수 있을 것이다. 이러한 QA 메뉴얼 만들기는 아래와 같이 수행 할 수 있을 것이다. 1. 이미지, PDF, S3, Text 등의 모든 종류의 데이터를 LangChain의 문서 객체에 전달한다. LangChain이 지원하는 문서 객체 종류는 [LangChain Integrations](https://python.langchain.com/v0.2/docs/integrations/platforms/) 에서 확인 할 수 있다. 2. 프롬프트 입력시 컨텍스트 제한에 걸리지 않도록 문서를 청크 단위로 분할한다. 3. 청크 데이터는 **임베딩**이라고 부르는 부동 소수점 벡터로 변환된 후 **벡터 데이터베이스**에 저장된다. #### 챗봇 LLM 할 때 가장 먼저 떠오르는 사례는 **챗봇** 일 것이다. 챗봇을 널리 사용하는 이유는 인간의 언어를 기반으로 장시간 대화가 가능하고, 대화를 통해서 원하는 정보에 접근 할 수 있다는 점 때문이다. 챗봇의 일반적인 작동 프로세스는 아래와 같다. ![챗봇](https://docs.google.com/drawings/d/e/2PACX-1vTqSa1VVLMUCQ4aDexDnFFVPLbPPVoCnUa5KA5e9gCqP_-kgHcuhG8T03cKVmgPMsDouuWWWj8I9Afu/pub?w=815&h=260) 챗봇 체인은 크게 3단계가 포함된다. 1. 채팅 로그와 프롬프트를 사용하여 독립적 질문을 만든다. 2. 독립형 질문이 검색엔진에 전달되고 관련 문서만 반환된다. 3. 해당 문서와 독립형 질문으로 프롬프트를 강화하고 응답을 받는다. 이는 **RAG(Retriveal Augmented Generation)** 을 통해서 수행된다. ##### Agent 챗봇을 만들어서 채팅을 할 수 있다면 에이전트를 만들 필요가 있을까 ? 추론을 하기 위해서는 외부 데이터 소스로 부터 데이터를 수집해서 특정한 연산을 해야 하는데, Agent를 통해서 이러한 일을 할 수 있기 때문이다. ##### API와의 상호작용 LLM이 외부 API와 상호 작용하기를 원한다고 가정해보자. 이는 LLM이 활용할 컨텍스트를 확장하는데 매우 유용하다. 더 중요한 것은 자연어를 사용해서 API와 상호작용 할 수 있다는 점이다. ![Langchain과 OpenAPI의 통합](https://docs.google.com/drawings/d/e/2PACX-1vTvfl7cw4083pyaY8WENtbG9AGuFkqW1lHG-5Ql08Vpv9tda4SogOPya8PHjFdAC12sJiKuRIzkrVnZ/pub?w=878&h=128) ##### 태깅 태그는 문서에 레이블을 지정하는 것을 의미한다. 어떤 문서가 있다고 가정해보자. 여기에 아래와 같이 태깅을 할 수 있다. * 감정 * 언어 * 스타일(공식, 비공식) * 다루는 주제 * 정치적 성향 태깅을 이용하면 고객 상담 기록을 통해서 고객의 성향 등을 잘 분석할 수 있을 것이다. ![Tagging](https://python.langchain.com/v0.1/assets/images/tagging-93990e95451d92b715c2b47066384224.png) 입력은 스페인어로 번역하면 아래와 같은 뜻이다. > 알고 있는 내용 중에 정말 놀라운 것이 있습니다! 저는 정말 좋은 친구들이라고 생각해요. LangChain을 이용해서 스키마를 만들고 LLM에 Input 과 함께 전달하면, 입력을 분석해서 "감정" 과 "언어"를 알아낼 수 있다. ##### 요약 PDF, Notion, Confluence, 고객 상담기록이 있고 이를 요약하고 싶다고 가정해보자. LLM은 텍스트를 이해하고 합성하는데 능숙하기 때문에 훌륭한 도구로 사용 할 수 있다. ![Langchain을 이용한 요약](https://docs.google.com/drawings/d/e/2PACX-1vRwoPR_dA12B3vwRWbNVzmohOLLC628saTliNcF5en_6DQgvbbiB-Ef1QAdjn36okBk9M0KdD8tbjvp/pub?w=1510&h=704) #### 자연어를 이용한 SQL 기업 데이터는 SQL에 저장되는 경우가 많다. LLM을 이용하면 자연어를 사용하여 SQL 데이터베이스와 상호작용 할 수 있다. LangChain은 자연어 프롬프트를 기반으로 SQL 쿼리를 구축하고 실행 할 수 있는 SQL 체인과 에이전트를 제공한다. ### 정리 LangChain은 2022년 10월 Harrison Chase에 의해서 오픈 소스 프레임워크로 출시되었으며, GenAI 애플리케이션 생성을 위한 기본 프레임워크로 빠르게 채택되었다. GitHub에는 60,000 이상의 선택을 받았는데, 경쟁자인 LlamaIndex는 물론이고 AngularJs와 같은 기존 오픈 소스 프레임워크보다 훨씬 많은 인기를 누리고 있다. GenAI, LLM을 하려고 한다면 반드시 학습해야 하는 프레임워크가 됐다. ![LangChain Star History](https://docs.google.com/drawings/d/e/2PACX-1vQVXQeWuvaH62pwgkCFK_469fWZ9dfncnW_iu3LMa75dhPoW_5M-ZNzmKlEutkhMyjO5WFpYD_0dOAM/pub?w=748&h=514) 오늘 문서에서는 LangChain의 특징과 LangChain으로 할 수 있는 것들에 대해서 알아봤는데, 다음에는 Python과 LangChain으로 각 사례들을 직접 구현하면서, LangChain을 활용해보도록 하겠다.
Recent Posts
Vertex Gemini 기반 AI 에이전트 개발 03. Vertex AI Gemini 둘러보기
Vertex Gemini 기반 AI 에이전트 개발 02. 생성 AI에 대해서
Vertex Gemini 기반 AI 에이전트 개발 01. 소개
Vertex Gemini 기반 AI 에이전트 개발-소개
생성 AI 모델 Flux.1 설치 및 사용
GPT를 이용한 Reranker 테스트
5분만에 만들어보는 Streamlit 챗봇
Let's encrypt로 SSL 인증서 관리하기
Upscayl을 이용한 이미지 업스케일링
스테이블 디퓨전 설치 및 사용해보기
Archive Posts
Tags
AI
Joinc와 함께하는 LLM
LangChain
LLM
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags