byteforce

CPN 한국어 자습서 · 러닝패스 2 / 4 — Building with the Claude API

도구 사용

도구 함수

Tool functions

첫 번째 도구를 만듭니다 — Claude가 현재 날짜·시각을 가져오게 하는 도구입니다. 도구를 추가할 때의 첫 단계는 언제나 도구 함수(tool function)를 작성하는 것입니다. 도구 함수는 Claude가 추가 정보가 필요하다고 판단할 때 우리가 자동으로 실행하는 평범한 파이썬 함수입니다.

전체 내레이션영상 나레이션 한국어 번역 (전체)

Stephen Grider · Anthropic 기술 스태프

첫 번째 도구 작업을 시작해 봅니다. 이 도구는 Claude가 현재 날짜·시각을 가져오게 해 줍니다. 더 진행하기 전에, 여러분이 쓸 새 노트북을 만들어 두었다는 걸 알려 드립니다. 이 노트북은 001_tools라는 제목이고 이 강의에 첨부돼 있습니다. 안에는 코스에서 이미 작성한 코드가 많이 들어 있고, 추가로 ‘Tools and Schemas’라는 셀을 새로 넣어 두었습니다. 그 셀에는 시간을 아끼기 위한 보일러플레이트 코드가 많습니다 — 특히 나중에 쓸 add_duration_to_datetime 함수가 들어 있습니다. 이 노트북을 받아 출발점으로 쓰세요.

이제 첫 도구 ‘현재 날짜·시각 가져오기’ 구현에 집중합니다. 전체 과정을 단계별로 안내합니다. 노트북에 코드를 꽤 많이 쓰겠지만, 거기 설정해 둔 헬퍼 함수(add_user_message, add_assistant_message 등)는 쓰지 않습니다. 그 함수들은 도구에 맞게 조금 리팩터링해야 하는데, 그걸 도구 학습과 동시에 하면 헷갈리기 때문입니다. 그래서 지금은 헬퍼 없이 도구 호출 자체에만 집중합니다.

전체 과정을 여러 단계로 나눴습니다. 1단계는 도구를 추가할 때마다 늘 하는 일 — 도구 함수를 작성하는 것입니다. 도구 함수는 Claude가 사용자를 돕기 위해 추가 정보가 필요하다고 판단할 때 어느 시점에 자동으로 실행되는, 평범한 파이썬 함수입니다. 오른쪽에 예시로 get_weather 함수를 두었습니다 — Claude가 세계 어느 위치의 현재 날씨를 가져올 때 쓸 수 있는 함수죠.

도구 함수에는 몇 가지 모범 사례가 있습니다. 첫째, 이름이 잘 붙고 설명적인 인자를 씁니다. 함수 자체와 받는 인자가 적당히 잘 명명돼 무엇에 관한 것인지 힌트를 줘야 합니다. 둘째, 입력을 검증하고 뭔가 잘못되면 에러를 냅니다. 예를 들어 location을 못 받았거나 빈 문자열이면 즉시 에러를 냅니다. 셋째, 에러를 낼 때는 의미 있는 에러 메시지를 담습니다.

에러 메시지가 중요한 이유가 있습니다. 도구 함수 호출이 에러로 끝나면, Claude는 그 에러 메시지를 그대로 봅니다. 그리고 에러를 바로잡으려고 도구를 살짝 다르게 다시 호출하기도 합니다. 예를 들어 get_weather에 빈 문자열을 넘겨 맨 위 검증이 실패하고 “location cannot be empty” 에러가 나면, Claude는 그 메시지를 보고 이번엔 빈 문자열이 아닌 값을 넘겨 다시 호출할 수 있습니다.

이제 노트북으로 돌아가 첫 도구 함수를 만듭니다. 목표는 현재 날짜·시각을 가져오는 것입니다. 맨 아래에 새 셀을 추가하고 get_current_datetime이라는 함수를 정의합니다. 인자로 date_format을 받고 기본값을 줍니다 — 조금 복잡한 문자열인데 %Y %m %d 그리고 공백, %H:%M:%S 입니다. 이 문자열은 까다로우니 영상을 멈추고 정확히 같은지 확인하세요.

함수 안에서는 그 date_format으로 현재 날짜·시각을 가져와 형식에 맞춰 반환합니다 — datetime.now().strftime(date_format). 예를 들어 그냥 get_current_datetime()을 호출하면 연-월-일 시:분:초 형식이 나오고, '%H:%M' 같은 커스텀 포맷을 넘기면 시:분만 출력됩니다.

이 함수를 개선하려면 date_format 인자에 검증을 더하면 좋습니다. 형식 문자열이 유효한지 정확히 검사하긴 어렵지만, 적어도 빈 문자열은 아닌지는 확인할 수 있습니다. if not date_format: 으로 빈 값이면 ValueError를 내고 “date_format cannot be empty”라고 알려 줍니다. 솔직히 Claude가 빈 문자열을 넘길 가능성은 낮지만, 혹시라도 그러면 Claude에게 신호를 줘서 어떻게 고칠지 — 빈 값이 아닌 포맷으로 다시 호출하라고 — 알려 주는 셈입니다.

이 장에서 배우는 것What you'll learn

약 5분
1

첨부 노트북 001_tools.ipynb로 시작 — add_duration_to_datetime 보일러플레이트 포함

2

도구 추가의 1단계는 언제나 도구 함수(평범한 파이썬 함수) 작성

3

도구 함수는 Claude가 추가 정보가 필요할 때 우리가 자동 실행한다

4

모범 사례 — 이름 잘 붙은 인자 · 입력 검증 · 의미 있는 에러 메시지

5

에러 메시지는 Claude가 보고 스스로 고쳐 재호출하는 단서가 된다

6

