IT기술/랭체인 (langchain)

LangChain Callbacks 모듈: 이벤트 기반 모니터링 및 제어 시스템

후스파 2025. 4. 6. 14:46
반응형

랭체인 LangChain

LangChain의 Callbacks 모듈은 AI 애플리케이션의 실행 과정에서 발생하는 다양한 이벤트를 모니터링하고 제어할 수 있는 강력한 시스템입니다. 이 모듈은 개발자가 LLM 애플리케이션의 다양한 단계에서 사용자 정의 기능을 통합할 수 있게 해줍니다.

Callbacks 모듈의 핵심 개념

이벤트 구독 시스템

LangChain의 콜백 시스템은 API 전반에 걸쳐 사용할 수 있는 `callbacks` 인자를 통해 구현됩니다. 이 인자는 특정 이벤트에 응답하기 위한 메서드를 구현하는 핸들러 객체 목록을 받습니다.

from langchain.callbacks import BaseCallbackHandler

class MyCustomCallback(BaseCallbackHandler):
    def on_llm_start(self, serialized, prompts, **kwargs):
        print(f"LLM 시작: {prompts}")
    
    def on_llm_end(self, response, **kwargs):
        print(f"LLM 종료: {response}")


주요 콜백 이벤트

LangChain은 다양한 이벤트에 대한 콜백을 제공합니다.

1. 체인 관련 이벤트:
   - `on_chain_start`: 체인 실행이 시작될 때 호출
   - `on_chain_end`: 체인 실행이 완료될 때 호출

2. LLM 관련 이벤트:
   - `on_llm_start`: LLM 실행이 시작될 때 호출
   - `on_llm_end`: LLM 실행이 완료될 때 호출

3. 도구 관련 이벤트:
   - `on_tool_start`: 외부 도구가 호출될 때 호출
   - `on_tool_end`: 도구 실행이 완료될 때 호출

4. 오류 처리:
   - `on_llm_error`: LLM 실행 중 오류 발생 시 호출
   - `on_chain_error`: 체인 실행 중 오류 발생 시 호출
   - `on_tool_error`: 도구 실행 중 오류 발생 시 호출

Callbacks 사용 방법

LangChain에서 콜백을 사용하는 방법은 세 가지가 있습니다.

1. 생성자 콜백

객체를 초기화할 때 콜백을 설정합니다.

from langchain.callbacks import StdOutCallbackHandler
from langchain.chains import LLMChain
from langchain_openai import OpenAI
from langchain.prompts import PromptTemplate

handler = StdOutCallbackHandler()
llm = OpenAI()
prompt = PromptTemplate.from_template("1 + {number} = ")

# 체인 초기화 시 콜백 설정
chain = LLMChain(llm=llm, prompt=prompt, callbacks=[handler])
chain.invoke({"number": 2})


2. verbose 플래그 사용

`verbose=True` 플래그를 사용하여 기본 콘솔 출력 핸들러를 활성화할 수 있습니다.

chain = LLMChain(llm=llm, prompt=prompt, verbose=True)
chain.invoke({"number": 2})


3. 요청 시 콜백 전달

특정 요청에만 콜백을 적용하고 싶을 때 사용합니다.

chain = LLMChain(llm=llm, prompt=prompt)
chain.invoke({"number": 2}, {"callbacks": [handler]})


콜백 사용 사례

1. 로깅 및 디버깅

콜백은 AI 워크플로우를 추적하고 성능 문제가 발생하는 위치를 파악하는 데 도움이 됩니다.

class LoggingCallback(BaseCallbackHandler):
    def on_llm_start(self, serialized, prompts, **kwargs):
        print(f"LLM 요청 시작: {prompts}")
    
    def on_llm_end(self, response, **kwargs):
        print(f"LLM 응답 완료: {response}")
        print(f"토큰 사용량: {response.llm_output.get('token_usage', {})}")


2. 성능 모니터링

토큰 사용량과 API 응답 시간을 모니터링하여 효율적인 리소스 할당을 보장합니다.

import time

class PerformanceCallback(BaseCallbackHandler):
    def __init__(self):
        self.start_times = {}
    
    def on_llm_start(self, serialized, prompts, run_id, **kwargs):
        self.start_times[run_id] = time.time()
    
    def on_llm_end(self, response, run_id, **kwargs):
        if run_id in self.start_times:
            execution_time = time.time() - self.start_times[run_id]
            print(f"LLM 실행 시간: {execution_time:.2f}초")
            del self.start_times[run_id]


3. 이벤트 기반 트리거

워크플로우 상태에 따라 자동 알림이나 후속 조치를 트리거할 수 있습니다.

class AlertCallback(BaseCallbackHandler):
    def on_llm_error(self, error, **kwargs):
        # API 호출 실패 시 알림 트리거
        send_alert(f"LLM 오류 발생: {error}")
    
    def on_chain_end(self, outputs, **kwargs):
        # 응답을 데이터베이스에 저장
        save_to_database(outputs)

 

결론

LangChain의 Callbacks 모듈은 AI 애플리케이션의 관찰성을 향상시키고, 디버깅을 간소화하며, 전반적인 효율성을 개선하는 강력한 도구입니다. 실시간 이벤트 추적, 성능 모니터링, 디버깅 및 로깅 기능을 통해 개발자는 AI 워크플로우의 모든 단계를 더 잘 이해하고 제어할 수 있습니다.
콜백 시스템의 유연성과 확장성을 활용하면 복잡한 AI 애플리케이션을 더 쉽게 관리하고, 성능을 최적화하며, 사용자 경험을 향상시킬 수 있습니다.

반응형