본문 바로가기

LangChain: Introduction and Getting Started(랭체인 소개 및 시작하기)

출입금지 발행일 : 2023-06-11

LangChain: Introduction and Getting Started(랭체인 소개 및 시작하기)

대규모 언어 모델(LLM)은 2020년 OpenAI의 GPT-3 출시와 함께 세계 무대에 등장했습니다. 그 이후로 지속적으로 인기를 얻고 있습니다. 특히 2022년 말까지 LLM과 제너레이티브 AI 분야에 대한 관심이 급증한 이유는 LLM의 상당한 발전과 지속적인 발전 모멘텀 때문입니다.

최근에는 구글의 "지각이 있는" 챗봇 LaMDA에 대한 흥미로운 소식을 접할 수 있었습니다. 또한, 최초의 강력한 오픈 소스 LLM인 BLOOM이 출시되었으며, OpenAI는 차세대 텍스트 임베딩 모델과 "GPT-3.5" 모델을 선보였습니다. 이러한 LLM 분야의 큰 도약 이후, OpenAI는 ChatGPT를 출시하여 LLM이 많은 관심을 받게 되었습니다.

이와 유사한 시기에는 랭체인(LangChain)이 등장했습니다. 랭체인은 2022년 10월 말에 첫 커밋을 한 해리슨 체이스에 의해 시작되었습니다. 그 후 짧은 개발 기간 동안 랭체인은 LLM의 발전에 휩쓸리게 되었습니다. 아직 초기 단계인 랭체인은 이미 LLM의 핵심을 기반으로 놀라운 도구를 구축할 수 있는 다양한 기능들로 가득 차 있습니다. 이 글에서는 랭체인이 제공하는 라이브러리의 간단한 구성 요소인 LLM부터 시작하여 상세히 소개하겠습니다.

 

관련 볼만한 유트브...

 

LangChain

LangChain의 핵심은 LLM을 중심으로 구축된 프레임워크입니다. 챗봇, 생성형 질의응답(GQA), 요약 등에 사용할 수 있습니다.

라이브러리의 핵심 아이디어는 서로 다른 컴포넌트를 '체인'으로 연결하여 LLM을 중심으로 보다 고급 사용 사례를 만들 수 있다는 것입니다. 체인은 여러 모듈의 여러 구성 요소로 구성될 수 있습니다:

프롬프트 템플릿: 프롬프트 템플릿은 다양한 유형의 프롬프트를 위한 템플릿입니다. 예를 들어 "챗봇" 스타일 템플릿, ELI5 질문 답변 등이 있습니다.

  • LLM: GPT-3, BLOOM 등과 같은 대규모 언어 모델입니다.
  • 에이전트: 에이전트는 LLM을 사용하여 수행할 작업을 결정합니다. 웹 검색이나 계산기와 같은 도구를 사용할 수 있으며, 모두 논리적 연산 루프로 묶여 있습니다.
  • 메모리: 단기 기억, 장기 기억.

LangChain 매뉴얼의 다음 장에서 각각에 대해 훨씬 더 자세히 살펴보겠습니다. 뉴스레터를 구독하시면 각 릴리스에 대한 최신 소식을 받아보실 수 있습니다

 

지금은 프롬프트 템플릿과 LLM의 기본 사항부터 살펴보겠습니다. 또한 라이브러리에서 사용할 수 있는 두 가지 LLM 옵션에 대해 살펴보고, Hugging Face Hub 또는 OpenAI의 모델을 사용해 보겠습니다.

 

Our First Prompt Templates

LLM에 입력되는 프롬프트는 종종 다른 방식으로 구조화되어 다양한 결과를 얻을 수 있습니다. Q&A의 경우 사용자의 질문을 받아 기존 Q&A, 답변의 글머리 기호 목록 또는 주어진 질문과 관련된 문제 요약과 같은 다양한 Q&A 스타일로 재구성할 수 있습니다.

 

Creating Prompts in LangChain

간단한 질문-응답 프롬프트 템플릿을 만들어 보겠습니다. 먼저 랭체인 라이브러리를 설치해야 합니다.

 

