컴퓨터 비전만 파던 내가 LangChain 공부를 시작한 이유
포항공대 인공지능연구원에서 인턴으로 일하고 있는 지금
제가 맡고 있는 업무가 크게 2가지가 있습니다.
1) 딥러닝 모델 기반 족적(shoeprint) 이미지 검색 시스템 구축
2) GPT와 생성AI의 기업 활용 방안 조사
그 중 제가 주력하고 있는 공부는 1번, 컴퓨터 비전 분야이었고
솔직히 말하자면 NLP에는 그닥 큰 관심이 없었던 게 사실입니다.
그런데 저번주 목요일 제가 오후 반차를 쓴 사이 저도 모르게 2번 업무가 또다시 분배되었습니다.
주제는 바로...


요즘 아주 핫하다는 LangChain이었습니다.
안 그래도 chatGPT의 등장과 함께 어느덧 대세가 되어버린 것 같은 LLM 트렌드를
어느 정도는 따라잡아야겠다는 생각에 오히려 반가웠습니다.
어차피 이건 개발자의 숙명이려니 하고 생각합니다.
새로운 기술이 등장할 때마다 트렌드에 뒤처치지 않기 위해 공부해야 하는 인생,,, 허허
LangChain이라는 미로에 빠져버렸다
그런데 처음엔 '뭐야? 재밌겠는걸?' 하는 가벼운 마음으로 시작했던 LangChain 공부는
점점 파고들수록 어려웠습니다.
Chain이나 agent, retrieval augmented generation(후에 자세히 설명합니다)과 같은 생소한 용어가 마구 등장했고
개발된 지 1년밖에 안된 프레임워크 치고는 생각보다 기능이 너무 다양했습니다.
그래서 예상보다 공부 시간이 훨씬 길어지자(내 주말 어디갔어!)
이건 아까워서라도 꼭 글로 남겨야겠다는 다짐을 했습니다.
LangChain에 거는 개인적인 기대
LangChain은 지금 한창 성장하고 있는 오픈소스 프레임워크입니다.
그런데 지금 트렌드를 보면 LLM을 향한 인기가 쉽게 사그러들지 않을 것으로 보입니다.
지금까지 GPT-4, Bard, Llama 등과 같은 빅테크 주도의 LLM이 시장을 선도했다면
앞으로는 스타트업이나 개인 개발자들도 맞춤형 LLM을 구축하고 커스터마이징하는 시대가 곧 오지 않을까요?
그래서 저는 왠지 LangChain이 향후 Pandas나 PyTorch처럼 대중적인 프레임워크가 될 것 같다는 기대를 하고 있습니다.
그럼 지금 열심히 공부해서 LangChain 커뮤니티의 contributor로 업적을 남기는 것도
도전해 볼만한 일이라고 생각합니다.