get_current_datetime()strftime으로 현재 시각 반환 + 빈 값 검증

먼저 짚고 갈 용어
도구 함수(tool function)
Claude가 추가 정보가 필요하다고 판단할 때 우리가 자동으로 실행하는 평범한 파이썬 함수. 도구 추가의 첫 단계.
입력 검증(validation)
함수 시작부에서 인자가 올바른지 확인하고, 잘못되면 즉시 에러를 내는 것. 빈 문자열·누락 등을 막는다.
strftime / date_format
datetime을 문자열로 포맷하는 메서드와 그 형식 문자열. 예: %Y-%m-%d %H:%M:%S → 2025-04-03 10:30:00.
의미 있는 에러 메시지
Claude가 그대로 읽고 호출을 바로잡을 수 있도록, 무엇이 잘못됐는지 분명히 적은 메시지.

도구 함수란?

What is a tool function

도구를 추가할 때의 1단계는 언제나 도구 함수를 작성하는 것입니다. 도구 함수는 Claude가 사용자를 돕기 위해 추가 정보가 필요하다고 판단할 때, 우리가 자동으로 실행하는 평범한 파이썬 함수입니다. 시작 전에 첨부된 001_tools.ipynb를 받으세요 — 나중에 쓸 add_duration_to_datetime 보일러플레이트가 들어 있습니다.

오른쪽 같은 get_weather가 도구 함수의 예입니다. Claude가 세계 어느 위치의 현재 날씨가 필요할 때 이 함수를 쓸 수 있습니다.

예시 도구 함수 · get_weather
# 모범 사례를 보여 주는 예시 도구 함수
def get_weather(location):
    # 1) 입력 검증 — 잘못되면 즉시 에러
    if not location:
        raise ValueError("location cannot be empty")

    # 2) 실제 작업 (예: 날씨 API 호출)
    return fetch_weather(location)

도구 함수 모범 사례

Best practices

좋은 도구 함수에는 세 가지 습관이 있습니다. 특히 에러 메시지는 Claude가 그대로 읽고 스스로 고쳐 다시 호출하는 단서가 되므로 중요합니다.

1

이름이 잘 붙은, 설명적인 인자. 함수와 인자 이름만으로 무엇에 관한 것인지 힌트가 되도록 합니다 (예: location, date_format).

2

입력 검증. 함수 시작부에서 인자를 확인하고, 누락·빈 문자열 등 문제가 있으면 즉시 에러를 냅니다.

3

의미 있는 에러 메시지. 무엇이 잘못됐는지 분명히 적습니다. Claude가 그 메시지를 보고 빈 값이 아닌 인자로 재호출해 스스로 바로잡을 수 있습니다.

왜 중요한가

get_weather("")처럼 빈 문자열을 넘기면 1번 검증이 실패하고 “location cannot be empty” 에러가 납니다. Claude는 이 메시지를 보고, 이번엔 실제 위치를 넘겨 다시 호출할 수 있습니다.

첫 도구 함수 작성

get_current_datetime

이제 노트북 맨 아래에 새 셀을 만들고 첫 도구 함수를 작성합니다. 목표는 현재 날짜·시각을 가져오는 것입니다. date_format 인자에 기본값을 주는데, 까다로운 문자열이니 정확히 맞는지 확인하세요.

001_tools.ipynb · get_current_datetime
from datetime import datetime

def get_current_datetime(date_format="%Y-%m-%d %H:%M:%S"):
    return datetime.now().strftime(date_format)

strftime은 현재 시각을 그 형식 문자열에 맞춰 문자열로 만들어 줍니다. 기본값을 쓰면 연-월-일 시:분:초, 커스텀 포맷을 넘기면 원하는 부분만 나옵니다.

호출 예시
get_current_datetime()
# → "2025-04-03 10:30:00"

get_current_datetime("%H:%M")
# → "10:30"

검증 추가 & 정리

Add validation & recap

앞의 모범 사례대로 date_format에 검증을 더합니다. 형식이 완전히 유효한지까지 검사하긴 어렵지만, 적어도 빈 문자열은 막을 수 있습니다.

검증을 더한 최종 버전
from datetime import datetime

def get_current_datetime(date_format="%Y-%m-%d %H:%M:%S"):
    if not date_format:
        raise ValueError("date_format cannot be empty")
    return datetime.now().strftime(date_format)

get_current_datetime("")
# → ValueError: date_format cannot be empty
함수 → 도구 매핑 · 탭을 눌러 비교
파이썬 함수 (우리가 실행)
Claude가 보는 것 · 도구 이름/역할

하나의 도구는 함수(우리가 실행)스키마(Claude가 읽는 설명)가 짝을 이룹니다. 이 레슨에서는 함수를 만들고, 다음 레슨에서 그 함수를 설명하는 스키마를 작성합니다.

핵심 정리
  • 도구 추가의 1단계 = 도구 함수(평범한 파이썬 함수) 작성.
  • 모범 사례 — 잘 붙인 인자 · 입력 검증 · 의미 있는 에러 메시지.
  • 에러 메시지는 Claude가 보고 스스로 고쳐 재호출하는 단서가 된다.
  • get_current_datetime()strftime으로 현재 시각 반환, 빈 date_formatValueError로 막는다.

Q1도구를 추가할 때의 1단계는?

Q2도구 함수에서 에러 메시지를 잘 써야 하는 이유는?

Q3get_current_datetime("")를 호출하면?

MEMBER SESSION REQUIRED · REGISTRATION IS FREE

여기부터는 등록한 분에게 열립니다.

전 코스는 계속 무료입니다. 등록하면 이 코스의 남은 76개 레슨을 끝까지 읽을 수 있습니다.

등록하고 이어서 읽기

이미 등록하셨다면 그때 쓰신 이메일을 넣어 주세요.