Google Colab을 통해 코드를 따라서 등록 하시면 됩니다.

!pip install langchain

from langchain import PromptTemplate

template = """Question: {question}

Answer: """
prompt = PromptTemplate(
        template=template,
    input_variables=['question']
)


question = "삼성라이온즈 2023년 시즌 기록은?"

 

이 프롬프트 템플릿을 주어진 질문과 함께 사용하면 다음과 같은 메시지가 표시됩니다:

Question: 삼성라이온즈 2023년 시즌 기록은?
Answer:


지금은 이 정도면 충분합니다. 허깅 페이스 허브와 OpenAI LLM 세대 모두에서 동일한 프롬프트 템플릿을 사용할 것입니다.

 

Hugging Face Hub LLM

LangChain의 허깅 페이스 허브 엔드포인트는 허깅 페이스 허브에 연결하고 무료 추론 엔드포인트를 통해 모델을 실행합니다. 이러한 엔드포인트를 사용하려면 허깅 페이스 계정과 API 키가 필요합니다.

API 키가 있으면 HUGGINGFACEHUB_API_TOKEN 환경 변수에 추가합니다. 파이썬에서는 다음과 같이 할 수 있습니다:

import os

os.environ['HUGGINGFACEHUB_API_TOKEN'] = 'HF_API_KEY'

다음으로, Pip을 통해 huggingface_hub 라이브러리를 설치해야 합니다.

!pip install huggingface_hub


이제 허브 모델을 사용하여 텍스트를 생성할 수 있습니다. 구글/플란-t5-x1을 사용하겠습니다.

기본 허깅 페이스 허브 추론 API는 특수 하드웨어를 사용하지 않으므로 속도가 느릴 수 있습니다. 또한 bigscience/bloom-560m 또는 google/flan-t5-xxl과 같은 대규모 모델을 실행하는 데는 적합하지 않습니다(xxl 대 xl 참고).

from langchain import HuggingFaceHub, LLMChain

# initialize Hub LLM
hub_llm = HuggingFaceHub(
        repo_id='google/flan-t5-xl',
    model_kwargs={'temperature':1e-10}
)

# create prompt template > LLM chain
llm_chain = LLMChain(
    prompt=prompt,
    llm=hub_llm
)

# ask the user question about NFL 2010
print(llm_chain.run(question))

Asking Multiple Questions

여러 개의 질문을 하고 싶다면 두 가지 접근 방식을 시도해 볼 수 있습니다:

생성 방법을 사용하여 모든 질문을 반복하여 한 번에 하나씩 답변합니다.
모든 질문을 LLM에 대한 단일 프롬프트에 배치하는 방법은 고급 LLM에서만 작동합니다.
옵션 (1)부터 시작하여 생성 메서드를 사용하는 방법을 살펴 보겠습니다:

qs = [
    {'question': "Which NFL team won the Super Bowl in the 2010 season?"},
    {'question': "If I am 6 ft 4 inches, how tall am I in centimeters?"},
    {'question': "Who was the 12th person on the moon?"},
    {'question': "How many eyes does a blade of grass have?"}
]
res = llm_chain.generate(qs)
res




LLMResult(generations=[[Generation(text='green bay packers', generation_info=None)], [Generation(text='184', generation_info=None)], [Generation(text='john glenn', generation_info=None)], [Generation(text='one', generation_info=None)]], llm_output=None)
 

여기서 첫 번째 질문을 제외하고는 나쁜 결과를 얻습니다. 이는 단순히 사용 중인 LLM의 한계입니다.

모델이 개별 질문에 정확하게 답변할 수 없는 경우 모든 쿼리를 단일 프롬프트로 그룹화하면 효과가 없을 수 있습니다. 하지만 실험을 위해 시도해 봅시다.

 

multi_template = """Answer the following questions one at a time.

Questions:
{questions}

Answers:
"""
long_prompt = PromptTemplate(template=multi_template, input_variables=["questions"])

