위 코드는 LangChain 라이브러리를 사용하여 사용자가 질문한 내용을 바탕으로 쉼표로 구분된 목록을 생성하는 대화형 AI 모델을 구현합니다. 이 코드를 단계별로 설명하겠습니다.
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema import BaseOutputParser
ChatOpenAI: OpenAI의 챗 모델을 사용하기 위한 클래스.ChatPromptTemplate: 대화형 프롬프트를 정의하기 위한 클래스.BaseOutputParser: 출력 파서를 정의하기 위한 베이스 클래스.chat = ChatOpenAI(temperature=0.1)
ChatOpenAI 클래스의 인스턴스를 생성합니다.temperature는 생성된 텍스트의 창의성 수준을 조절합니다. 낮은 값(0.1)은 더 결정적인 응답을 의미합니다.class CommaOutputParser(BaseOutputParser):
def parse(self, text):
items = text.strip().split(",")
return list(map(str.strip, items))
CommaOutputParser 클래스는 BaseOutputParser를 상속받아 정의됩니다.parse 메서드는 입력 텍스트를 받아 쉼표로 분리한 후 각 항목의 앞뒤 공백을 제거하고 리스트로 반환합니다.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}은 사용자가 입력한 질문으로 대체됩니다.chain = template | chat | CommaOutputParser()
template, chat, CommaOutputParser를 파이프(|)로 연결하여 체인을 생성합니다. 이는 프롬프트를 챗 모델로 전달하고, 챗 모델의 출력을 파서로 전달하는 것을 의미합니다.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를 통해 파싱되어 깔끔한 리스트 형태로 반환됩니다.