Chaining Chains

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

GPT

목록 보기
5/11

위 코드의 목적은 LangChain 라이브러리를 사용하여 대화형 AI 모델을 생성하고, 사용자가 원하는 요리법을 제공하고, 이를 채식주의 버전으로 변환하는 것입니다. 코드를 단계별로 설명하겠습니다.

1. 필요한 라이브러리 임포트

from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.callbacks import StreamingStdOutCallbackHandler
  • ChatOpenAI: OpenAI의 챗 모델을 사용하기 위한 클래스.
  • ChatPromptTemplate: 대화형 프롬프트를 정의하기 위한 클래스.
  • StreamingStdOutCallbackHandler: 스트리밍 출력을 콘솔에 표시하기 위한 콜백 핸들러.

2. OpenAI 챗 모델 초기화

chat = ChatOpenAI(
    temperature=0.1,
    streaming=True,
    callbacks=[
        StreamingStdOutCallbackHandler(),
    ],
)
  • ChatOpenAI 클래스의 인스턴스를 생성합니다.
  • temperature는 생성된 텍스트의 창의성 수준을 조절합니다. 낮은 값(0.1)은 더 결정적인 응답을 의미합니다.
  • streaming=True는 응답을 스트리밍 방식으로 출력합니다.
  • callbacks는 스트리밍 동안 콘솔에 출력하도록 설정합니다.

3. 요리법 요청 프롬프트 템플릿 생성

chef_prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "",
        ),
        ("human", "I want to cook {cuisine} food."),
    ]
)
  • ChatPromptTemplate.from_messages를 사용하여 프롬프트 템플릿을 정의합니다.
  • system 메시지는 초기화 메시지이며 비어 있습니다.
  • human 메시지는 사용자가 요리하고자 하는 음식을 입력받습니다. {cuisine}는 사용자가 입력한 값을 대체합니다.

4. 요리사 체인 생성

chef_chain = chef_prompt | chat
  • chef_promptchat을 파이프(|)로 연결하여 체인을 생성합니다. 이는 프롬프트를 챗 모델로 전달하는 것을 의미합니다.

5. 채식 요리사 프롬프트 템플릿 생성

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}는 이전 단계에서 생성된 요리법을 대체합니다.

6. 채식 요리사 체인 생성

veg_chain = veg_chef_prompt | chat
  • veg_chef_promptchat을 파이프(|)로 연결하여 채식 요리사 체인을 생성합니다.

7. 최종 체인 생성 및 실행

final_chain = {"recipe": chef_chain} | veg_chain
  • chef_chain의 출력을 recipe 키로 veg_chain에 전달하여 최종 체인을 생성합니다.
final_chain.invoke({"cuisine": "indian"})
  • final_chain.invoke 메서드를 사용하여 체인을 실행하고, "cuisine": "indian"이라는 입력을 전달합니다. 이는 인도 요리법을 요청한 후 이를 채식 요리로 변환합니다.

이 코드는 LangChain 라이브러리를 사용하여 대화형 AI 모델을 구축하고, 사용자가 요청한 요리법을 제공한 뒤, 이를 채식 요리법으로 변환하는 과정입니다.

profile
공부하는 개발자

0개의 댓글