본문 바로가기

LangChain

ChatPromptTemplate - TeddyNote(FastCampus lecture)

ChatPromptTemplate

대화 목록을 프롬프트로 주입하고자 할 때 사용됨, 메세지는 튜플 형식으로 구성되며 (Role, Message)로 구성하여 리스트 생성

Role

  • "system": 시스템 설정 메세지로, 전역 설정에 관련된 프롬프트
  • "human": 사용자 입력 메세지
  • "ai" : AI의 답변 메세지

    from langchain_core.prompts import ChatPromptTemplate
    
    chat_prompt = ChatPromptTemplate.from_template("{country}의 수도는 어디인가요?")
    
    # 만들어진 템플릿에 실제 값을 채우는 부분입니다.
    # format() 메소드를 사용해 {country} 부분을 "대한민국"으로 대체
    chat_prompt.format(country = "대한민국")
    
    #  메시지로 구성된 대화 템플릿을 생성
    chat_template = ChatPromptTemplate.from_messages(
        [
            # role, message
            ("system", "당신은 친절한 AI 어시스턴트입니다. 당신의 이름은 {name} 입니다."),
            ("human", "반가워요!"),
            ("ai", "안녕하세요! 무엇을 도와드릴까요?"),
            ("human", "{user_input}"),
        ]
    )
    
    # 챗 message 를 생성합니다.
    messages = chat_template.format_messages(
        name="테디", user_input="당신의 이름은 무엇입니까?"
    )
    

    여기서 messages를 출력해보면 이렇게 결과가 나온다

    [SystemMessage(content='당신은 친절한 AI 어시스턴트입니다. 당신의 이름은 테디 입니다.', additional_kwargs={}, response_metadata={}),
     HumanMessage(content='반가워요!', additional_kwargs={}, response_metadata={}),
     AIMessage(content='안녕하세요! 무엇을 도와드릴까요?', additional_kwargs={}, response_metadata={}),
     HumanMessage(content='당신의 이름은 무엇입니까?', additional_kwargs={}, response_metadata={})]

    그 후 생성한 메세지를 주입하여 결과를 받을 수 있는데 이 과정을 코드로 구현하는 과정

    llm.invoke(messages).content
    
    chain = chat_template | llm
    
    chain.invoke({"name": "Teddy", "user_input": "당신의 이름은 무엇입니까?"}).content
    

    이렇게 하면 이런 결과가 나오게 된다.

    '제 이름은 Teddy입니다. 당신을 도와드릴 수 있도록 노력하겠습니다! 어떤 도움이 필요하신가요?'