[LLM 개발기초] 3. LangChain: AI 튜닝의 시작


앞선 포스트에서 소개했듯 Llama 모델은 대중이 자유롭게 사용할 수 있도록 공개되어 있습니다. ollama 와 같이 모델과의 질의응답을 처리할 수 있는 기본적인 도구도 오픈소스로 제공되어 있죠. 그래서 이 위에 멋진 UI를 제공하는 몇 가지 툴만 설치해도 상용 AI 챗과 유사한 서비스를 내 PC에서 실행할 수 있습니다. 이것만으로도 놀랍지 않습니까?

하지만 전 세계 개발자들은 여기서 멈추지 않았습니다. 그들은 언어모델은 엔진일 뿐이며 여기에 여러 부품과 도구를 사용해 개조하면 다양한 특장차를 만들 수 있음을 깨달았습니다. 그래서 손으로 세기도 어려울 만큼 많은 도구들이 개발되어 쏟아져 나왔습니다. 아마도 이 링크에서 이 분위기를 어느정도 느끼실 수 있을겁니다. AI 의 시대가 시작되면서 AI 튜닝의 시대도 시작되었습니다.

AI 자체가 좋아서 공부하고자 하는 사람이든, AI 쇼크에서 기획를 엿보고자하는 경영자든 아니면 AI 에게 일자리를 위협받을지도 몰라 적을 공부하고자 하는 직장인이든 상관 없습니다. 시작은 LangChain(랭체인)으로부터 하시면 됩니다.

LangChain


LangChain

LangChain 을 공식적인 화법으로 소개하면 다음과 같습니다.

LangChain은 대규모 언어 모델(LLM)을 활용한, 애플리케이션 개발을 위한 강력한 프레임워크입니다. LangChain을 사용하면 챗봇, 질의응답 시스템, 문서 요약 등 다양한 AI 애플리케이션을 빠르고 효율적으로 개발할 수 있습니다.

  1. 모듈성: 다양한 LLM과 도구들을 쉽게 통합할 수 있습니다.
  2. 체인 구성: 복잡한 작업을 여러 단계로 나누어 처리할 수 있습니다.
  3. 메모리 관리: 대화 기록을 유지하고 컨텍스트를 관리합니다.
  4. 프롬프트 템플릿: 효과적인 프롬프트 생성을 위한 도구를 제공합니다.
  5. 데이터 처리: 다양한 형식의 데이터를 쉽게 처리할 수 있습니다.

사람들마다 LLM 을 이용해서 해보고자 하는 작업은 다양할 것입니다. LLM에 던지는 질문을 효율적으로 구성해서 원하는 결과를 얻고자 할 수도 있고, 전문적인 지식을 입력해서 일반적인 AI 챗으로는 얻을 수 없는 답을 구하거나 다양한 AI 들을 연결해서 음성->텍스트->영상을 넘나드는 작업을 할 수도 있습니다.

이런 다양한 요구사항을 충족하기 위해서는 범용적인 그리고 체계적인 작업 도구가 필요할 것입니다. 그 중 가장 각광받은 도구가 LangChain 입니다. 우리가 일반적으로 꿈꾸는 AI 튜닝 시나리오는 LangChain 으로 대부분 구현할 수 있거나 혹은 불가능한 것들입니다.

다만 LangChain 을 배우고 활용하기 위해서는 몇 가지 허들을 넘어야합니다.

  • Python: 전문적인 수준은 아니지만 초급 정도의 파이썬 활용 능력이 필요합니다. 이게 안된다 하더라도 예제들을 따라하거나 간단한 수정을 해보며 체험위주의 진행은 가능합니다.
  • LLM 에 대한 이해: LLM 과 튜닝에 대한 이론적인 이해까지는 아니지만 “대충 어떻게 돌아간다더라” 정도의 지식은 학습이 필요합니다. 하지만 이런 지식이야말로 여러분이 AI 를 공부하는 이유일 것입니다.
  • 성능좋은 GPU가 달린 PC: LLM 모델을 가지고 하는 작업은 GPU(그래픽카드)의 성능에 크게 의존합니다. GPU 가 필수는 아니지만 성능이 좋을수록 여러분의 시간을 아껴줍니다.


