
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 애플리케이션을 더 쉽게 관리하고, 성능을 최적화하며, 사용자 경험을 향상시킬 수 있습니다.
'IT기술 > 랭체인 (langchain)' 카테고리의 다른 글
| [LangChain] 효과적인 프롬프트 설계를 위한 프롬프트 템플릿 활용 팁 (0) | 2025.04.26 |
|---|---|
| [LangChain] AI 개발을 위한 첫걸음 – 초보자를 위한 랭체인 설치와 기본 환경 구성 방법 (2) | 2025.04.16 |
| LangChain Agents 모듈 완벽 해부: 동적 의사결정의 핵심 (0) | 2025.03.27 |
| LangChain Chains 모듈 완벽 가이드: 복잡한 작업을 단순화하는 핵심 도구 (2) | 2025.03.24 |
| LangChain Memory 모듈: 대화 맥락 유지를 위한 핵심 기능 (3) | 2025.03.23 |