함수 호출 정의 만들기
모델에 도구를 붙일 때 파라미터를 JSON Schema로 적어야 하는데, 손으로 쓰면 required를 빠뜨리거나 중첩 객체의 type을 잊습니다. 그 실수는 모델이 엉뚱한 인자를 넘겨야 드러납니다. 받고 싶은 인자를 예시로 넣으면 스키마를 뽑아 드립니다.
{
"name": "get_weather",
"description": "도시의 날씨를 가져온다",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": ""
},
"days": {
"type": "integer",
"description": ""
},
"unit": {
"type": "string",
"description": ""
}
},
"required": [
"city",
"days",
"unit"
],
"description": ""
}
}예시에 있던 인자는 모두 required 로 둡니다 — 빼는 편이 넣는 것보다 쉽습니다. description 은 비워 두었으니 채워 넣으세요. 예시에 없던 선택 인자는 잡히지 않습니다.
자주 묻는 질문
OpenAI와 Anthropic이 왜 다른가요?
감싸는 모양이 다릅니다. OpenAI는 type과 function으로 한 겹 더 감싸고 파라미터 이름이 parameters이며, Anthropic은 한 겹 덜 감싸고 input_schema를 씁니다. 안에 들어가는 JSON Schema 자체는 같아서 둘 다 함께 냅니다.
description은 왜 비어 있나요?
사람이 채워야 합니다. 모델이 이 도구를 언제 쓸지 판단하는 근거가 그 문장이라, 비워 두면 도구가 겉돕니다. 자동으로 지어 넣으면 그럴듯하지만 틀린 설명이 붙어 더 나쁩니다.
선택 인자는 어떻게 하나요?
예시에 있던 것은 일단 모두 required로 둡니다. 빼는 편이 넣는 것보다 쉽기 때문입니다. 예시에 없던 인자는 아예 잡히지 않으니 손으로 더하세요.
붙여넣은 코드가 서버로 가나요?
가지 않습니다. 브라우저 안에서만 처리하고 어디에도 보내거나 저장하지 않습니다. 사내 설정 파일이나 운영 쿼리처럼 밖으로 내보내기 곤란한 것도 그래서 쓸 수 있습니다. 인터넷을 끊고도 동작합니다.