Azure Databricks에서 함수 호출
Important
이 기능은 공개 미리 보기로 제공되며, 토큰당 종량제 또는 프로비전된 처리량 엔드포인트 모두에서 지원됩니다.
이 문서에서는 함수 호출 및 이를 생성 AI 애플리케이션 워크플로의 일부로 사용하는 방법을 설명합니다. Databricks 함수 호출은 OpenAI와 호환되며 파운데이션 모델 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 제한을 참조하세요.
- 외부 모델에서 사용할 수 있는 모델의 경우 지역 가용성에 대한 지역 가용성을 참조하세요.
Important
Meta Llama 3.1은 LLAMA 3.1 Community License(Copyright © Meta Platforms, Inc. All Rights Reserved)에 따라 라이선스가 부여됩니다. 고객은 해당 모델 라이선스를 준수할 책임이 있습니다.
모델 | 모델 서비스 기능을 사용하여 사용 가능 | 주의 |
---|---|---|
Meta-Llama-3.1-405B-Instruct | 파운데이션 모델 API. | 토큰당 지불 및 프로비전된 처리량 워크로드에서 지원됩니다. |
Meta-Llama-3.1-70B-Instruct | 파운데이션 모델 API. | 토큰당 지불 및 프로비전된 처리량 워크로드에서 지원됩니다. |
Meta-Llama-3.1-8B-Instruct | 파운데이션 모델 API. | 프로비전된 처리량 워크로드에서만 지원됩니다. |
gpt-4o | 외부 모델. | |
gpt-4o-2024-08-06 | 외부 모델. | |
gpt-4o-2024-05-13 | 외부 모델. | |
gpt-4o-mini | 외부 모델. |
함수 호출 사용
생성 AI 애플리케이션에서 함수 호출을 사용하려면 함수 parameters
및 description
을 제공해야 합니다.
tool_choice
의 기본 동작은 "auto"
입니다. 이를 통해 모델은 호출할 함수와 호출 여부를 결정할 수 있습니다.
사용 사례에 따라 기본 동작을 사용자 지정할 수 있습니다. 옵션은 다음과 같습니다.
tool_choice: "required"
을 설정합니다. 이 시나리오에서 모델은 항상 하나 이상의 함수를 호출합니다. 모델은 호출할 함수 또는 함수를 선택합니다.tool_choice: {"type": "function", "function": {"name": "my_function"}}
을 설정합니다. 이 시나리오에서 모델은 특정 함수만 호출합니다.- 함수 호출을 사용하지 않도록
tool_choice: "none"
을 설정하고 모델에서 사용자 관련 메시지만 생성하도록 설정합니다.
다음은 OpenAI SDK 및 해당 tools
매개 변수를 사용하는 단일 턴 예제입니다. 추가 구문 세부 정보는 채팅 작업을 참조하세요.
Important
공개 미리 보기 중에 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-1-70b-instruct",
messages=messages,
tools=tools,
tool_choice="auto",
)
print(json.dumps(response.choices[0].message.model_dump()['tool_calls'], indent=2))
JSON 스키마
파운데이션 모델 API는 OpenAI에서 허용하는 함수 정의를 광범위하게 지원합니다. 그러나 함수 호출 정의에 더 간단한 JSON 스키마를 사용하면 고품질 함수 호출 JSON 생성이 발생합니다. 더 높은 품질의 생성을 촉진하기 위해 Foundation Model API는 JSON 스키마 사양의 하위 집합만 지원합니다.
다음 함수 호출 정의 키는 지원되지 않습니다.
pattern
을 사용한 정규식.- 다음을 사용하는 복합 중첩 또는 스키마 컴퍼지션 및 유효성 검사:
anyOf
,oneOf
,allOf
,prefixItems
, 또는$ref
. - 목록의 한 형식이 유효한 JSON 형식이고 다른 형식이
"null"
인 특수한 경우[type, “null”]
를 제외한 형식 목록
또한 다음과 같은 제한 사항이 적용됩니다.
- JSON 스키마에 지정된 최대 키 수는
16
입니다. - 파운데이션 모델 API는 개체 및 배열에 대한 길이 또는 크기 제약 조건을 적용하지 않습니다.
- 여기에는
maxProperties
,minProperties
및maxLength
와 같은 키워드가 포함됩니다.
- 여기에는
- 중첩된 JSON 스키마는 품질이 저하됩니다. 가능한 경우 더 나은 결과를 위해 JSON 스키마를 평면화해 봅니다.
토큰 사용량
프롬프트 주입 및 기타 기술은 도구 호출의 품질을 향상시키는 데 사용됩니다. 이렇게 하면 모델에서 사용하는 입력 및 출력 토큰의 수에 영향을 미치므로 청구에 영향을 줍니다. 사용하는 도구가 많을수록 입력 토큰이 늘어나게 됩니다.
제한 사항
다음은 공개 미리 보기 중에 함수 호출에 대한 제한 사항입니다.
- 현재 함수 호출 솔루션은 단일 턴 함수 호출에 최적화되어 있습니다. 다중 턴 함수 호출은 미리 보기 중에 지원되지만 개발 중입니다.
- 병렬 함수 호출은 지원되지 않습니다.
tools
에서 정의할 수 있는 최대 함수 수는 32개입니다.- 프로비전된 처리량 지원의 경우 함수 호출은 새 엔드포인트에서만 지원됩니다. 이전에 만든 엔드포인트에 함수 호출을 추가할 수 없습니다.
Notebook 예제
자세한 함수 호출 예제는 다음 Notebook을 참조하세요.