도구 및 함수 스키마
함수 호출을 위한 스키마
도구 및 함수 스키마은(는) CoddyKit의 무료 AI Prompt Engineering 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Prompt Engineering 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.
도구는 스키마에 의도를 더한 것입니다
함수 호출을 사용하면 모델이 코드에 작업을 실행하도록 요청할 수 있습니다. 각 도구는 이름, 설명(사용 시점), 매개변수용 JSON 스키마로 선언됩니다.
모델은 코드를 실행하지 않고, 실행 환경이 전달하는 구조화된 호출 요청을 출력합니다. 스키마가 인수를 구문 분석할 수 있게 합니다.
도구 정의의 구성
도구 정의는 스키마로 감싼 기능 선언입니다.
{
'type': 'function',
'function': {
'name': 'get_weather',
'description': 'Get current weather for a city. Use when the user asks about weather.',
'parameters': {
'type': 'object',
'properties': {
'city': {'type': 'string'},
'units': {'type': 'string', 'enum': ['celsius', 'fahrenheit']}
},
'required': ['city', 'units'],
'additionalProperties': False
}
}
}선택을 좌우하는 설명
사용 가능한 도구가 많을 때 모델은 주로 설명을 바탕으로 선택합니다. 설명을 결정 규칙으로 작성하십시오.
- 언제 사용할지와 언제 사용하지 않을지를 명시하십시오.
- 비슷한 도구와의 차이를 분명히 하십시오.
- 필요한 사전 조건을 언급하십시오.
잘못된 도구 선택은 잘못된 스키마로 인한 인수 오류보다 설명이 부실해서 발생하는 경우가 더 많습니다.
호출-실행-반환 반복
함수 호출은 여러 차례에 걸쳐 진행됩니다. 모델이 호출을 출력하고, 실행한 뒤 결과를 append하면 모델이 계속 진행합니다.
resp = client.chat.completions.create(model='gpt-4o', messages=msgs, tools=tools)
call = resp.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)
result = dispatch(call.function.name, args)
msgs.append(resp.choices[0].message)
msgs.append({'role': 'tool', 'tool_call_id': call.id,
'content': json.dumps(result)})
# call the model again to continue with the tool result병렬 도구 호출
최신 모델은 작업이 독립적일 때 한 번의 차례에 여러 도구 호출을 요청할 수 있습니다. 실행 환경은 모든 tool_calls를 순회하여 실행하고(이상적으로는 동시에), 각 tool_call_id에 대해 하나의 도구 메시지를 반환해야 합니다.
호출이 하나뿐이라고 가정하지 말고 항상 반복하십시오.
for call in resp.choices[0].message.tool_calls:
args = json.loads(call.function.arguments)
result = dispatch(call.function.name, args)
msgs.append({'role': 'tool', 'tool_call_id': call.id,
'content': json.dumps(result)})도구 사용 강제 및 제한
tool_choice로 선택을 제어하십시오.
auto— 모델이 결정합니다.required— 어떤 도구든 반드시 호출해야 합니다.{name: ...}— 특정 도구를 강제합니다.none— 이번 차례에는 도구를 비활성화합니다.
특정 도구를 강제하면 함수 호출이 순수한 구조화 추출로 바뀝니다.
client.chat.completions.create(
model='gpt-4o', messages=msgs, tools=tools,
tool_choice={'type': 'function', 'function': {'name': 'get_weather'}}
)실행 전 인수 검증
엄격한 스키마를 사용하더라도 도구 인수를 신뢰할 수 없는 입력으로 다루십시오. 실제 시스템(데이터베이스, 결제, 파일 삭제)에 접근하기 전에 스키마에 대해 다시 검증하고 업무 규칙을 적용하십시오.
def dispatch(name, args):
schema = TOOLS[name]['function']['parameters']
jsonschema.validate(args, schema) # defense in depth
if name == 'refund' and args['amount'] > MAX_AUTO_REFUND:
return {'error': 'requires human approval'}
return HANDLERS[name](**args)도구 오류는 프로토콜의 일부입니다
도구가 실패하면 예외를 발생시키는 대신 도구 결과로 구조화된 오류를 반환하십시오. 그러면 모델이 사과하거나, 수정된 인수로 재시도하거나, 다른 도구를 선택할 수 있습니다.
오류를 조치 가능하게 만드십시오. 이유와 안전한 경우 복구를 위한 힌트를 포함하십시오.
{'status': 'error',
'code': 'CITY_NOT_FOUND',
'message': 'No city named Xyz. Ask the user to clarify the city.'}도구 범위를 작게 유지하십시오
수십 개의 도구는 선택 정확도를 떨어뜨리고 토큰 비용을 부풀립니다(모든 스키마가 매 차례 문맥에 포함됩니다). 완화 방법은 다음과 같습니다.
action열거형을 사용하는 하나의 도구 뒤에 관련 작업을 묶으십시오.- 현재 상태와 관련된 도구만 동적으로 노출하십시오.
- 이름 공간을 사용하여 비슷한 도구 사이의 혼동을 줄이십시오.
부작용에 대비한 스키마 강화
파괴적 작업의 경우 안전성을 스키마 자체에 인코딩하십시오. 명시적인 확인 필드를 필수로 지정하고, 범위를 제한하며, 자유 형식 식별자 대신 열거형이나 검증된 패턴을 사용하십시오.
{
'name': 'delete_records',
'parameters': {
'type': 'object',
'properties': {
'table': {'type': 'string', 'enum': ['logs', 'temp_cache']},
'confirm': {'type': 'boolean'},
'max_rows': {'type': 'integer', 'minimum': 1, 'maximum': 1000}
},
'required': ['table', 'confirm', 'max_rows'],
'additionalProperties': False
}
}도구 정의 테스트
도구 선택을 측정 가능한 동작으로 다루십시오. 예상되는 도구와 인수에 매핑된 프롬프트 평가 집합을 구축한 다음, 모델이 올바르게 선택하는지 확인하십시오. 설명의 문구를 바꾸거나 새 도구를 추가할 때 회귀 현상을 추적하십시오.
cases = [
{'prompt': 'Whats it like in Paris?', 'expect_tool': 'get_weather'},
{'prompt': 'Convert 10 USD to EUR', 'expect_tool': 'fx_convert'}
]
for c in cases:
assert run(c['prompt']).tool_name == c['expect_tool']빠른 확인
모델이 한 번의 어시스턴트 차례에 서로 독립적인 도구 호출 두 개를 생성합니다. 런타임은 무엇을 해야 합니까?
요약
실제 도구 및 함수 스키마:
- 설명이 선택을 좌우하고, 스키마가 파싱 가능한 인수를 좌우합니다.
- 모든 도구 호출을 순회하고 병렬 실행을 지원합니다.
- 도구 선택으로 동작을 제어하고, 순수 추출에는 도구를 강제합니다.
- 인수를 다시 검증하고 구조화된 오류를 반환합니다.
- 도구 표면을 작게 유지하고 파괴적 작업을 강화합니다.
다음 주제: 출력이 여전히 잘못될 때를 위한 복구 및 검증 흐름입니다.
자주 묻는 질문
“도구 및 함수 스키마” 강의는 무료인가요?
네 — “도구 및 함수 스키마” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Prompt Engineering 강의 전체를 잠금 해제할 수 있습니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.
“도구 및 함수 스키마”에서 뭘 배우나요?
함수 호출을 위한 스키마 브라우저에서 직접 실행하는 실습 코드로 AI Prompt Engineering을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AI Prompt Engineering을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AI Prompt Engineering은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“도구 및 함수 스키마” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AI Prompt Engineering 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AI Prompt Engineering 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 구조화된 출력이 필요한 이유
- 프롬프트의 JSON 스키마
- 도구 및 함수 스키마
- 수정 및 검증 반복 과정