Functie aanroepen in Azure Databricks
Belangrijk
Deze functie bevindt zich in Openbare Preview en wordt ondersteund in:
- Foundation Model-API's betalen per token
- De toegewezen doorvoer van Foundation Model API's
- Eindpunten die externe modellen aanbieden
In dit artikel wordt het aanroepen van functies beschreven en hoe u deze kunt gebruiken als onderdeel van uw generatieve AI-toepassingswerkstromen. Databricks Function Calling is OpenAI-compatibel en is alleen beschikbaar tijdens het serveren van modellen als onderdeel van Foundation Model-API's en serverendpunten die externe modellenbedienen.
Wat is het aanroepen van functies?
Functie-aanroepen biedt een manier om de uitvoer van LLM's te beheren, zodat ze gestructureerde antwoorden betrouwbaarder genereren. Wanneer u een functieoproep gebruikt, beschrijft u functies in de API-aanroep door de functieargumenten te beschrijven met behulp van een JSON-schema. De LLM zelf roept deze functies niet aan, maar maakt in plaats daarvan een JSON-object dat gebruikers kunnen gebruiken om de functies in hun code aan te roepen.
Voor functie-aanroepen op Databricks zijn de basisvolgorde van de stappen als volgt:
- Roep het model aan met behulp van de ingediende query en een set functies die zijn gedefinieerd in de parameter
tools
. - Het model bepaalt of de gedefinieerde functies al dan niet moeten worden aangeroepen. Wanneer de functie wordt aangeroepen, is de inhoud een JSON-object met tekenreeksen die voldoen aan uw aangepaste schema.
- Parseer de tekenreeksen in JSON in uw code en roep uw functie aan met de opgegeven argumenten als deze bestaan.
- Roep het model opnieuw aan door het gestructureerde antwoord toe te voegen als een nieuw bericht. De structuur van het antwoord wordt gedefinieerd door de functies die u eerder hebt opgegeven.
tools
Vanaf hier geeft het model een overzicht van de resultaten en verzendt het die samenvatting naar de gebruiker.
Wanneer gebruikt u functie-aanroepen
Hier volgen voorbeelden van use cases voor functie-aanroepen:
- Maak assistenten die vragen kunnen beantwoorden door andere API's aan te roepen. U kunt bijvoorbeeld functies zoals
send_email(to: string, body: string)
ofcurrent_weather(location: string, unit: 'celsius' | 'fahrenheit')
definieëren. - API-aanroepen definiëren en gebruiken op basis van natuurlijke taal. Zoals het nemen van de verklaring: 'Wie zijn mijn belangrijkste klanten?' en dat omzetten in een API-aanroep genaamd
get_customers(min_revenue: int, created_before: string, limit: int)
en vervolgens die API aanroepen.
Voor batchdeductie- of gegevensverwerkingstaken, zoals het converteren van ongestructureerde gegevens naar gestructureerde gegevens. Databricks raadt aan gestructureerde uitvoer te gebruiken.
Ondersteunde modellen
De volgende tabel vermeldt de ondersteunde modellen en toont welke functie voor modelverwerking elk model beschikbaar maakt.
- Zie de limieten van Basismodel-API's voor de beschikbaarheid van regio's voor modellen die door Foundation Model-API's beschikbaar worden gesteld.
- Zie Regiobeschikbaarheid voor de beschikbaarheid van regio's voor modellen die door Externe modellen beschikbaar zijn gesteld.
Belangrijk
Vanaf 11 december 2024 vervangt Meta-Llama-3.3-70B-Instruct de ondersteuning voor Meta-Llama-3.1-70B-Instruct in de pay-per-token-eindpunten van de Foundation Model APIs.
Belangrijk
Meta Llama 3.3 is gelicentieerd onder de LLAMA 3.3 Community License, Copyright © Meta Platforms, Inc. Alle rechten voorbehouden. Klanten zijn verantwoordelijk voor het waarborgen van hun naleving van de voorwaarden van deze licentie en de Llama 3.3 Acceptabel gebruiksbeleid.
Meta Llama 3.1 is gelicentieerd onder de LLAMA 3.1 Community License, Copyright © Meta Platforms, Inc. Alle rechten voorbehouden. Klanten zijn verantwoordelijk voor het garanderen van naleving van toepasselijke modellicenties.
Modelleren | Beschikbaar gemaakt met behulp van de functie voor modelbediening | Opmerkingen |
---|---|---|
Meta-Llama-3.3-70B-Instruct | Foundation Model API's | Ondersteund voor workloads met betaal per token en geprovisioneerde doorvoer. |
Meta-Llama-3.1-405B-Instruct | Foundation Model-API's | Ondersteund voor workloads met betalen per token en geprovisioneerde doorvoer. |
Meta-Llama-3.1-8B-Instruct | Foundation Model API's | Alleen ondersteund voor geprovisioneerde doorvoerworkloads. |
gpt-4o | Externe modellen | |
gpt-4o-2024-08-06 | Externe modellen | |
gpt-4o-2024-05-13 | Externe modellen | |
gpt-4o-mini | Externe modellen | |
claude-3-5-sonnet-latest | Externe modellen | Antropische modelleverancier |
claude-3-5-haiku-latest | Externe modellen | Antropisch modelaanbieder |
claude-3-5-opus-latest | Externe modellen | Leverancier van antropische modellen |
claude-3-5-sonnet-20241022 | Externe modellen | Antropisch modelaanbieder. Dit model ondersteunt het aanroepen van hulpprogramma's met behulp van Computergebruik (bèta). |
claude-3-5-haiku-20241022 | Externe modellen | Leverancier van antropische modellen |
claude-3-5-sonnet-20240620 | Externe modellen | Antropisch modelaanbieder |
claude-3-haiku-20240307 | Externe modellen | Antropisch modelaanbieder |
claude-3-opus-20240229 | Externe modellen | Antropisch modelleverancier |
claude-3-sonnet-20240229 | Externe modellen | Anthropisch modelaanbieder |
claude-3-5-sonnet-20241022-v2:0 | Externe modellen | Bedrock Anthropic modelleverancier. Dit model ondersteunt het aanroepen van hulpprogramma's met behulp van Computergebruik (bèta). |
claude-3-5-haiku-20241022-v1:0 | Externe modellen | Bedrock Anthropic-modelleverancier |
claude-3-5-sonnet-20240620-v1:0 | Externe modellen | Bedrock Anthropic-modelleverancier |
claude-3-sonnet-20240229-v1:0 | Externe modellen | Bedrock Anthropic-modelleverancier |
claude-3-opus-20240229-v1:0 | Externe modellen | Bedrock Anthropic-modelleverancier |
Gebruik van functieaanroep
Om functie-aanroepen te gebruiken met uw generatieve AI-toepassing, moet u een functie parameters
en een description
bieden.
Het standaardgedrag voor tool_choice
is "auto"
. Hiermee kan het model bepalen welke functies moeten worden aangeroepen en of ze moeten worden aangeroepen.
U kunt het standaardgedrag aanpassen, afhankelijk van uw use-case. Hieronder ziet u de volgende opties:
- Stel
tool_choice: "required"
in. In dit scenario roept het model altijd een of meer functies aan. Het model selecteert welke functie of functies moeten worden aangeroepen. - Stel
tool_choice: {"type": "function", "function": {"name": "my_function"}}
in. In dit scenario roept het model alleen een specifieke functie aan. - Stel
tool_choice: "none"
in om functieaanroepen uit te schakelen en het model alleen een gebruikersgericht bericht te laten genereren.
Hier volgt een voorbeeld van één beurt met behulp van de OpenAI SDK en tools
de bijbehorende parameter. Zie chattaak voor aanvullende syntaxisdetails.
Belangrijk
Tijdens de openbare previewversie is het aanroepen van functies op Databricks geoptimaliseerd voor aanroepen van functies met een enkele beurt.
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))
Deze parameter biedt ook ondersteuning voor computergebruik (bèta) voor modellen die worden geleverd door Antropic en Amazon Bedrock for Antropic. Voor antropische specifieke hulpprogramma's, waaronder Computergebruik, gebruikt u de volgende syntaxis om uw hulpprogramma aan te roepen:
"tools": [
{
"type": # Specify tool type here,
"function": {
# Required parameters for the tool type
}
}
]
JSON-schema
Basismodel-API's ondersteunen functiedefinities die door OpenAI worden geaccepteerd. Het gebruik van een eenvoudiger JSON-schema voor functie-aanroepdefinities resulteert echter in een hogere kwaliteit van de JSON-generatie voor functie-aanroepen. Ter bevordering van het genereren van hogere kwaliteit ondersteunen Foundation Model-API's alleen een subset van JSON-schemaspecificaties.
De volgende definitiesleutels voor functie-aanroepen worden niet ondersteund:
- Reguliere expressies met behulp van
pattern
. - Complexe geneste of schema-samenstelling en validatie met behulp van:
anyOf
,oneOf
,allOf
,prefixItems
, of$ref
. - Lijsten met typen, met uitzondering van het speciale geval van
[type, “null”]
waarbij één type in de lijst een geldig JSON-type is en het andere"null"
Daarnaast zijn de volgende beperkingen van toepassing:
- Het maximum aantal sleutels dat is opgegeven in het JSON-schema, is
16
. - Basismodel-API's dwingen geen lengte- of groottebeperkingen af voor objecten en matrices.
- Dit omvat trefwoorden zoals
maxProperties
,minProperties
enmaxLength
.
- Dit omvat trefwoorden zoals
- Sterk geneste JSON-schema's resulteren in het genereren van lagere kwaliteit. Probeer indien mogelijk het JSON-schema plat te maken voor betere resultaten.
Tokengebruik
Promptinjectie en andere technieken worden gebruikt om de kwaliteit van hulpmiddelenoproepen te verbeteren. Dit heeft gevolgen voor het aantal invoer- en uitvoertokens dat door het model wordt gebruikt, wat op zijn beurt gevolgen heeft voor de facturering. Hoe meer hulpprogramma's u gebruikt, hoe meer uw invoertokens toenemen.
Beperkingen
Hier volgen beperkingen voor het aanroepen van functies tijdens de openbare preview:
- De huidige oplossing voor het aanroepen van functies is geoptimaliseerd voor functie-aanroepen met één draai. Functieaanroepen met meerdere beurten wordt ondersteund tijdens de preview, maar is nog in ontwikkeling.
- Parallel functie aanroepen wordt niet ondersteund.
- Het maximum aantal functies dat kan worden gedefinieerd in
tools
32 functies. - Voor geconfigureerde doorvoerondersteuning wordt het aanroepen van functies alleen ondersteund op nieuwe eindpunten. U kunt geen functie-aanroepen toevoegen aan eerder gemaakte eindpunten.
Voorbeeld van notitieblok
Zie het volgende notebook voor gedetailleerde voorbeelden van functie-aanroepen