메인 콘텐츠로 건너뛰기
도구 호출 훅(Tool Call Hooks)은 에이전트 작업 중 도구 실행에 대한 세밀한 제어를 제공합니다. 이러한 훅을 사용하면 도구 호출을 가로채고, 입력을 수정하고, 출력을 변환하고, 안전 검사를 구현하고, 포괄적인 로깅 또는 모니터링을 추가할 수 있습니다.

개요

도구 훅은 두 가지 중요한 시점에 실행됩니다:
  • 도구 호출 전: 입력 수정, 매개변수 검증 또는 실행 차단
  • 도구 호출 후: 결과 변환, 출력 정제 또는 실행 세부사항 로깅

훅 타입

도구 호출 전 훅

모든 도구 실행 전에 실행되며, 다음을 수행할 수 있습니다:
  • 도구 입력 검사 및 수정
  • 조건에 따라 도구 실행 차단
  • 위험한 작업에 대한 승인 게이트 구현
  • 매개변수 검증
  • 도구 호출 로깅
시그니처:

도구 호출 후 훅

모든 도구 실행 후에 실행되며, 다음을 수행할 수 있습니다:
  • 도구 결과 수정 또는 정제
  • 메타데이터 또는 서식 추가
  • 실행 결과 로깅
  • 결과 검증 구현
  • 출력 형식 변환
시그니처:

도구 훅 컨텍스트

ToolCallHookContext 객체는 도구 실행 상태에 대한 포괄적인 액세스를 제공합니다:

도구 입력 수정

중요: 항상 도구 입력을 제자리에서 수정하세요:

등록 방법

1. 데코레이터 기반 등록 (권장)

더 깔끔한 구문을 위해 데코레이터를 사용합니다:

2. 크루 범위 훅

특정 크루 인스턴스에 대한 훅을 등록합니다:

일반적인 사용 사례

1. 안전 가드레일

2. 사람의 승인 게이트

3. 입력 검증 및 정제

4. 결과 정제

5. 도구 사용 분석

6. 속도 제한

7. 디버그 로깅

훅 관리

훅 등록 해제

훅 지우기

고급 패턴

조건부 훅 실행

컨텍스트 인식 입력 수정

모범 사례

  1. 훅을 집중적으로 유지: 각 훅은 단일 책임을 가져야 합니다
  2. 무거운 계산 피하기: 훅은 모든 도구 호출마다 실행됩니다
  3. 오류를 우아하게 처리: try-except를 사용하여 훅 실패 방지
  4. 타입 힌트 사용: 더 나은 IDE 지원을 위해 ToolCallHookContext 활용
  5. 차단 조건 문서화: 도구가 차단되는 시기/이유를 명확히 하세요
  6. 훅을 독립적으로 테스트: 프로덕션에서 사용하기 전에 단위 테스트
  7. 테스트에서 훅 지우기: 테스트 실행 간 clear_all_tool_call_hooks() 사용
  8. 제자리에서 수정: 항상 context.tool_input을 제자리에서 수정하고 교체하지 마세요
  9. 중요한 결정 로깅: 특히 도구 실행을 차단할 때
  10. 성능 고려: 가능한 경우 비용이 많이 드는 검증을 캐시

오류 처리

타입 안전성

문제 해결

훅이 실행되지 않음

  • 크루 실행 전에 훅이 등록되었는지 확인
  • 이전 훅이 False를 반환했는지 확인 (실행 및 후속 훅 차단)
  • 훅 시그니처가 예상 타입과 일치하는지 확인

입력 수정이 작동하지 않음

  • 제자리 수정 사용: context.tool_input['key'] = value
  • 딕셔너리를 교체하지 마세요: context.tool_input = {}

결과 수정이 작동하지 않음

  • 후 훅에서 수정된 문자열을 반환
  • None을 반환하면 원본 결과가 유지됩니다
  • 도구가 실제로 결과를 반환했는지 확인

도구가 예기치 않게 차단됨

  • 차단 조건에 대한 모든 전(before) 훅 확인
  • 훅 실행 순서 확인
  • 어떤 훅이 차단하는지 식별하기 위해 디버그 로깅 추가

결론

도구 호출 훅은 CrewAI에서 도구 실행을 제어하고 모니터링하는 강력한 기능을 제공합니다. 이를 사용하여 안전 가드레일, 승인 게이트, 입력 검증, 결과 정제, 로깅 및 분석을 구현하세요. 적절한 오류 처리 및 타입 안전성과 결합하면, 훅을 통해 포괄적인 관찰성을 갖춘 안전하고 프로덕션 준비가 된 에이전트 시스템을 구축할 수 있습니다.