LangChain 실습: Llama3.1 에 질문하고 답을 얻기

LangChain 의 여러 특징과 사용법을 나열하는 것 보다 일단 간단한 예제를 실습하는 것이 이해에 더 도움이 될 것입니다.

첫 번째 실습 예제는 LangChain 을 이용해서 간단한 질문을 던지고 수신한 대답을 출력합니다.

  • 앞선 강좌에서 ollama 실습 때 받은 Llama3.1 모델을 사용
  • 인터넷 사용 없이 PC 에서 결과를 구함
  • 질문 “세계에서 가장 붐비는 항공노선은 어디인가?”

LangChain 실행환경 설정

LangChain 을 사용하기 위해서는 PC에서 실행할 수 있는 환경부터 갖춰야 합니다.

먼저 Python 이 PC에 설치되어 있어야 합니다. 이 강좌에서는 이 단계는 진행된 것으로 간주합니다.

  • 본인의 PC에 python 이 이미 설치된 상태라면 그대로 다음 단계 진행
  • python 이 설치되지 않았다면 “python IDLE 설치” 자료를 검색해서 설치를 진행해주세요.
    (python 대신 anaconda 를 설치하셔도 됩니다.)
  • python 을 코딩하고 실행할 수 있는 python IDLE 를 실행
    (코딩 경험이 있으신 분이라면 취향에 따라 VSCode/PyCharm 설치, 설정 후 사용)

python 이 준비되면 코드를 입력/실행 하기전에 LangChain 라이브러리를 설치해야 합니다. 터미널/프롬프트를 띄워서 아래 명령어를 사용합니다.

$ pip install langchain langchain_community

LangChain 의 핵심이 되는 langchain core 와 langchain community 를 설치하라는 의미입니다. langchain community 는 core 모듈이 외부의 다양한 서비스, 도구, 데이터 소스와 결합할 수 있도록 돕습니다. 우리가 앞선 강좌에서 설치한 ollama 와의 연동도 langchain community 를 통해 이루어집니다.

만약 실행시 라이브러리 관련된 오류가 발생한다면 pip install xxx 형식으로 필요한 라이브러리를 설치해주세요. AI 강좌이니만큼 오류가 발생하면 AI 에게 물어봐서 조치를 취하시길 추천합니다;;;

LangChain 실습 1: 가장 단순한 질문과 응답 예제

아래 실습 코드를 입력합니다. [03_01_simple_qa.py]

from langchain_community.llms import Ollama

# Ollama 연결 (localhost:11434에서 실행 중인 Ollama에 연결)
llm = Ollama(model="llama3.1")

# chain 실행
response = llm.invoke("세계에서 가장 붐비는 항공노선은 어디인가?")

# 결과 출력
print(response)

3개의 라인으로 작성된 실행 코드는

  • llm = Ollama(model=”llama3.1″)
    • PC에 설치된 ollama 에 연결합니다. PC에 설치된 ollama 가 실행중이라면 11434 번 포트를 통해 응답을 기다고 있을겁니다. LangChain 은 이 포트를 통해 ollama 와 데이터를 주고 받습니다.
    • 언어모델은 llama3.1 을 사용합니다.
  • response = llm.invoke(“세계에서 가장 붐비는 항공노선은 어디인가?”)
    • ollama 에게 질문을 던지고 응답을 받습니다.
  • print(response)
    • 응답을 출력합니다. ollama 에게서 응답을 모두 받을때까지 기다렸다가 한번에 출력하므로 결과를 보기까지 시간이 꽤 소요됩니다.

이 코드를 자신이 사용하는 에디터 환경에 맞춰 실행해보세요.

$ python -u "c:\___Workspace\Llama\test\llama_test\03_01_simple_qa.py"

대한항공의 TOKYO( Narita) - 서울(인천) 노선입니다.

$ 

