Langchain 프롬프트 템플릿 상세 가이드

1. 프롬프트 소개

  • 프롬프트란?: 모델에 대한 입력, 예를 들어 채GPT 사이트에서 사용자가 입력하는 명령어입니다.
  • 프롬프트 템플릿이 필요한 이유: 사용자가 모든 명령어를 직접 입력하기보다, 구성 요소를 함수화하여 서비스 내에서 재사용하기 위함입니다. 사용자가 프롬프트를 하드코딩하는 대신 프롬프트 템플릿을 통해 더 편리하게 만들 수 있습니다.

2. 프롬프트 템플릿

  • 정의: 고정된 부분과 가변적인 부분을 가지는 프롬프트 구조입니다. 사용자는 가변적인 부분에만 입력을 제공하고, 나머지 부분은 템플릿으로 활용됩니다.
  • 핵심 특징: 고정된 텍스트와 사용자가 입력하는 가변 파라미터(변수)로 구성됩니다.
  • 이점: 프롬프트 구성 및 작업을 쉽게 만들어 줍니다.

3. 프롬프트 템플릿의 종류

  • 기본 프롬프트 템플릿 (PromptTemplate): 일반적인 텍스트 생성 모델에 사용됩니다.
  • 채팅 프롬프트 템플릿 (ChatPromptTemplate): 채팅 모델에 특화되어 사용됩니다.

4. 프롬프트 템플릿 사용 예시

  • 스트링 프롬프트 템플릿 예시:
    • 템플릿 정의: “미어 조커 {subject}”
    • format_prompt 함수를 사용하여 subject 변수에 값을 지정합니다. 예를 들어, subject에 “커”를 넣으면 “미어 조커 커”라는 텍스트가 완성됩니다.
  • 채팅 프롬프트 템플릿 예시:
    • 스트링 프롬프트 템플릿과 유사하지만, 휴먼 메시지(HumanMessage) 형태로 템플릿을 적용합니다.
    • 결과물은 휴먼 메시지 컨텐츠 내에 템플릿이 적용된 형태를 갖습니다.

5. 프롬프트 템플릿을 활용한 요리 레시피 생성기

  • 템플릿 정의:
    • 역할 부여: “당신은 요리사입니다.”
    • 지시: “제가 가진 재료들을 통해서 만들 수 있는 요리를 추천하고 그 요리의 레시피를 제시해 주세요. 제가 가진 재료는 아래와 같습니다: {재료}”
  • 가변 변수: 재료를 매개변수 {재료}로 설정합니다.
  • 활용: 사용자가 입력한 재료(예: 양파, 계란, 사과, 빵)를 템플릿에 적용하여 요리 추천 및 레시피를 생성합니다.

6. 채팅 프롬프트 템플릿 상세 내용

  • 필수 요소: 시스템 메시지(SystemMessage), AI 메시지(AIMessage), 휴먼 메시지(HumanMessage) 템플릿이 필요합니다.
  • 채팅 모델: 채팅 오픈 AI 함수를 사용하여 채팅 모델을 로드합니다.
  • 템플릿 결합: 시스템 메시지 템플릿과 휴먼 메시지 템플릿을 결합하여 채팅 프롬프트 템플릿을 생성합니다.
  • 활용: format_prompt 함수를 사용하여 재료를 입력하고 채팅 모델에 전달합니다.

7. 퓨샷 프롬프트 (Few-Shot Prompting)

  • 정의: 모델에게 결과물 예시를 제공하여 원하는 방향으로 결과를 유도하는 방법론입니다.
  • FewShotPromptTemplate 사용: 질문과 답변 쌍(예: 아이유 3행시)을 리스트 형태로 제공하여 원하는 출력 형태를 유도합니다.
  • 목적: 특수하거나 구조화된 답변을 얻기 위함입니다.

8. 예시 선택기 (Example Selectors)

  • SemanticSimilarityExampleSelector: 사용자의 입력과 예시 간의 의미적 유사성을 비교하여 가장 적합한 예시를 선택합니다.
  • 벡터 스토어 (Chroma): 임베딩된 값을 저장하고 비교하는 데 사용됩니다.
  • 임베딩: 텍스트를 수치화하여 비교 가능하게 변환합니다 (OpenAI 임베딩 사용).
  • 동적 퓨샷: 사용자의 입력에 따라 다른 예시를 제공하여 다양한 작업을 수행합니다.
  • 활용: 복잡한 작업이나 다양한 예시가 필요한 경우에 사용합니다.

9. 아웃풋 파서 (Output Parsers)

  • 목적: 모델에서 출력된 값의 형태를 고정합니다. (리스트, JSON 등)
  • CommaSeparatedListOutputParser: 콤마로 구분된 리스트 형태의 답변을 받기 위해 사용합니다.
  • 사용법:
    • 아웃풋 파서를 정의하고 모델에게 지시사항을 전달합니다. (예: get_format_instructions를 통해 콤마로 구분된 리스트로 답변하도록 지시).
    • 프롬프트 템플릿에서 partial_variables를 사용하여 아웃풋 파서의 지시사항을 삽입합니다.
    • 모델이 답변 후, 아웃풋 파서를 통해 지정된 형태로 변환합니다.
  • 활용: 서비스 통합 시, 코딩을 더욱 용이하게 만들어 줍니다.