랭체인 프로그래밍: 개념과 응용 – 005

스트림 지원하는 챗봇 구현(기본 대화 기능만 포함)

  • 대화 기능이 가능한 기본 챗봇을 chatbot 함수 작성합니다.  chatbot 함수는 궁극은 랭체인 체인이 되어야 합니다.
    • @chain

      def chatbot:

    • 대화 참여자 역할을 지정하는 프롬프트 템플릿이 필요합니다. 대화를 담는 프롬프트 템플릿이 필요 합니다.
      • ChatPromptTemplate
        • from langchain.prompts import ChatPromptTemplate
      • system 메시지는 “You are a helpful assistant.”로 하고, human 메시지는 question 변수로 사용자 입력을 받도록 합니다.
        • template = ChatPromptTemplate.from_messages([(“system”, “You are a helpful assistant.”), (“human”, “{question}”),])
    • 변수 값으로 하나만 question 값 하나만 받으면 되지만, 여러 변수 값을 받을 수 매개변수를 작성합니다.
      • 인자로 받은 값들은 ChatPromptTemplate 객체의 invoke 함수의 인자로 사용되어야 하기 때문에 Dictionary 여야 합니다.
      • def chatbot(values):
    • 모델 클라이언트는 프롬프트 템플릿으로 부터 구체화된 template을 입력으로 받아 stream 방식으로 응답합니다. stream 방식으로 리턴되는 토큰을 리턴합니다.

@chain

@chain은 LangChain에서 사용되는 데코레이터(decorator)로, 함수를 LangChain의 체인(chain)으로 변환하는 역할을 합니다. 체인이란 여러 구성 요소(LLM, 프롬프트, 출력 파서 등)들을 순차적으로 연결하여 복잡한 작업을 수행하는 LangChain의 핵심 개념입니다.

@chain 데코레이터를 사용하면 일반적인 Python 함수를 LangChain 체인의 일부로 쉽게 통합할 수 있습니다. 이렇게 하면 함수의 입력과 출력을 LangChain의 다른 구성 요소들과 자동으로 연결하고 관리할 수 있습니다. 특히, @chain 데코레이터는 함수의 입력값을 체인의 다른 구성 요소에서 생성된 값으로 자동으로 채우고, 함수의 출력값을 다음 구성 요소의 입력값으로 전달하는 역할을 합니다.

@chain 데코레이터를 사용하면 다음과 같은 이점이 있습니다.

  • 간편한 체인 구성: 함수를 쉽게 체인에 통합할 수 있습니다.
  • 자동 입력/출력 연결: 함수의 입력 및 출력이 자동으로 연결 및 관리됩니다.
  • 코드 가독성 향상: 체인의 흐름이 명확하게 표현됩니다.
  • 재사용성: 함수를 여러 체인에서 재사용할 수 있습니다.

예를 들어, 다음과 같이 @chain 데코레이터를 사용하여 간단한 체인을 구성할 수 있습니다.

이 예제에서 my_function 은 @chain 데코레이터로 장식되어 LangChain 체인의 일부로 동작합니다. my_function 은 입력값을 llm_chain 에 전달하고, llm_chain 의 출력값을 사용하여 최종 출력값을 생성합니다. @chain 데코레이터 덕분에 my_function 은 llm_chain 과 자동으로 연결되어 복잡한 체인 구성 없이도 LLM을 효율적으로 사용할 수 있습니다.

question을 “생성형 인공지능?” 하고 스트리밍 방식으로 응답을 출력하도록 하는 전체 코드

 

LCEL을 사용해 챗봇 구현

  • 프롬프트 템플릿과 모델 클라이언트 구성요소가 있고 이 둘을 순차적으로 실행하는 체인을 만듭니다. 구성요소의 순차적 실행을 표현하기 위해 “|“를 사용합니다.
    • chatbot = template | model

 

About the Author
(주)뉴테크프라임 대표 김현남입니다. 저에 대해 좀 더 알기를 원하시는 분은 아래 링크를 참조하세요. http://www.umlcert.com/kimhn/

Leave a Reply

*