이 문서에서는 함수 호출 및 이를 생성 AI 애플리케이션 워크플로의 일부로 사용하는 방법을 설명합니다. Databricks 함수 호출은 OpenAI와 호환되며 Foundation Model API의 일부로서 작동할 때와 외부 모델을 서비스하는 엔드포인트를 통해서만 사용할 수 있습니다.
함수 호출이란 무엇인가요?
함수 호출은 LLM의 출력을 제어하여 구조화된 응답을 보다 안정적으로 생성하는 방법을 제공합니다. 함수 호출을 사용하는 경우 JSON 스키마를 사용하여 함수 인수를 설명하여 API 호출의 함수를 설명합니다. LLM 자체는 이러한 함수를 호출하지 않고 사용자가 코드에서 함수를 호출하는 데 사용할 수 있는 JSON 개체를 만듭니다.
Databricks에서 함수 호출의 경우 단계의 기본 시퀀스는 다음과 같습니다.
- 제출된 쿼리 및
tools매개 변수에 정의된 함수 집합을 사용하여 모델을 호출합니다. - 모델은 정의된 함수를 호출할지 여부를 결정합니다. 함수가 호출되면 콘텐츠는 사용자 지정 스키마를 준수하는 문자열의 JSON 개체입니다.
- 코드에서 문자열을 JSON으로 구문 분석하고 제공된 인수가 있는 경우 함수를 호출합니다.
- 구조화된 응답을 새 메시지로 추가하여 모델을 다시 호출합니다. 응답의 구조는
tools에서 이전에 제공한 함수에 의해 정의됩니다 . 여기에서 모델은 결과를 요약하고 해당 요약을 사용자에게 보냅니다.
함수 호출을 사용하는 경우
함수 호출의 예시 사용 사례는 다음과 같습니다.
- 다른 API를 호출하여 질문에 대답할 수 있는 도우미를 만듭니다. 예를 들어
send_email(to: string, body: string)또는current_weather(location: string, unit: 'celsius' | 'fahrenheit')와 같은 함수를 정의할 수 있습니다. - 자연어를 기반으로 API 호출을 정의하고 사용합니다. "누가 내 최고의 고객인지 묻는 질문을 가져와서" 이름이
get_customers(min_revenue: int, created_before: string, limit: int)로 명명된 API 호출을 만들고 그 API를 호출하는 것입니다.
비정형 데이터를 구조화된 데이터로 변환하는 것과 같은 일괄 처리 유추 또는 데이터 처리 작업의 경우 Databricks는 구조적 출력을 사용하는 것이 좋습니다.
지원되는 모델
다음 표에서는 지원되는 모델과 각 모델을 사용할 수 있도록 하는 모델 서비스 기능을 나열합니다. 해당 모델에 대한 해당 모델 개발자 라이선스 및 사용 약관을 참조하세요.
- Foundation Model API에서 사용할 수 있는 모델의 경우 지역 가용성에 대한 파운데이션 모델 API 제한을 참조하세요.
- 외부 모델에서 제공하는 모델의 경우 지역 가용성을 참조하여 지역 가용성을 확인하세요.
중요함
Meta-Llama-3.1-405B-Instruct는 아래에 설명된 대로 사용 중지됩니다. 사용 중단 중에 마이그레이션하는 방법에 대한 권장 대체 모델 및 지침은 사용 중지된 모델을 참조하세요.
- 2026년 2월 15일부터 이 모델은 토큰당 종량제 워크로드에 사용할 수 없습니다.
- 2026년 5월 15일부터 이 모델은 프로비전된 처리량 워크로드에 사용할 수 없습니다.
2024년 12월 11일부터 Meta-Llama-3.3-70B-Instruct는 Foundation Model API의 토큰당 요금 청구 엔드포인트에서 Meta-Llama-3.1-70B-Instruct에 대한 지원을 대체합니다.
| 모델 | 모델 서비스 기능을 사용하여 사용 가능 | 노트 |
|---|---|---|
| 클로드 소네트-4.5 | 파운데이션 모델 API. | 토큰당 지불 엔드포인트에 지원됩니다. |
| Qwen3-Next 80B A3B 지시( 베타) | 파운데이션 모델 API. | 토큰당 지불 엔드포인트에 지원됩니다. |
| GPT OSS 20B | 파운데이션 모델 API. | 토큰당 지불 및 프로비전된 처리량 엔드포인트에서 지원됩니다. |
| GPT OSS 120B | 파운데이션 모델 API. | 토큰당 지불 및 프로비전된 처리량 엔드포인트에서 지원됩니다. |
| 젬마-3-12B | 파운데이션 모델 API. | 토큰당 지불 및 프로비전된 처리량 엔드포인트에서 지원됩니다. |
| 클로드 소네트-4 | 파운데이션 모델 API. | 토큰당 지불 엔드포인트에 지원됩니다. |
| 클로드 오푸스-4.5 | 파운데이션 모델 API. | 토큰당 지불 엔드포인트에 지원됩니다. |
| 클로드 오푸스-4.1 | 파운데이션 모델 API. | 토큰당 지불 엔드포인트에 지원됩니다. |
| claude-3-7-Sonnet | 파운데이션 모델 API. | 토큰당 지불 엔드포인트에 지원됩니다. |
| 메타 라마-4-매버릭 | 파운데이션 모델 API. | 토큰당 지불 및 프로비전된 처리량 워크로드에서 지원됩니다. |
| Meta-Llama-3.3-70B-Instruct | 파운데이션 모델 API. | 토큰당 지불 및 프로비전된 처리량 워크로드에서 지원됩니다. |
| Meta-Llama-3.1-405B-Instruct | 파운데이션 모델 API. | 토큰당 지불 및 프로비전된 처리량 워크로드에서 지원됩니다. |
| Meta-Llama-3.1-8B-Instruct | 파운데이션 모델 API. | 토큰당 지불 및 프로비전된 처리량 워크로드에서 지원됩니다. |
| gpt-4o | 외부 모델. | |
| gpt-4o-2024-08-06 | 외부 모델. | |
| gpt-4o-2024-05-13 | 외부 모델. | |
| gpt-4o-mini | 외부 모델. | |
| 클로드-3-5-소네트-최신 버전 | 외부 모델. | 인류학적 모델 제공자 |
| claude-3-5-haiku-latest | 외부 모델. | 인류학적 모델 제공자 |
| claude-3-5-opus-latest | 외부 모델. | 인류학적 모델 제공자 |
| claude-3-5-sonnet-20241022 | 외부 모델. | Anthropic의 모델 제공자입니다. 이 모델은 컴퓨터 사용(베타)을 이용한 도구 호출을 지원합니다. |
| claude-3-5-haiku-20241022 | 외부 모델. | 인류학적 모델 제공자 |
| 클로드-3-5-소네트-20240620 | 외부 모델. | 인류학적 모델 제공자 |
| claude-3-haiku-20240307 | 외부 모델. | 인류학적 모델 제공자 |
| claude-3-opus-20240229 | 외부 모델. | 인류학적 모델 제공자 |
| claude-3-sonnet-20240229 | 외부 모델. | 인류학적 모델 제공자 |
| claude-3-5-sonnet-20241022-v2:0 | 외부 모델. | 베드록 엔트로픽 모델 제공자. 이 모델은 컴퓨터 사용(베타)을 이용한 도구 호출을 지원합니다. |
| claude-3-5-haiku-20241022-v1:0 | 외부 모델. | Bedrock Anthropic 모델 제공자 |
| claude-3-5-sonnet-20240620-v1:0 | 외부 모델. | Bedrock Anthropic 모델 제공자 |
| claude-3-sonnet-20240229-v1:0 | 외부 모델. | Bedrock Anthropic 모델 제공자 |
| claude-3-opus-20240229-v1:0 | 외부 모델. | Bedrock Anthropic 모델 제공자 |
함수 호출 사용
생성 AI 애플리케이션에서 함수 호출을 사용하려면 함수 parameters 및 description을 제공해야 합니다.
tool_choice의 기본 동작은 "auto"입니다. 이를 통해 모델은 호출할 함수와 호출 여부를 결정할 수 있습니다.
사용 사례에 따라 기본 동작을 사용자 지정할 수 있습니다. 옵션은 다음과 같습니다.
-
tool_choice: "required"설정합니다. 이 시나리오에서 모델은 항상 하나 이상의 함수를 호출합니다. 모델은 호출할 함수 또는 함수를 선택합니다. -
tool_choice: {"type": "function", "function": {"name": "my_function"}}설정합니다. 이 시나리오에서 모델은 특정 함수만 호출합니다. - 함수 호출을 사용하지 않도록 설정하고 모델에 사용자 연결 메시지만 생성하도록
tool_choice: "none"설정합니다.
다음은 OpenAI SDK 및 해당 tools 매개 변수를 사용하는 단일 턴 예제입니다. 추가 구문 세부 정보는 채팅 작업을 참조하세요.
중요함
공개 미리 보기 중에 Databricks에 대한 함수 호출은 단일 턴 함수 호출에 최적화됩니다.
import os
import json
from openai import OpenAI
DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')
client = OpenAI(
api_key=DATABRICKS_TOKEN,
base_url=DATABRICKS_BASE_URL
)
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": [
"celsius",
"fahrenheit"
]
}
}
}
}
}
]
messages = [{"role": "user", "content": "What is the current temperature of Chicago?"}]
response = client.chat.completions.create(
model="databricks-meta-llama-3-3-70b-instruct",
messages=messages,
tools=tools,
tool_choice="auto",
)
print(json.dumps(response.choices[0].message.model_dump()['tool_calls'], indent=2))
이 매개변수는 Claude 모델을 위해 Computer Use (beta)도 지원합니다.
JSON 스키마
파운데이션 모델 API는 OpenAI에서 허용하는 함수 정의를 광범위하게 지원합니다. 그러나 함수 호출 정의에 더 간단한 JSON 스키마를 사용하면 고품질 함수 호출 JSON 생성이 발생합니다. 더 높은 품질의 생성을 촉진하기 위해 Foundation Model API는 JSON 스키마 사양의 하위 집합만 지원합니다.
다음 함수 호출 정의 키는 지원되지 않습니다.
-
pattern을 사용한 정규식. - 복잡한 중첩 또는 스키마 구성 및 유효성 검사에 다음을 사용합니다:
anyOf,oneOf,allOf,prefixItems, 또는$ref. - 특수한 경우인
[type, “null”]를 제외하면, 목록에는 하나는 유효한 JSON 형식이고 다른 하나는"null"인 형식 목록이 포함됩니다.
또한 다음과 같은 제한 사항이 적용됩니다.
- JSON 스키마에 지정된 최대 키 수는
16. - 파운데이션 모델 API는 개체 및 배열에 대한 길이 또는 크기 제약 조건을 적용하지 않습니다.
- 여기에는
maxProperties,minProperties및maxLength와 같은 키워드가 포함됩니다.
- 여기에는
- 중첩된 JSON 스키마는 품질이 저하됩니다. 가능한 경우 더 나은 결과를 위해 JSON 스키마를 평면화해 봅니다.
토큰 사용량
프롬프트 주입 및 기타 기술은 도구 호출의 품질을 향상시키는 데 사용됩니다. 이렇게 하면 모델에서 사용하는 입력 및 출력 토큰의 수에 영향을 미치므로 청구에 영향을 줍니다. 사용하는 도구가 많을수록 입력 토큰이 늘어나게 됩니다.
제한 사항
다음은 공개 미리 보기 중에 함수 호출에 대한 제한 사항입니다.
- Databricks를 호출하는 다중 턴 함수의 경우 지원되는 Claude 모델을 권장합니다.
- Llama 4 Maverick를 사용하는 경우 현재 함수 호출 솔루션은 단일 턴 함수 호출에 최적화됩니다. 다중 턴 함수 호출은 미리 보기 중에 지원되지만 개발 중입니다.
- 병렬 함수 호출은 지원되지 않습니다.
-
tools에서 정의할 수 있는 최대 함수 수는 32개입니다. - 프로비전된 처리량 지원의 경우 함수 호출은 새 엔드포인트에서만 지원됩니다. 이전에 만든 엔드포인트에 함수 호출을 추가할 수 없습니다.
Notebook 예제
자세한 함수 호출 예제는 다음 Notebook을 참조하세요.