랭체인 문서를 보면서 튜토리얼을 따라해보았다. GPT store가 있기 때문에 이것이 왜 필요한지 실제 사용해보면서 느낀 점과 좋은 점들을 정리해보았다. 코드 정리는 여기보다는 아래 colab 링크를 걸어두었습니다.
정의
- LLM은 일반적인 상황에서 프롬프트에 응답하는 데 탁월하지만, 훈련한 적이 없는 특정 영역에서는 성능이 떨어진다. 또한 이런 프롬프트를 실제 프로덕션에서 사용하는 것은 다른 이야기다. 사람들이 ChatGPT를 이용하는 과정에서는 틀릴 수도 있다는 생각을 가지지만 실제 특정 앱을 이용할 때는 이를 예상하지 못하기 때문이다.
- LLM을 제품으로 만들기 위해서는 결국 퀄리티를 유지하기 위한 다양한 작업들이 필요합니다. LangChain은 이러한 데이터 응답 애플리케이션을 개발하기 위한 중간 단계를 간소화하여 프롬프트 엔지니어링의 효율성을 높입니다. 챗봇, 질문 대답, 콘텐츠 생성, 요약기 등 언어 모델로 구동되는 다양한 애플리케이션을 보다 쉽게 개발할 수 있도록 설계되었습니다.
- 현재로서는 파이썬과 자바스크립트 지원합니다.
장점
- 다양한 모델 연동을 코드 한줄로 이용해서 불러올 수 있다.
- 이로 인해서 각 모델에게 질문을 던지고 그 중에 좋은 것을 합하는 것도 가능하다.
- 이로 인해서 각 모델에게 질문을 던지고 그 중에 좋은 것을 합하는 것도 가능하다.
- LLM의 머리를 활용해 내부 지식(Private)을 기반으로 답을 하도록 할 수 있다.
- 사내 Q&A 봇을 만들고 싶은데 이걸 ChatGPT GPT Store로 만들기가 왠지 껄끄럽다.
- 사내 Q&A 봇을 만들고 싶은데 이걸 ChatGPT GPT Store로 만들기가 왠지 껄끄럽다.
- LLM의 특성상 개발할 때 고려해야하는 요소들을 여러 라이브러리로 쉽게 제공해준다.
- 길게 텍스트 던져주는 것들을 \n 기준으로 잘라서 보여주는 것이나 우리가 chatGPT에 질문할 때 물어보는 “사전 조건”들을 미리 템플릿화해서 넣은 채로 보내줄 수 있다.
- 프롬프트를 넣을 때 일일히 유저가 나는 이런 사람이고 이런게 궁금해 이제 이거 해줄래? 라는 메세지를 입력해야했다면 매우 불편할듯. 일반적인 어플리케이션은 애초에 도메인이나 컨텍스트가 다 정해진채로 들어옴. 쿠팡에 들어오는 이유는? 물건 사러. 그래서 LLM을 활용해서 제품을 만들 경우에도 이런 컨텍스트를 다 심어줘야한다.
- 그래서 application 관점에서 LLM이 동작하도록 만들기 위해 여러 과정들을 도와주는데 있어서 랭체인이 존재하는 듯
- 프롬프트를 넣을 때 일일히 유저가 나는 이런 사람이고 이런게 궁금해 이제 이거 해줄래? 라는 메세지를 입력해야했다면 매우 불편할듯. 일반적인 어플리케이션은 애초에 도메인이나 컨텍스트가 다 정해진채로 들어옴. 쿠팡에 들어오는 이유는? 물건 사러. 그래서 LLM을 활용해서 제품을 만들 경우에도 이런 컨텍스트를 다 심어줘야한다.
- 길게 텍스트 던져주는 것들을 \n 기준으로 잘라서 보여주는 것이나 우리가 chatGPT에 질문할 때 물어보는 “사전 조건”들을 미리 템플릿화해서 넣은 채로 보내줄 수 있다.
개념
📎 소프트웨어는 일반적으로 아래와 같은 요소로 이루어짐
- 서버 : 기본적으로 데이터를 가져와서 이를 로직에 맞게 Task를 수행하는 역할
- DB : Table 형태로 되어 있어서 index, key 매핑으로 원하는 정보를 가져오는 데이터 그릇
- 프론트 : 유저 단에서 보이는 화면
- LLM은 우리가 요청할 Task를 시행할 주체.(서버 로직을 의미)
- VectorStore는 우리가 추가로 탐색할 정보의 주체.(DB를 의미)
- Retriever는 Store에서 가져온 정보를 찾고 이를 기반으로 정답을 낼 수 있도록 도와주는 요소
- RAG는 사실 위의 요소를 모두 총칭하는 역할
- Chain은 요청한 질문에 대해서 답을 주기 위해 필요한 여러 프로세스를 묶어주는 요소
기능
위에서 이야기한 것 외에도 다양한 기능들이 존재한다.
- LangSmith : 디버깅, 테스트 등과 관련된 기능
- LangServe : Rest api 형태로 바꿔주는 기능(서빙 기능이고 fastapi와 연동되어 있음)
사용법
코드는 이 링크를 활용해서 실행하시면 됩니다. 다만 api key는 별도로 크레딧 구매하셔서 넣으셔야합니다.
https://colab.research.google.com/drive/1YVZ3y1t3Tgwfm3dZxha4uPilm8RXitvp?usp=sharing
- 설치
- pip install langchain 만 하면 바로 불러들일 수 있다.
- 간단한 기법
- LLM/Chat Model :
- LLM : string 인풋, 스트링 아웃풋 (Deprecated된 기능)
- Chat Model : 메세지 리스트가 들어가서 메세지 리스트가 나옴
- Prompt Template
- 프롬프트를 날릴 때 쉽게 할 수 있도록 템플릿으로 제공
- 예를 들어, 프로그래밍 관련 챗봇이라면 “너는 프로그래밍 전문가야.”를 붙여서 보낼 경우 더 정확한 답을 알려준다.(혹은 한국어로 얘기해줘)
- 프롬프트를 날릴 때 쉽게 할 수 있도록 템플릿으로 제공
- Output Parser
- LLM으로 받은 반응을 포맷해서 어플리케이션에 리턴할 수 있도록 전달하는 역할
- retriever의 역할
- 검색기의 역할로 앞에서 얘기한 내부 DB에서 가져오도록 하기 위한 검색기 역할을 하는 요소이다.
- Memory
- 앱을 이용하는 동안 유저의 맥락을 모두 기억하고 있어야 하는데 이를 기억하게 도와주는 기능
- VectorDB
- 컴퓨터는 “자연어”와 “자연어”의 관계를 이해하지 못한다. 또한 동음이의어 같은 경우에 이를 모델이 판단하기가 어렵다.
- 그렇다면 모델에게 의도적으로 관련된 정보를 찾을 수 있도록 지정해줘야하며 이를 가능하게 우리만의 정보를 참고할 수 있도록 한다. 보통의 어플리케이션에서는 이를 DB에서 가져와야하지만 앞에 말한 것처럼 LLM 시대에서 데이터는 “자연어”이다. 이를 DB화하기 어렵기 때문에 자연어들을 임베딩시키고 이 임베딩 기준으로 유사한 애들만 가져올 수 있도록 접근하는게 벡터DB이다.
- 임베딩이 결국 숫자 벡터로 만드는 것이기 때문에 이름을 VectorDB로 지음
- LLM/Chat Model :
- 사용후기
- ChatGPT Store가 최근에 생겨났는데 사실 랭체인에서 기본적으로 대응하고 있는 기능에 대해서는 모두 지원해주고 있어서 이게 왜 필요할까? 하는 생각이 조금 들었음.
- 하지만 만일 우리만의 비즈니스 로직이 이미 있는 제품에 LLM을 붙인다고 생각해보면 GPT store는 챗봇만 가능하기 때문에 우리를 대신해 어떤 일이나 로직을 대신 처리해줄 수는 없다.
- 결국에는 기존 로직 + LLM을 조합하기 위해서는 이렇게 랭체인이라는 프로그래밍 개발 도구들이 지원되어야 하고 그 관점에서 의미가 있는 것이 아닐까 하는 생각이 들었다.
- ChatGPT Store가 최근에 생겨났는데 사실 랭체인에서 기본적으로 대응하고 있는 기능에 대해서는 모두 지원해주고 있어서 이게 왜 필요할까? 하는 생각이 조금 들었음.
새롭게 알게 된 정보
- faiss : 페이스북에서 개발한 벡터간의 유사성 검색을 빠르게 할 수 있도록 도와주는 도구. 단순히 AI 모델 만드는 것만 기술이 발전한게 아니라 같은 차원에 있는 여러 벡터들간의 관계를 연구하는 분야가 있다는 것을 깨달아서 좋았음
- Langflow : 랭체인을 UI tool로 붙여서 만들 수 있도록 해주는 일종의 노코드 툴
튜토리얼 진행하면서 마주한 에러
- error 404 davinci 003 is deprecated : Tutorial에 종종 model로 ChatOpenAI()가 아니라 OpenAI()로 선언해서 채팅 형식이 아니라 결과값만 바로 받을 수 있는 코드가 있었는데 확인해보니 이건 Deprecated 된것으로 보인다. 그래서 모든 케이스에 대해서 ChatOpenAI를 사용해야한다.
- 쿼타 Limit : 사용량이 리밋이 걸리는데 확인해보니 나는 Chatgpt plus를 사용하고 있지만 api는 별도 요금제로 크레딧을 구매해야한다. 튜토리얼에 있는 부분을 사용하는데 약 8달러 정도 쓰였다. 넷플보다 싸다.. 공부 차원에서 합시다..
추가 링크
- 랭체인 기본 설명 : https://velog.io/@classbinu/크래프톤-정글-3기-123일-TIL
- 랭서브 관련 설명 : https://generative-ai.tistory.com/m/45
- faiss 관련 글 : https://dajeblog.co.kr/16-faiss에-대한-모든-것/
'Machine Learning > 공부 기록' 카테고리의 다른 글
[허깅페이스] Diffusers Tutorial - 모델 사용하기 (0) | 2023.12.30 |
---|---|
A/B 테스트에서의 양측검정 vs 단측검정 (0) | 2023.10.12 |
시각적 이해를 위한 머신러닝 5~7강 (1) | 2023.10.02 |
시각적 이해를 위한 머신러닝 3, 4강 (0) | 2023.09.28 |
시각적 이해를 위한 머신러닝 1~2강 (Machine learning for Visual Understanding) (0) | 2023.09.28 |