LangChain이란?
LangChain을 한마디로 정의하자면 'LLM 애플리케이션을 쉽고 편리하게 개발하기 위해 만들어진 프레임워크'라고 할 수 있습니다.
2022년 10월 Harrison Chase라는 개발자의 주도로 시작한 오픈소스 프로젝트이었지만
이후 많은 개발자들이 contributor로 참여하면서 아주 빠르게 발전(어제인 12월 9일에도 업데이트됐네요)하고 있습니다.
LangChain 입문을 위한 참고 자료
1. Github 공식 repository
아까도 말했다시피 LangChain은 오픈소스 프레임워크입니다.
공식 깃허브 리포로 들어가시면 어떤 기능이 추가되고 어떤 이슈가 발생했는지 투명하게 확인할 수 있습니다.
README 파일에 LangChain에 대한 간단한 소개와 모듈 설치 방법 등이 자세히 나와있지만
더 자세하게 익히시려면 아래 공식 문서부터 시작하는 걸 추천합니다.
https://github.com/langchain-ai/langchain
GitHub - langchain-ai/langchain: ⚡ Building applications with LLMs through composability ⚡
⚡ Building applications with LLMs through composability ⚡ - GitHub - langchain-ai/langchain: ⚡ Building applications with LLMs through composability ⚡
github.com
2. 공식 문서(docs)
다음은 LangChain 공식 문서와 튜토리얼입니다.
https://python.langchain.com/docs/get_started/introduction
Introduction | 🦜️🔗 Langchain
LangChain is a framework for developing applications powered by language models. It enables applications that:
python.langchain.com
생각보다 공식 문서가 어려울 수 있습니다. (뭐든지 1차 자료를 정독하는 게 어려운 법)
저는 LLM 개발 경험이 전무했기 때문에 docs 내용을 완전히 이해하는 데 시간이 꽤 오래 걸렸던 것 같습니다.
공식 문서에 대한 후기는 다음과 같습니다.
- 싹 다 영어!
- 각 구성 요소별로 자세히 설명되어 있고 따라할 수 있는 예시 코드들이 나와있음
- 단, LLM 개발 배경 지식이 없다면 생소한 용어와 변수명이 계속 등장해 이해하기 쉽지 않음
처음엔 호기롭게 docs를 정독하면서 개념을 완벽히 이해하겠다!는 다짐으로 시작했지만
무참히 깨지면서 결국 이해가 더 쉬운 강의 영상을 찾게 되었습니다.
3. DeepLearning.AI 온라인 강의
https://learn.deeplearning.ai/langchain/lesson/1/introduction
바로 DeepLearning.AI에서 제공하는 <LangChain for LLM Application Development> 강의 영상입니다.
이번에도 앤드류 응 교수님이 구원투수로 나오셨네요(참고로 앤드류 응 교수님은 DeepLearning.AI의 창업자이기도 합니다).
게다가 LangChain의 개발자인 Harrison Chase가 직접 강의를 진행합니다.
심지어 무료로 공개되어 있으니 이건 꼭 들어야겠다 생각하고 바로 수강 신청했습니다.
강의 후기는 다음과 같습니다.
- 마찬가지로 모두 영어로 진행
- 여전히 어렵지만 docs보다는 이해하기 훨씬 쉬움
- 따라해볼 수 있는 예제 코드가 강의 영상과 함께 제공됨
여전히 100% 영어 강의인데다 모르는 부분도 자주 등장했지만
개념을 처음 접하기에는 강의 영상이 가장 편했습니다.
저는 입문자에게 이 강의 영상을 가장 먼저 보는 걸 추천드립니다.
그 다음 더 자세한 내용을 알고 싶다면 공식 문서에 키워드를 검색해서 찾아보는 게 좋은 접근인 것 같습니다.
4. 그 외: Harrison Chase의 키노트
아래는 Harrison Chase가 DataBricks의 초청을 받아 LangChain에 대해 설명하는 영상입니다.
https://www.youtube.com/watch?v=xV2g8BjzaRU
4:06 까지 LangChain에 대한 간략한 설명을 하고,
4:06 이후로는 LangChain의 각 요소에 대한 심화 설명을 진행합니다.
즉 기존 LLM 개발의 한계점과 해결책으로서의 각 요소가 등장한 이유를 설명하고 있으니 보충 자료로 추천합니다.
실습에 필요한 가상환경 및 필요 모듈 설치하기
먼저 LangChain 실습을 위해 아나콘다 가상환경을 하나 만들고 필요한 모듈을 안에 다운로드받겠습니다.
저는 langchain이라는 이름으로 가상환경을 만들었습니다.
이때, 가능하면 Python=3.9 버전으로 설치하는 걸 추천드립니다.
3.10이나 3.11 버전은 시도해보지 않았지만 3.12 버전으로 설치한 가상환경으로 진행했을 때 VectorstoreIndexCreator().from_loaders([loader]) 부분에서 'builtin_function_or_method' object has no attribute '__func__' 가 없다고 하는 에러가 발생했습니다.
VectorstoreIndexCreator().from_loaders([loader])
# 에러:
# 'builtin_function_or_method' object has no attribute '__func__'
자세한 내막은 모르겠지만 아마 파이썬 최신 버전이 LangChain의 일부 built-in 함수를 지원하지 않는 것으로 보입니다. (참고: https://github.com/langchain-ai/langchain/issues/3339)
파이썬 버전을 3.9로 고정해서 재설치했더니 위 에러가 더 이상 나오지 않았습니다.
# 최신버전인 python=3.12로 실행할 경우 LangChain의 일부 함수에서 에러가 발생
conda create -n langchain python=3.9
# 가상환경을 모두 만들었다면 활성화
conda actviate langchain
# 필요한 모듈을 설치
pip install langchain openai docarray tiktoken
# OpenAI API를 환경변수로 가져오기 위한 모듈
pip install python-dotenv
말썽투성이었던 OpenAI API 사용법
deeplearning.AI 강의에선 실습에서 LLM 모델을 활용하기 위해 OpenAI API를 사용하고 있습니다.
OpenAI API를 어떻게 등록하고 사용하는지는 강의에서 설명하고 있지 않기 때문에
여기서 잠깐 소개하려고 합니다.
방법은 간단하지만 예상치 못한 장애물을 만나 꽤 애를 먹었습니다.
1. OpenAI API Key 등록하기
API를 사용하려면 인증 키가 필요합니다.
아래 링크로 들어가 OpenAI의 API Key를 새로 등록합니다: https://platform.openai.com/api-keys
이때, API 키는 생성할 때만 접근할 수 있으니
반드시 생성 창을 닫기 전 API 키를 안전한 곳에 복사-붙여넣기해서 저장해두세요.
그런데 API Key를 등록했다고 해서 끝난 게 아닙니다!
API를 사용하려면 OpenAI API를 따로 결제해야 합니다 🥲
2. 챗GPT 구독과 OpenAI API는 관련이 없다
저는 챗GPT를 쓰기 위해 정기 결제하고 있기 때문에
OpenAI API도 당연히 쓸 수 있겠지, 생각했습니다.
그런데 웬걸? API key만 등록한 상태에서 실습 코드를 실행하면 다음과 같은 에러 메시지가 뜹니다:

RateLimitError: You exceeded your current quota, please check your plan and billing details.
분명 결제 여부(your plan and billing details)와 관련이 있는 에러 같습니다.
궁금해서 구글에 검색해보니 바로 원인을 찾을 수 있었습니다.
OpenAI ChatGPT (GPT-3.5) API error 429: "You exceeded your current quota, please check your plan and billing details"
I'm making a Python script to use OpenAI via its API. However, I'm getting this error: openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing details My ...
stackoverflow.com
즉, OpenAI API를 사용하려면 chatGPT와 별개로 결제를 해야 한다는 내용입니다.
그리고 얼마 전까지도 OpenAI에 가입하면 3개월 간 무료로 API를 사용하거나 무료 토큰이 제공되는 걸로 알고 있었지만
이젠 그것도 없어졌나 봅니다.
아래 링크로 들어가서 결제할 신용카드를 등록한 다음 눈물을 머금고 결제했습니다. (실습비라 생각하자...!)
신용카드 등록: https://platform.openai.com/account/billing/payment-methods
결제 여부 조회: https://platform.openai.com/account/billing/overview

3. API key가 여전히 작동하지 않은 이유
결제도 했고, API key도 분명 토씨 하나 안 틀리고 잘 저장해두었습니다.
그런데 여전히 OpenAI API key 토큰이 부족하다는 똑같은 메시지가 반복됩니다.
도대체 왜? 해달라는 대로 다 해줬는데 왜 안되는 거지??
저는 처음에 원인이 뭔지 몰라 가상환경도 다시 설치해보고 LangChain 버전도 업그레이드해보고
혹시 몰라 다른 함수도 써봤습니다.
근데 문득 머릿속에 한 가지 기억이 스쳐 지나갔습니다.
'최근에 내 친구 챗GPT 결제하려고 했는데 대기자 명단에 들어가서 결제도 못했다고 한다.'
설마 OpenAI API도 워낙 쓰려는 사람이 많아서 바로 바로 승인이 안되는 건가...?
요런 의문을 품고 관련 에러에 대한 게시글을 찾다가 제 추측과 부합하는 답변을 찾았습니다.
RateLimitError: You exceeded your current quota, please check your plan and billing details
Still seeing this issue. Is anyone looking into this? I have been testing this with my old keys and I am getting this rate limit error.
community.openai.com
First, although this says “rate limits”, the rest of the plan indicates your API account isn’t billable. Either you hit a hard limit or there aren’t funds available.
One thing that was done recently to accounts was to add a new organization “personal”. Maybe this was so that an OpenAI account doesn’t become completely useless if you assign another organization owner and then they remove you.
It also means you need to check which account organization is funded by credits or has rights for monthly billing, and make sure below API keys, that the correct default organization is selected. There’s an organization selection when you click your name icon at lower-left bar of platform.openai.com 8.
Also “add credits” and just wait a bit - because it actually might take time for the Stripe account management system to charge your card and unlock the account.
아무래도 정말 기다려야 하나 봅니다.
그래서 자포자기한 심정으로 잠시 LangChain 공부를 멈추고 그 다음 주말에 코드를 확인해봤습니다.

아무 것도 고친 게 없는 똑같은 코드인데 갑자기 멀쩡하게 작동합니다.
아무래도 OpenAI 측에서 지나친 사용자 유입을 막기 위해 API 할당을 일부러 늦춘 게 아닌가하는
제 추측이 맞는 것 같습니다.
여러분 중에도 혹시 OpenAI API를 결제했는데도 작동하지 않는다면,
인내심을 가지고 며칠 기다렸다가 다시 시도해보시길 바랍니다.
이상 1편 끝!
'머신러닝과 딥러닝 > LLM과 NLP' 카테고리의 다른 글
LangChain 입문 2편: Model, Prompt, 그리고 Parser란? (0) | 2023.12.10 |
---|