Delen via


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:

  1. Roep het model aan met behulp van de ingediende query en een set functies die zijn gedefinieerd in de parameter tools.
  2. 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.
  3. Parseer de tekenreeksen in JSON in uw code en roep uw functie aan met de opgegeven argumenten als deze bestaan.
  4. 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) of current_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, minPropertiesen maxLength.
  • 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

Voorbeeldnotitieblok voor het aanroepen van functies

Haal notitieblok