IT 세계의 후아
[AI]LangChain 기본 이론&실습(1) 본문
이번에 데이콘의 재정정보 검색 알고리즘 대회https://dacon.io/competitions/official/236295/overview/description에 참여하게 되어
관련 기술인 LangChain과 RAG에 대해 공부하고 실습해보고자 한다
(1년 동안 쉰 백수는 너무나 빠르게 흘러간 AI를 뒤쫓기 바쁘다 흑흑)
※ Langchain
대규모 언어 모델(LLM)과 애플리케이션의 통합을 간소화하는 SDK
API를 노출하여 기본 LLM의 구현 세부 사항을 요약 => 코드를 크게 변경하지 않고도 모델 교체/대체 가능
≫ 언어모델 용도 변경, AI 개발 간소화, 개발자 지원
※ 흐름도
1. 데이터 소스: LLM에 대한 PDF/웹페이지/CSV/관계형 DB 등 외부 소스로부터 데이터를 검색
2. 단어 임베딩
- 텍스트를 임베딩 모델에 전달하기 위해 벡터로 변환되어야 함
- LLM을 기반으로 최적의 임베딩 모델을 선정
3. 벡터 DB
- 생성된 임베딩은 유사성 검색을 위해 벡터 DB에 저장
- 다양한 소스에서 벡터를 쉽게 저장하고 검색할 수 있도록 지원
4. LLM: 오픈AI, Cohere, AI21, Hugging Face에서 지원하는 오픈소스 LLM 지원
※ 구성 요소
- 랭체인 라이브러리
- 랭체인 템플릿: 참조 아키텍처 모음
- 랭서브(LangServe): 랭체인 체인을 REST API로 배포할 수 있게 하는 라이브러리
- 랭스미스(LangSmith): LLM 프레임워크에 구축된 체인을 디버깅/테스트/평가/모니터
※ LLM 체인
- 구성요소: 프롬프트(Prompt, 사용자/시스템에서 제공하는 입력 → LLM에게 특정 작업 수행 요청) + LLM
- 작동방식: 프롬프트 생성 → LLM 처리 → 응답 반환
# 필요한 라이브러리 설치
!pip install langchain
!pip install openai
!pip install langchain-community langchain-core
!pip insall langchain-openai
!pip install tiktoken
# openAI API
import os
os.environ["OPENAI_API_KEY"] = ""
LangChain LLM
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
llm.invoke("서울의 유명 관광지는?")
프롬프트 템플릿 적용
명령어의 템플릿을 만들어 input을 조절할 수 있음
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template("너는 여행객이다. 질문에 대답해라. {input}에서 가장 인기있는 관광지는? 그리고 그곳들의 특징은?")
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
chain = prompt | llm # chain 연결(LCEL)
chain.invoke({"input": "한국"})
문자열 출력 파서
깔끔하게 출력받고 싶다면 문자열 parser를 활용하면 됨!
from langchain_core.output_parsers import StrOutputParser
prompt = ChatPromptTemplate.from_template("너는 여행객이다. 질문에 대답해라. {input}에서 가장 인기있는 관광지는? 그리고 그곳들의 특징은?")
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
output_parser = StrOutputParser()
chain = prompt | llm | output_parser
chain.invoke({"input": "한국"})
Multi-Chain
체인 여러 개를 연결해서 원하는 답을 얻을 수도 있음
chain2의 입력값을 chain1으로 설정
from langchain.chat_models import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
prom1 = ChatPromptTemplate.from_template("단어사전에서 {input}의 뜻은 무엇인가?")
prom2 = ChatPromptTemplate.from_template("{sentence}을 영어로 번역해라.")
llm = ChatOpenAI(model = "gpt-3.5-turbo-0125")
output_parser = StrOutputParser()
chain1 = prom1 | llm | output_parser
chain2 = (
{"sentence": chain1}
| prom2
| llm
| output_parser
)
chain2.invoke({"input": "미래"})
cf)
https://aws.amazon.com/ko/what-is/langchain/
https://www.samsungsds.com/kr/insights/what-is-langchain.html
'Coding > Study' 카테고리의 다른 글
[error]ModuleNotFoundError: No module named 'langchain_community' / 'langchain_openai' (0) | 2024.07.31 |
---|---|
[AI]Langchain-openAI API 받아오기 (0) | 2024.07.30 |
[프로그래머스]LV1_최소 직사각형(이중리스트 최대최소) (1) | 2024.06.19 |
[Etc]LLM, RAG, sLLM, LMM (0) | 2024.06.13 |
[kaggle]Ubiquant Market Prediction (0) | 2024.05.01 |