1.5. RunnableLambda

RunnableLambda는 LangChain에서 사용자 정의 함수를 실행하기 위해 제공되는 기능으로, Python의 callable 객체를 Runnable로 변환하여 체인에 통합할 수 있게 합니다. 이를 통해 복잡한 로직을 처리하거나 기존 기능을 확장할 수 있으며, 데이터 변환, 계산, 외부 API 호출 등 다양한 작업을 수행할 수 있습니다.

주요 특징

  • 사용자 정의 함수 래핑:
    • RunnableLambda는 임의의 Python 함수 또는 람다를 Runnable 객체로 변환합니다. 이를 통해 체인 내에서 사용자 정의 처리를 쉽게 구현할 수 있습니다.
    • 예를 들어, 문자열 길이를 계산하거나 두 텍스트의 길이를 곱하는 작업을 수행할 수 있습니다.
  • 단일 입력 처리:
    • 사용자 정의 함수는 반드시 단일 입력만 받을 수 있습니다. 여러 인자를 처리하려면 단일 입력을 받아 여러 인자로 풀어내는 래퍼(wrapper)를 작성해야 합니다.
  • 체인 연결:
    • RunnableLambda는 다른 Runnable과 쉽게 연결될 수 있으며, | 연산자를 사용하여 체인을 구성할 수 있습니다. 이때 하나가 함수라면 자동으로 RunnableLambda로 변환됩니다.
  • RunnableConfig 지원:
    • RunnableLambda는 선택적으로 RunnableConfig를 지원하며, 이를 통해 콜백, 태그 및 기타 구성 정보를 설정하여 중첩된 실행에 전달할 수 있습니다.

사용 예제

기본 사용

이 코드는 숫자 5를 문자열로 변환하는 간단한 예제입니다.

from langchain_core.runnables import RunnableLambda

# 람다 함수를 Runnable 객체로 변환
runnable = RunnableLambda(lambda x: str(x))
response = runnable.invoke(5)
print(response)
5

1) 체인 구성

체인을 구성하여 입력 데이터를 처리하고 결과를 반환합니다.

from langchain_core.runnables import RunnableLambda

# 두 함수 체인 연결
runnable1 = RunnableLambda(lambda x: {"foo": x})
runnable2 = RunnableLambda(lambda x: [x] * 2)
chain = runnable1 | runnable2

result = chain.invoke(2)
print(result)
[{‘foo’: 2}, {‘foo’: 2}]

2) 복잡한 로직 처리

여러 입력값을 처리하기 위해 래퍼 함수를 사용하여 데이터를 가공합니다.

def length_function(text):
   return len(text)

def multiple_length_function(_dict):
   return len(_dict["text1"]) * len(_dict["text2"])

runnable1 = RunnableLambda(length_function)
runnable2 = RunnableLambda(multiple_length_function)

result = runnable2.invoke({"text1": "hello", "text2": "world"})
print(result)
25

3) RunnableConfig 활용

RunnableConfig를 사용하여 태그와 콜백을 설정하고 오류를 처리하는 예제입니다

import json
from langchain_core.runnables import RunnableLambda, RunnableConfig

def parse_or_fix(text: str, config: RunnableConfig):
   try:
       return json.loads(text)
   except Exception as e:
       return f"Error: {e}"

config = {"tags": ["example-tag"]}
output = RunnableLambda(parse_or_fix).invoke('{"foo": "bar"}', config=config)
print(output)
{‘foo’: ‘bar’}

활용 사례

  • 데이터 전처리: 입력 데이터를 정규화하거나 필터링하는 작업.
  • 복잡한 계산: 여러 입력값을 기반으로 수학적 연산 수행.
  • API 호출 및 응답 처리: 외부 API와 상호작용 후 데이터를 가공.
  • 라우팅 및 분기 처리: 조건에 따라 실행할 함수를 선택하는 로직 구현.

장점

  • 유연성: Python 함수와 LangChain의 체인을 쉽게 통합 가능.
  • 확장성: 복잡한 워크플로우를 간단하게 캡슐화.
  • 가독성: 체인의 각 단계가 명확하게 정의되어 유지보수가 용이.

RunnableLambda는 LangChain에서 사용자 정의 처리를 구현하는 데 매우 유용하며, 다양한 LLM 애플리케이션에서 핵심적인 역할을 합니다.

이 글은 카테고리: 랭체인 (LangChain)에 포함되어 있으며 태그: (이)가 사용되었습니다. 고유주소를 북마크하세요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다