Chatbot 프로젝트/LangChain

3. RAG를 위한 LangChain의 핵심 구성 요소 및 실습[Prompt Templates]

조찬국 2024. 10. 31. 21:35
728x90

1. Prompt와 PromptTemplate

1.1. Prompt

: 모델에 대한 입력을 의미한다. 실제 LLM 서비스들 의경우, 사용자가 전부 입력하도록 만들지 않고 Back 단에서 여러 구성 요소를 통해 편리한 입력을 지원하도록 한다.

1.2. PromptTemplate

: 이러한 편리한 입력 지원을 위한 모듈이다. Langchain은 프롬프트를 쉽게  구성하고 작업할 수 있도록 여러클래스와 함수를 제공한다.

 

 

위의 Day1, Day2, Day3 에서 반복적으로 물어보게 했는데, 이를 템플릿 화 해서 공통질문으로 자동으로 물어보게 할 수 있다.

 

 

 

2. PromptTemplate의 종류

2.1. PromptTemplate

한 프롬프트에 매개 변수를 지정한다.

2.2. ChatPromptTemplate

위와 달리 한거번에 설정한 것을 역할을 나눠서 매개변수를 지정한다.

 

위와 같이 Format을 지정했다. 여기서 마지막에 이모티콘을 달아달라고했고, 이를 활용하게 되었다.

chain의 invoke를 통해 값을 입력했다.

 

2.3. Few-Shot Prompt Template

퓨샷 예제를 제공하면 해당 예제와 유사한 형태의 결과물을 출력한다. 프롬프트로 표현하기 어려운 경우 사용하고, 미리 학습된 예제를 바탕으로 답변을 하기에 좀 더 높은 정확도를 낼 수 있다.

위와 같이 4행시에 대한 예시를 알려줌으로써 답변을 원활하게 할 수 있다. 

 

from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate
examples = [
    {
        "question": "아이유로 삼행시 만들어줘",
        "answer":
                """
                아: 아이유는
                이: 이런 강의를 들을 이
                유: 유가 없다.
                """
    }
]

example_prompt = PromptTemplate(
                                input_variables=["question", "answer"],
                                template="Question: {question}\n{answer}"
                                )

print(example_prompt.format(**examples[0])) # **: 키와 벨류 값을 나열해서 출력하겠다.
prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    suffix="Question: {input}",
    input_variables=["input"]
)

print(prompt.format(input="호날두로 삼행시 만들어줘"))

코드설명: few shot 프롬프트 템플릿을 쓸건데, 위에 선언한 examples를 example_prompt를 쓸거라고 선언한 뒤, suffix에 값을 지정한다. 그리고 입력값을 키 값으로 선언한다.

(suffix: 앞서 미리 고정을 해 둘 값을 지정하는 것)

 

적용 결과 비교

 

2.4. Partial Prompt Template

Partial Prompt Tempate은 매개변수 중 몇개만 미리 지정해둔다. 즉, 매번 지정해주는게 아니라 어떤 매개변수는 특정값으로 고정하고, 나머지 하나의 매개변수는 입력을 받게 하고 싶은 경우. 즉, 부분적으로 매개변수를 설정하는 것

 

실행 예시

 

prompt.partial(date=_get_datetime)부분에 date란 매개변수는 현재날짜를 구하는 함수로 설정

728x90