랭체인 프로그래밍: 개념과 응용 – Runnable, Chain

Runnable, Chain

독립적인 단일 작업을 수행할 수 있는 것을 Runnable이라 하고, 

Runnable들을 연결해 복잡한 작업을 수행할 수 있는 것은 Chain이라 합니다.

 

구체적인 Runnable들과 구체적인 Chain들을 알아가는 것이 랭체인을 배우는 것이라 할 수 있습니다.

 

작업 수행을 invoke라고 합니다. 작업 수행을 위한 입력 값이 목록으로 배치 처리가 요구될 수도 있고, 작업 수행 결과를 stream으로 제공하기를 원할 수도 있습니다.  배치 처리가 요청될 때 작업 수행을 batch, 작업 수행 결과를 stream으로 제공할 때 작업 수행을 stream이라 합니다.

 

어떤 작업들은 이전 작업 결과가 다음 작업의 입력으로 사용될 수 있도록 순차적으로 수행되어야 하거나, 작업 결과에 영향을 받지 않아 병행으로 수행될 수 있습니다.

 

파이썬에서 작업 수행은 함수로 작성할 수 있기 때문에, 수행할 작업을 함수로 작성하고 이 함수가 Runnable이 되도록 하고 싶을 것입니다. RunnableLambda가 이를 위한 것으로 함수를 Runnable 객체로 감싸주는 역할을 합니다.

예를 들어, 다음과 같은 함수가 있다고 가정해 보겠습니다.

def my_function(x: int) -> str:
return f”The result is: {x * 2}”

이 함수를 RunnableLambda로 감싸면 다음과 같습니다.

from langchain_core.runnables import RunnableLambda

runnable = RunnableLambda(my_function)
result = runnable.invoke(2)
print(result)

 

LCEL(LangChain Expression Language)

Runnable과 Chain을 직접 사용하는 것보다 훨씬 간편하고 효율적인 체인 생성을 위해 LCEL이라는 선언적 언어를 지원합니다.

 

데이터 구조

Pydantic이라는 파이썬 데이터 유효성 검사 라이브러리를 사용하여 데이터 구조를 정의합니다. Pydantic을 사용하면 데이터 스키마를 정의하고 유효성을 검사할 수 있습니다.

langchain_core.load.Serializable

이 클래스는 Pydantic의 BaseModel을 상속받고 JSON 직렬화/역직렬화 기능을 추가로 제공합니다.

lc_secrets 속성은 API 키와 같은 민감한 정보를 제어하고, lc_attributes 속성은 직렬화된 키-값 인수에 포함될 인스턴스 속성을 제어합니다. Serializable을 상속받는 LangChain 인터페이스는 JSON으로 직렬화/역직렬화 가능한 고급 데이터 구조로 생각할 수 있습니다.

langchain_core.prompts.BasePromptTemplate

프롬프트 템플릿을 위한 기본 추상 클래스입니다.

langchain_community.document_loaders.blob_loaders.schema.Blob

참조 또는 값으로 원시 바이너리 데이터를 나타냅니다.

langchain_core.document.base.Document

텍스트와 관련 메타데이터를 저장합니다.

langchain_core.messages.base.Message

챗 모델의 입력과 출력을 위한 기본 추상 클래스입니다.

langchain_core.runnables.config.RunnableConfig

태그, 메타데이터, 동시성 매개변수와 같은 Runnable에 대한 구성 정보를 저장합니다.

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

Leave a Reply

*