llm_chain = LLMChain(
    prompt=long_prompt,
    llm=flan_t5
)

qs_str = (
    "Which NFL team won the Super Bowl in the 2010 season?\n" +
    "If I am 6 ft 4 inches, how tall am I in centimeters?\n" +
    "Who was the 12th person on the moon?" +
    "How many eyes does a blade of grass have?"
)

print(llm_chain.run(qs_str))

OpenAI LLMs

LangChain의 OpenAI 엔드포인트는 직접 또는 Azure를 통해 OpenAI에 연결됩니다. 이러한 엔드포인트를 사용하려면 OpenAI 계정과 API 키가 필요합니다.

API 키가 있으면 OPENAI_API_TOKEN 환경 변수에 추가합니다. Python에서는 다음과 같이 할 수 있습니다:

!pip install openai

import os

os.environ['OPENAI_API_TOKEN'] = 'OPENAI_API_KEY'

이제 OpenAI의 GPT-3 생성(또는 완성) 모델을 사용하여 텍스트를 생성할 수 있습니다. 텍스트-davinci-003을 사용하겠습니다.

from langchain.llms import OpenAI

davinci = OpenAI(model_name='text-davinci-003')
from langchain.llms import AzureOpenAI

llm = AzureOpenAI(
    deployment_name="your-azure-deployment", 
    model_name="text-davinci-003"
)

포옹하는 얼굴 예제에서 이전과 동일한 간단한 질문-답변 프롬프트 템플릿을 사용하겠습니다. 유일한 변경 사항은 이제 OpenAI LLM 다빈치를 전달한다는 점입니다:

llm_chain = LLMChain(
    prompt=prompt,
    llm=davinci
)

print(llm_chain.run(question))

예상대로 정답을 얻었습니다. 생성하기를 사용하여 여러 질문에 대해 동일한 작업을 수행할 수 있습니다:

qs = [
    {'question': "Which NFL team won the Super Bowl in the 2010 season?"},
    {'question': "If I am 6 ft 4 inches, how tall am I in centimeters?"},
    {'question': "Who was the 12th person on the moon?"},
    {'question': "How many eyes does a blade of grass have?"}
]
llm_chain.generate(qs)

대부분의 결과는 정확하거나 어느 정도 사실에 부합합니다. 이 모델은 의심할 여지 없이 구글/플란-t5-xl 모델보다 더 잘 작동합니다. 이전과 마찬가지로 모든 질문을 한 번에 모델에 입력해 보겠습니다.

llm_chain = LLMChain(
    prompt=long_prompt,
    llm=davinci
)

qs_str = (
    "Which NFL team won the Super Bowl in the 2010 season?\n" +
    "If I am 6 ft 4 inches, how tall am I in centimeters?\n" +
    "Who was the 12th person on the moon?" +
    "How many eyes does a blade of grass have?"
)

print(llm_chain.run(qs_str))

쿼리를 계속 재실행할 때, 모델은 때때로 오류를 발생시키기도 하지만, 다른 경우에는 모든 답을 정확하게 얻을 수 있습니다.

여기까지 OpenAI의 GPT-3 모델이나 Hugging Face를 통해 제공되는 오픈 소스 대안과 같은 LLM을 중심으로 고급 앱을 구축할 수 있는 라이브러리인 LangChain에 대한 소개를 마쳤습니다.

앞서 언급했듯이 LangChain은 여기서 설명한 것보다 훨씬 더 많은 일을 할 수 있습니다. 다음 글에서 이러한 다른 기능에 대해 다룰 예정입니다.

 

 

 

해당 글을  참고 하여, 제가 학습 하기 위하여 작성된 글 입니다. 관련 내용이 궁금 하시거나 상세하게 알아볼 필요가 있다면 해당 링크로 이동 하여 재 학습 하시기 바랍니다.

 

 

LangChain: Introduction and Getting Started | Pinecone

Introduction to the Generative AI and LLM framework for building apps with OpenAI's GPT-3 and open-source alternatives.

www.pinecone.io

 

반응형

댓글