[LangChain for LLM Application Development] 랭체인 Models, Prompts and Parsers

본 게시물은 Deeplearning.ai 코스를 수강 후 요약 및 정리한 내용입니다.


 

랭체인..!! LLM...!!!

너무 재밌다! 같이 공부할사람! 🙋‍♀️

 

 

먼저 LangChain이 뭔지 모르시는 분들을 위해

 

LangChain이란 LLM(Large Language Model) application을 제작하기 위한 Pytorch와 같은 오픈소스 개발 framework이다!

 

 

LangChain framework는 Python, javascript를 지원하며 이 프레임워크를 이용하면 누구나 LLM 모델을 개발해볼 수 있다는 장점이 ..!! ㅎㅎ 

 

LangChain은 LLM으로 할 수 있는 거의 모든 기능들을 지원하는데 그 중에서도 LLM의 Composition과 Modularity에 특화되어 있다!

 

LangChain을 공부하기 위해선 다양한 용어들을 먼저 알아야 하는데, 그 중 먼저 Model, Prompt 그리고 Parser에 대해 알아보고자 한다.

 

 

Model

 본 강의에서 말하는 Model은 당연히 LM. 즉, Language Model 을 의미한다!

LangChain에서 지원하는 LLM 모델은 다양한 모델들이 있는데, 다음과 같이 dir함수를 이용해 지원하는 모델들을 확인해 본 결과

LangChain이 지원하는 다양한 모델들

 

AzureChat model, Anthropic (아마 Claude?), Google의 Palm, 당연한 GPT 모델까지 등등 다양한 Language model들을 지원하고 있다! 

 

 

Prompt

 (이 Prompt는 요즘 가장 핫한 프롬프트 엔지니어링의 그 프롬프트가 맞다)

본 강의에서 말하는 prompt는 쉽게 얘기하면, "모델에 전달할 입력을 생성하는 스타일"을 의미한다. 즉, Language model에게 특정 예시를 주어 어떤식으로 출력을 생성하면 좋을지 제공해주는 틀을 Prompt라고 할 수 있다.

 

LangChain 프레임워크에서는 Prompt Template 를 공식적으로 지원하는데, 이 Prompt template을 이용하면 프롬프트를 필요할 때마다 입력해 줄 필요 없이 템플릿을 저장하여 반복적으로 재사용 할 수 있다.

 

Prompt template

 

다음과 같이 Langchain module에서 ChatPrompt Template 모듈을 import 하고, 프롬프트를 입력해주면 Prompt template 모듈로 예시 프롬프트로부터 기본 프롬프트 템플릿을 생성하고, 그 안에서 원래의 프롬프트를 추출할 수도 있고 프롬프트에 어떤 입력 변수들이 있는지도 확인할 수 있다.

(위 그림상으로는 style, text를 입력변수로 가지고 있는 것을 확인할 수 있음!)

 

단순히 f-string을 이용해서 프롬프트를 입력하지 않고, 프롬프트 템플릿을 사용하는 이유들은 아래와 같다!

 

  • 복잡한 애플리케이션을 구축하면서 프롬프트가 상당히 길고 자세해질 수 있다
  • LangChain은 요약, 질문 등과 같이 SQL 데이터 베이스에 연결되기도 하고, 다양한 API와의 연결 등과 같은 일반적인 작업에 대한 기본적인 프롬프트를 제공하기도 한다
  • 내장 프롬프트를 이용하면 직접 프롬프트를 설계할 필요 없이, 빠르게 애플리케이션을 작동시킬 수 있다

 

Parser

프롬프트가 Model의 입력과 관련이 있는 용어였다면, Parser는 반대로 Model의 출력과 관련이 있는 용어라고 할 수 있다. 

따라서 Output Parser라고도 종종 일컫는데, LangChain 프레임워크에서는 이 Output parsing을 지원한다. Output parsing과 프롬프트를 통해 LLM 이 생각할 수 있는 공간을 제공함으로써 종종 더 정확한 결과를 도출하기도 하는데

 

예시를 보면 아래와 같다.

 

Prompt 와 Output Parser를 같이 활용한 경우

 

다음과 같이 왼쪽에 프롬프트가 존재하고, 프롬프트 상에서 ReAct 기법을 사용하여 Thought, Action, Observation에 해당하는 키워드 샷들을 제공해주고, 이런 키워드들이 Parser상에서도 존재한다면, Parser를 통해 특정 키워드로 태그된 텍스트들만을 추출하는 방법이 가능해진다!

 

이를 통해 LLM이 도출하는 출력을 완벽하게 해석할 수 있는 단서를 제공해주기도 한다..!

 

 

Output parser를 실행해 보는 방법은 아래와 같다.

 

출력 예시 지정

 

먼저 다음과 같이 Output parser를 위해 딕셔너리 형태의 원하는 출력 예시를 지정해준다.

고객 리뷰 템플릿

 

그리고 다음과 같이 고객 리뷰와 함께 JSON 형태의 출력을 얻기 위한 프롬프트 템플릿을 제공해준다. 위의 템플릿을 앞서말한 Prompt template를 통해 생성하여 출력해 보면 결과물이 json형태의 key-value쌍을 가진 것처럼 출력된다. (Output parsing을 이용하여 출력 형태를 지정해 준 결과!)

실제 type을 찍어보면 str이 출력되는 결과물

 

하지만, 실제로 그 결과값의 type을 출력 해 보면 실제로는 json형태가 아니라 위 그림처럼 딕셔너리처럼 보이는 str 문자형으로 나타나는 결과를 확인할 수 있음!

 

따라서 이를 json 형식으로 출력해서 받아보고 싶다면 Langchain 모듈 중 schema 모듈을 이용하여 key, value 등 스키마를 지정해주면 딕셔너리 형태로 제대로 출력되는 결과를 받아 볼 수 있다!

 

 

 

다음 강의는 Memory 강의로..!