위 코드의 목적은 LangChain 라이브러리를 사용하여 대화형 AI 모델을 생성하고, 사용자가 원하는 요리법을 제공하고, 이를 채식주의 버전으로 변환하는 것입니다. 코드를 단계별로 설명하겠습니다.
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.callbacks import StreamingStdOutCallbackHandler
ChatOpenAI: OpenAI의 챗 모델을 사용하기 위한 클래스.ChatPromptTemplate: 대화형 프롬프트를 정의하기 위한 클래스.StreamingStdOutCallbackHandler: 스트리밍 출력을 콘솔에 표시하기 위한 콜백 핸들러.chat = ChatOpenAI(
temperature=0.1,
streaming=True,
callbacks=[
StreamingStdOutCallbackHandler(),
],
)
ChatOpenAI 클래스의 인스턴스를 생성합니다.temperature는 생성된 텍스트의 창의성 수준을 조절합니다. 낮은 값(0.1)은 더 결정적인 응답을 의미합니다.streaming=True는 응답을 스트리밍 방식으로 출력합니다.callbacks는 스트리밍 동안 콘솔에 출력하도록 설정합니다.chef_prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"",
),
("human", "I want to cook {cuisine} food."),
]
)
ChatPromptTemplate.from_messages를 사용하여 프롬프트 템플릿을 정의합니다.system 메시지는 초기화 메시지이며 비어 있습니다.human 메시지는 사용자가 요리하고자 하는 음식을 입력받습니다. {cuisine}는 사용자가 입력한 값을 대체합니다.chef_chain = chef_prompt | chat
chef_prompt와 chat을 파이프(|)로 연결하여 체인을 생성합니다. 이는 프롬프트를 챗 모델로 전달하는 것을 의미합니다.veg_chef_prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You are a vegetarian chef specialized on making traditional recipes vegetarian. You find alternative ingredients and explain their preparation. You don't radically modify the recipe. If there is no alternative for a food just say you don't know how to replace it.",
),
("human", "{recipe}"),
]
)
system 메시지는 채식 요리사에게 역할을 부여하고, 대체 재료를 찾아 설명하도록 지시합니다.human 메시지는 요리법을 입력받습니다. {recipe}는 이전 단계에서 생성된 요리법을 대체합니다.veg_chain = veg_chef_prompt | chat
veg_chef_prompt와 chat을 파이프(|)로 연결하여 채식 요리사 체인을 생성합니다.final_chain = {"recipe": chef_chain} | veg_chain
chef_chain의 출력을 recipe 키로 veg_chain에 전달하여 최종 체인을 생성합니다.final_chain.invoke({"cuisine": "indian"})
final_chain.invoke 메서드를 사용하여 체인을 실행하고, "cuisine": "indian"이라는 입력을 전달합니다. 이는 인도 요리법을 요청한 후 이를 채식 요리로 변환합니다.이 코드는 LangChain 라이브러리를 사용하여 대화형 AI 모델을 구축하고, 사용자가 요청한 요리법을 제공한 뒤, 이를 채식 요리법으로 변환하는 과정입니다.