이처럼 간단한 LangChain 코드만으로 PC 에 설치된 Llama3.1 모델을 이용한 응답을 얻을 수 있습니다.


langchain 실습 2: AI의 응답을 바꾸는 질문과 스트리밍 출력

그럼 조금 변형된 실습도 해보겠습니다. [03_01_simple_qa_2.py]

앞선 질문을 여러번 실행해보면 대답에 일관성이 없이 다르게 표시되곤 할겁니다. 보다 정확하고 신뢰할만한 결과를 위해 질문을 변경해볼겁니다. 그리고 일반적인 AI 챗 화면에서 사용하는, 대답을 받는대로 타이핑하듯이 화면에 출력하는 방식을 써볼겁니다.

아래 코드에서 앞서와는 달리 Ollama 를 사용하는 코드에 temperature = 0 이 추가되었습니다. 이것은 AI 에게 최대한 정확한 답변을 요구합니다. 1에 가까울수록 AI 는 창의적이고 예측할 수 없는 답변을 합니다.

  • Ollama(temperature=0, model=”llama3.1″)
from langchain_community.llms import Ollama
import sys

llm = Ollama(temperature=0, model="llama3.1")

question = "세계에서 가장 붐비는 항공노선 4개를 알려줘"

summary_query = f"""
아래 질문에 대한 대답을 할 때 IATA 자료를 참고해. 대답은 아래 형식으로 만들어줘. 마지막에는 출처를 적어줘.
형식:
1. 대답 1
2. 대답 2

질문: {question}
"""

# 스트리밍 출력
for chunk in llm.stream(summary_query):
    sys.stdout.write(chunk)
    sys.stdout.flush()

print()  # 마지막에 줄바꿈을 추가
  • question
    • 우리가 질문할 내용을 담는 변수입니다.
  • summary_query
    • 질문에 대한 대답을 생성할 때 고려해야 할 사항들을 상세히 적어줬습니다. 대답 마지막에는 출처도 표기하도록 했습니다. 그리고 우리가 할 질문이 {question} 여기에 포함되도록 했습니다.
    • 이 변수에 담기 문자열 전체가 ollama 에 전달됩니다
  • for chunk in llm.stream(summary_query):
    • 스트리밍 출력을 위한 코드입니다. ollama 에서 응답이 문자 단위로 올때마다 바로 화면에 출력해서 타이핑 효과를 만듭니다.

이 코드를 실행해보면 아래와 같은 응답이 나옵니다.

$ python -u "c:\___Workspace\Llama\test\llama_test\03_01_simple_qa_2.py"

1. 뉴욕(존 F. 케네디 국제공항) - 로스앤젤레스(LAX)
2. 도쿄(나리타 국제공항) - 오사카(간사이 국제공항)
3. 홍콩(홍콩 국제공항) - 상하이(푸동 국제공항)
4. 뉴욕(존 F. 케네디 국제공항) - 런던(히드로 국제공항)

출처: IATA (국제 항공 운송 협회)

$ 

질문에 대한 대답이 보다 일관성 있고 출처가 있는 자료를 참고해서 신뢰가 더 갑니다! 그리고 우리가 원하는 형식대로 대답이 나오기도 했습니다.

매우 간단한 형태이지만, 질문을 적절히 변형해서 LLM 모델의 응답이 원하는 형태로 나오도록 해봤습니다. 이것을 AI 용어로 표현하면 프롬프트 엔지니어링입니다. 추후 우리가 봐야할 주제 중 하나입니다.

이 강좌에서는 개인 PC를 이용해서 private AI 환경 구축합니다. 그래서 ollama 를 사용해서 언어모델을 다운로드하고 LangChain 에 연결하는 방식을 사용했습니다.

하지만 보다 정확하고 (PC 사양에 구애받지 않는) 빠른 실행환경을 원한다면 ollama 대신 ChatGPT, Gemini 같은 서비스를 제공하는 서버를 호출하는 방식으로 대체하는 것도 가능합니다. 이 방법에 대해서는 이어지는 강좌에서 소개하겠습니다.


참고자료


You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.