OutputParser and LCEL

샤워실의 바보·2024년 5월 21일

GPT

목록 보기
4/11

위 코드는 LangChain 라이브러리를 사용하여 사용자가 질문한 내용을 바탕으로 쉼표로 구분된 목록을 생성하는 대화형 AI 모델을 구현합니다. 이 코드를 단계별로 설명하겠습니다.

1. 필요한 라이브러리 및 클래스 임포트

from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema import BaseOutputParser
  • ChatOpenAI: OpenAI의 챗 모델을 사용하기 위한 클래스.
  • ChatPromptTemplate: 대화형 프롬프트를 정의하기 위한 클래스.
  • BaseOutputParser: 출력 파서를 정의하기 위한 베이스 클래스.

2. 챗 모델 초기화

chat = ChatOpenAI(temperature=0.1)
  • ChatOpenAI 클래스의 인스턴스를 생성합니다.
  • temperature는 생성된 텍스트의 창의성 수준을 조절합니다. 낮은 값(0.1)은 더 결정적인 응답을 의미합니다.

3. 출력 파서 클래스 정의

class CommaOutputParser(BaseOutputParser):
    def parse(self, text):
        items = text.strip().split(",")
        return list(map(str.strip, items))
  • CommaOutputParser 클래스는 BaseOutputParser를 상속받아 정의됩니다.
  • parse 메서드는 입력 텍스트를 받아 쉼표로 분리한 후 각 항목의 앞뒤 공백을 제거하고 리스트로 반환합니다.

4. 프롬프트 템플릿 생성

template = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "You are a list generating machine. Everything you are asked will be answered with a comma separated list of max {max_items} in lowercase. Do NOT reply with anything else.",
        ),
        ("human", "{question}"),
    ]
)
  • ChatPromptTemplate.from_messages를 사용하여 프롬프트 템플릿을 정의합니다.
  • system 메시지는 AI 모델에게 역할을 부여합니다. 여기서는 목록을 생성하는 기계로, 최대 {max_items} 항목을 쉼표로 구분하고 소문자로 반환하도록 지시합니다.
  • human 메시지는 사용자의 질문을 입력받습니다. {question}은 사용자가 입력한 질문으로 대체됩니다.

5. 체인 생성

chain = template | chat | CommaOutputParser()
  • template, chat, CommaOutputParser를 파이프(|)로 연결하여 체인을 생성합니다. 이는 프롬프트를 챗 모델로 전달하고, 챗 모델의 출력을 파서로 전달하는 것을 의미합니다.

6. 체인 실행

chain.invoke({"max_items": 5, "question": "What are the pokemons?"})
  • chain.invoke 메서드를 사용하여 체인을 실행하고, {"max_items": 5, "question": "What are the pokemons?"}라는 입력을 전달합니다.
  • max_items는 반환될 최대 항목 수를 지정합니다.
  • question은 사용자가 묻고자 하는 질문입니다.

요약

이 코드는 사용자 질문에 대해 최대 5개의 항목을 쉼표로 구분하여 소문자로 반환하는 대화형 AI 모델을 설정합니다. 결과는 CommaOutputParser를 통해 파싱되어 깔끔한 리스트 형태로 반환됩니다.

profile
공부하는 개발자

0개의 댓글