AI 서비스 개발을 위해, LLM과 함께 랭체인(LangChain)을 써야 하는 이유
최근 많은 기업과 개발자들의 LLM 관련 기술 수요가 폭발적으로 증가하며, LLM 기반의 어플리케이션을 쉽게 만들 수 있게 해주는 프레임워크인 랭체인(LangChain)을 활용한 LLM 기반 AI 서비스 구축이 많은 관심을 끌고 있습니다.
빠르게 증가하는 랭체인(LangChain) GitHub Stars 지수(출처:Dash ICT)
Q. 잠깐, LLM이 뭔가요?
LLM이란, ‘Large Language Model’의 약자로 방대한 양의 텍스트 데이터에서 패턴을 분석하고 학습하여 인간과 유사한 텍스트를 처리하고 생성하도록 설계된 고급 인공 지능 모델입니다. LLM은 상황에 맞는 방식으로 언어를 이해하고, 생성하고, 조작하는 능력이 주요 특징이라고 할 수 있습니다.
[LLM의 주요 기능]
✔ 텍스트 생성 : 주어진 프롬프트를 기반으로 일관되고 상황에 맞는 적절한 텍스트를 생성할 수 있습니다.
✔ 언어 번역 : LLM은 한 언어에서 다른 언어로 텍스트를 번역할 수 있습니다.
✔ 텍스트 요약 : 긴 텍스트 구절을 간결한 요약으로 압축할 수 있습니다.
✔ 질문 답변 : LLM은 교육 데이터를 기반으로 질문을 이해하고 관련 답변을 제공할 수 있습니다.
✔ 텍스트 완성 : 문장에서 다음 단어나 문구를 예측하고 제안할 수 있습니다.
✔ 언어 이해 : LLM은 복잡한 문장을 다룰 때에도 텍스트의 의미와 맥락을 이해할 수 있습니다.
[인기있는 LLM TOP 3]
👑 GPT-3 : OpenAI에서 개발한 GPT-3은 가장 잘 알려져 있고 강력한 LLM 중 하나입니다. 1,750억 개의 매개변수를 갖고 있어 광범위한 자연어 처리 작업에 매우 다용도로 사용할 수 있습니다. GPT-3는 일관되고 상황에 맞는 텍스트를 생성하고, 질문에 답변하고, 언어를 번역하고, 대화를 시뮬레이션하는 등의 작업을 수행하는 AI 서비스에 활용될 수 있습니다.
👑 Falcon LLM : 아부다비 기술 혁신 연구소의 오픈 소스 모델은 오픈 소스 AI 모델 부문에서 전 세계 1위를 차지했습니다. 400억 개의 매개변수를 갖춘 1조 개의 토큰으로 훈련된 Falcon은 고유한 파이프라인을 사용한 고품질 데이터 추출을 통해 성능을 높일 수 있었는데요. 결과 데이터 세트인 RefinedWeb은 세련된 콘텐츠를 제공하며, Falcon의 미세 조정된 아키텍처는 컴퓨팅 리소스를 줄인 상태에서는 교육 및 추론 모두에서 GPT-3보다 뛰어난 효율성을 달성하여 인상적인 효율성을 보여주었습니다.
👑 LLaMA : 7B에서 65B 매개변수 범위의 최첨단 기반 언어 모델 모음입니다. 이러한 모델은 크기가 더 작지만 뛰어난 성능을 제공하므로, 새로운 방법론을 실험하고 다른 사람의 작업을 검증하며 혁신적인 사용 사례를 탐색하는 데 필요한 컴퓨팅 성능과 리소스를 크게 줄여줍니다.
Q. 그렇다면, 랭체인(LangChain)은 뭔가요?
LLM 작업에 사용할 수 있는 강력한 도구입니다. LLM을 원동력으로 하는 AI 서비스를을구축하기 위해서는 단순 언어 모델 개발 이상의 작업이 요구되는데, 특히 언어 모델을 활용한 AI 서비스 개발 시 가장 까다로운 부분은 언어 모델과 여러 기능 간의 연결입니다. 랭체인(LangChain)은 이러한 통합을 간소화하도록 설계된 일종의 SDK(Software Development Kit)이자 다양한 언어 모델을 기반으로 하는 애플리케이션 개발을 위한 프레임워크입니다.
왜 LLM 기반 AI 서비스를 만들기 위해 랭체인(LangChain)을 활용하는 방법이 인기있을까요?
바로, 랭체인(LangChain)으로 LLM의 논리적 결합(Chain)을 만들 수 있기 때문입니다.
단순 언어 모델인 LLM 자체에는 기능에 한계가 있기 때문에, 이를 극복하기 위해 랭체인(LangChain)은 텍스트를 작은 조각으로 분해하여 벡터 공간에 포함시키고 질문이 주어지면 유사한 조각을 검색하여 전처리하는 유용한 방법을 제공합니다. 따라서 랭체인(LangChain)은 개발자가 문제에 대해 추론할 수 있는 에이전트를 구축하고 더 작은 하위 작업으로 나눌 수 있도록 해주기에, 랭체인(LangChain)을 사용하면 중간 단계를 만들고 명령을 함께 체인화하여 컨텍스트와 메모리를 효과적으로 도입할 수 있습니다.
랭체인 설명(출처:Dash ICT)
그럼 이제, 간단한 체인을 만들면서 ‘체인’의 개념을 이해해보겠습니다.
먼저, 프롬프트 템플릿을 생성하고 변수 체인을 추가합니다. 질문에서 이를 가져와 템플릿에 전달한 다음 메시지를 LLM에 보냅니다.
랭체인(LangChain)을 활용한 에이전트는 사용자 입력을 기반으로 LLM을 동적으로 호출하는 혁신적인 방법을 보여줍니다. LLM뿐만 아니라 외부 세계와 상호 작용할 수 있는 도구 모음(예: Google 검색, Python REPL, 수학 계산기, 날씨 API 등)에도 액세스할 수 있습니다.
이 경우 에이전트는 pal-math 도구와 OpenAI LLM을 활용하여 자연어 프롬프트에 포함된 수학 문제를 해결합니다. 이는 랭체인(LangChain)의 에이전트가 프롬프트를 이해하고, 작업을 해결하기 위한 올바른 도구를 직접 선택하며, 결국 의미 있는 응답을 반환까지 해냄으로써 실제로 도움을 주는 사례를 보여줍니다.
LLM과 랭체인(LangChain)을 활용한 AI 서비스 챗봇 개발 과정
그렇다면 어떻게 랭체인(LangChain)으로 LLM에 여러 도구를 붙여 맞춤형 기능을 가진 챗봇을 개발하는 지에 대해 설명드리겠습니다.
① 랭체인(LangChain) 메모리
메모리는 이전 입력 항목을 기억하고 싶을 때 유용합니다. 예를 들어, “알베르트 아인슈타인은 누구입니까?”라고 질문한 후, “그의 멘토는 누구였습니까?”라고 물어보면 메모리는 “그의”가 “알베르트 아인슈타인”을 의미한다는 것을 기억하는 데 도움을 줄 수 있습니다.
▶ 메모리 단계 구현하기
1) 처음에는 프롬프트에 메모리를 추가해야 합니다. ‘chat_history’라는 변수를 추가하면 이 변수가 채팅 요약을 해 줍니다.
2) 채팅 내용을 요약합니다.
3) 에이전트에 채팅 요약을 추가합니다.
② 랭체인(LangChain) 도구 및 사용자 정의 도구
도구는 에이전트가 일반적인 유틸리티(예: 검색), 다른 체인 또는 심지어 다른 에이전트와 상호 작용하는 데 사용할 수 있는 기능입니다. *예시: 지메일 / 구글 플레이스 / 구글 검색 / 구글 서퍼 / 그래프 / 인간 상호 작용 / 지라 / JSON
▶ 맞춤형 도구 구축하기
1) 맞춤 도구를 생성합니다.
위의 예에서 볼 수 있듯이 도구를 사용하면 에이전트가 도구를 사용하여 날짜를 얻을 수 있습니다.
2) 에이전트에 추가하기
이제 실제 날짜에 대해 물어보거나 오늘의 실제 날짜와 같은 관련 질문을 하면 이를 답변할 수 있습니다.
③ 챗봇 구축하기
위에서 말씀드린 메모리와 맞춤형 도구를 활용해 사용자 데이터에 접근하고, 이 데이터를 분석하고, 사용자 질문에 답변할 수 있는 챗봇과 같은 AI 서비스를 구축할 수 있습니다. 가장 먼저 필요한 것은 플래너 에이전트를 활용하는 것입니다. API YAML 파일을 읽고, 에이전트가 사용할 수 있는 모든 엔드포인트를 도구로 변환한 다음 이를 호출하여 인간에게 최상의 질문 답변을 제공하는 데 필요한 모든 API가 포함된 계획을 세우고 이러한 API를 호출하여 데이터를 분석하는 에이전트가 필요합니다.
다만 방식에는 몇 가지 한계가 있는데, 아래와 같습니다.
질문에 답하려면 3~4개의 엔드포인트를 호출해야 하기 때문에 응답하는 데 시간이 오래 걸립니다.
사용자가 일반적인 질문을 할 때 사용자와 친근한 말투로 대화를 나누지 않습니다.
사용자 맞춤형으로 도구를 전달할 수 없습니다.
관련된 기억(메모리)을 전달할 수 없습니다.
이런 부분들을 개선하기 위해, 맞춤형 플래너를 구축하여 도구를 전달하고 메모리를 추가해보겠습니다.
하지만 맞춤형 플래너를 생성한 후에는 또 다른 문제가 발생합니다. 플래너 에이전트와 협력하여 사용자 친화적인 채팅을 제공할 수 있는 채팅 에이전트가 필요합니다. 이게 가능하려면, 아래와 같은 두 가지 방법이 있는데요.
플래너 에이전트는 채팅을 도구로 사용합니다.
채팅 에이전트는 플래너를 도구로 사용합니다.
이 두 가지 옵션에 대한 분석을 바탕으로 한 최선의 접근 방식은 채팅 에이전트를 골라 플래너를 도구로 사용하는 것입니다. 그러나 앞서 설명했듯이 플래너는 사용할 수 있는 API를 결정한 다음 3개 또는 4개의 엔드포인트로 호출하는 과정에서 시간이 좀 필요합니다.
또 다시, 이 문제를 해결하기 위한 다른 두 가지 방법은 아래와 같습니다.
사용자 지정 플래너 프롬프트를 편집하여 요청 횟수를 한 두 번의 호출로 제한합니다.
모든 엔드포인트를 도구로 구축하고 대화 에이전트가 이러한 도구 중 사용할 도구를 결정하도록 합니다.
따라서 플래너 에이전트를 도구로 사용하며, 프롬프트 템플릿을 편집하여 앱 API를 기반으로
사용자 입력을 계획하고 분석하는 방법을 반영한 최종 코드를 공개합니다!
이처럼, 랭체인(LangChain)과 맞춤형 도구들을 활용하면 사용자 질문에 답변할 수 있는 AI 서비스를 손쉽게 구축할 수 있습니다.
챗봇에서 더 나아가, 랭체인(LangChain)으로
내 업무를 대신해 줄 수준의 ‘AI 서비스’를 쉽고 빠르게 개발해보고 싶다면?
랭체인으로 AI 서비스 빨리 개발하고, RAG&API 연동해 기능 고도화하는 법 전부 알려드립니다.
여기에 남들 다 하는 수준 AI 챗봇, PDF 아닌 스스로 일하는 ‘AI 인턴’ 구현 프로젝트까지!
파이썬 몰라도, 심지어 개발이나 AI 뭐든 잘 몰라도 마스터 가능하니 지금 확인해보세요!