LangChain의 큰 그림부터 먼저 살펴보자
LangChain의 공식 문서를 보면 모듈을 크게 6가지로 나눠서 설명합니다.
- Model I/O: 모델의 입력과 출력이 무엇인가? 어떤 모델(LLM vs. Chat model)을 사용하는가? 출력을 어떻게 구조화할 것인가?(output parser)
- Retrieval: LLM에 학습되지 않은 외부 데이터(문서, document)를 어떻게 활용할 것인가? 문서를 저장(vector store)하고 인덱싱(index)하는 법, 가져오는 법(retriever)은 무엇인가?
- Agents: LLM의 추론 능력을 활용한다면 외부 입력에 따라 다른 판단을 내리는 '동적인' chain을 구성할 수 있지 않을까?(agent types, tools)
- Chains: 작은 LLM 'building block'을 연결해서 더 복합적인 LLM을 만들어보자.
- Memory: LLM이 인간과 같이 대화의 맥락을 파악하려면 정보를 저장할 수 있어야 한다.
- Callbacks: 로깅, 모니터링, streamning 등 다양한 기능을 제공하는 기타 함수들
여섯 가지 모듈 중 이번 편에서 설명하고자 하는 건 Model I/O 파트입니다.
Model I/O의 흐름
강의 영상에서 제일 먼저 다루는 게 이 세 요소입니다.
먼저 모델은 우리가 흔히 알고 있는 LLM 모델 또는 Chat 모델(LangChain에선 이 둘을 구분하고 있습니다)을 말합니다.
PyTorch의 torchvision.models 모듈을 통해 CNN 기반 딥러닝 모델을 불러올 수 있듯이
LangChain 모듈을 사용해서 LLM 모델을 불러와 사용할 수 있습니다.
# 사전에 OpenAI API 키를 불러오는 과정이 생략되어 있음
from openai import OpenAI
client = OpenAI(
# defaults to os.environ.get("OPENAI_API_KEY")
api_key="private",
)
# 기본값으로 GPT-3.5 터보 모델을 불러온다
def chat_gpt(prompt):
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content.strip()
chat_gpt("What is 1+1?")
# LLM 특성 상 출력 결과가 아래와 다르게 나올 수도 있다
# 'As an AI language model, I can tell you that the answer to 1+1 is 2.'
Model I/O의 흐름은
Prompt (사용자의 입력) – prompt template (모델에게 내리는 지시사항, 예시 등)
– model (언어 모델) – output parser (결과 데이터를 사용자가 지정한 형식에 맞게 구조화)
으로 나뉩니다.
Model, Prompts and Parsers 개념 정리
- Models: 사용하고자 하는 LLM(또는 chat model). OpenAI의 챗GPT API나 최근 챗GPT의 대항마로 떠오르고 있는 Claude-2 등이 대표적인 예시. 이외에도 80개의 LLM과 29개의 chat model이 제공되고 있습니다.
- Prompts: 사용자가 모델에 입력하는 데이터. 일반 text일 수도 있고 chat message일 수도 있습니다.
- Prompt templates: prompt를 보다 간편하게 사용하기 위해 미리 정의된 문장들. 지시사항이나 few-shot examples, 특정한 맥락을 제공하는 문단 등이 될 수 있습니다.
- Parsers: LLM이 결과값을 내놓았을 때, 사용자가 원하는 형식대로 출력하도록 구조화해주는 객체입니다.
Prompt Template이 필요한 이유
Prompt template은 언어 모델에 대해 사용자가 원하는 결과를 출력하도록 지시를 내리거나,
정답을 맞추기 좀 더 쉽게 예시(few shot example)를 제공하는 미리 정의된 text를 의미합니다.
실제로 LangChain을 다룰 땐 prompt termplate을 먼저 정의하고
그 안에 일부 변수만 다르게 바꾸어 넣어서 사용하는 게 일반적입니다.
'머신러닝과 딥러닝 > LLM과 NLP' 카테고리의 다른 글
LangChain 입문 1편: DeepLearning.AI 강의 수강 시작하기 (실습 환경 구축) (2) | 2023.12.10 |
---|