Dela via


Funktionsanrop i Azure Databricks

Viktigt!

Den här funktionen finns i offentliga förhandsversionen och stöds på:

  • Foundation Model-API:er betalar per token
  • API:er för Foundation Model avsatt dataflöde
  • Serveringsslutpunkter som hanterar externa modeller

I den här artikeln beskrivs funktionsanrop och hur du använder det som en del av dina generativa AI-programarbetsflöden. Databricks-funktionsanrop är OpenAI-kompatibelt och är endast tillgängligt under modeller som fungerar som en del av Foundation Model-API:er och serverslutpunkter som betjänar externa modeller.

Vad är funktionsanrop?

Funktionsanrop är ett sätt för dig att styra utdata från LLM:er, så att de genererar strukturerade svar på ett mer tillförlitligt sätt. När du använder ett funktionsanrop beskriver du funktioner i API-anropet genom att beskriva funktionsargumenten med hjälp av ett JSON-schema. SJÄLVA LLM anropar inte dessa funktioner, utan skapar i stället ett JSON-objekt som användarna kan använda för att anropa funktionerna i sin kod.

För funktionsanrop i Databricks är den grundläggande sekvensen med steg följande:

  1. Anropa modellen med hjälp av den skickade frågan och en uppsättning funktioner som definierats i parametern tools.
  2. Modellen bestämmer om de definierade funktionerna ska anropas eller inte. När funktionen anropas är innehållet ett JSON-objekt med strängar som följer ditt anpassade schema.
  3. Parsa strängarna i JSON i koden och anropa funktionen med de angivna argumenten om de finns.
  4. Anropa modellen igen genom att lägga till det strukturerade svaret som ett nytt meddelande. Strukturen för svaret definieras av de funktioner som du tidigare angav i tools. Härifrån sammanfattar modellen resultaten och skickar sammanfattningen till användaren.

När funktionsanrop ska användas

Följande är exempel på användningsfall för funktionsanrop:

  • Skapa assistenter som kan svara på frågor genom att anropa andra API:er. Du kan till exempel definiera funktioner som send_email(to: string, body: string) eller current_weather(location: string, unit: 'celsius' | 'fahrenheit').
  • Definiera och använda API-anrop baserat på naturligt språk. Som att ta instruktionen "Vilka är mina främsta kunder?" och gör det till ett API-anrop med namnet get_customers(min_revenue: int, created_before: string, limit: int) och anropar det API:et.

För batchinferens eller databearbetningsuppgifter, som att konvertera ostrukturerade data till strukturerade data. Databricks rekommenderar att du använder strukturerade utdata.

Modeller som stöds

I följande tabell visas de modeller som stöds och vilken funktion för modellservering som gör varje modell tillgänglig.

Viktigt!

Från och med den 11 december 2024 ersätter Meta-Llama-3.3-70B-Instruct stödet för Meta-Llama-3.1-70B-Instruct i Foundation Model API:ers betalningsväxel per token-slutpunkter.

Viktigt!

Meta Llama 3.3 är licensierad enligt LLAMA 3.3 Community License, Copyright © Meta Platforms, Inc. Alla rättigheter reserverade. Kunderna ansvarar för att se till att de följer villkoren i den här licensen och Llama 3.3 Policy för godtagbar användning.

Meta Llama 3.1 är licensierad enligt LLAMA 3.1 Community License, Copyright © Meta Platforms, Inc. Alla rättigheter reserverade. Kunderna ansvarar för att säkerställa efterlevnaden av tillämpliga modelllicenser.

Modell Tillgängliggjord med hjälp av funktion för modellservering Kommentar
Meta-Llama-3.3-70B-Instruct API:er för grundmodell Stöds för arbetsbelastningar med betala per token och etablerat dataflöde.
Meta-Llama-3.1-405B-Instruct API:er för grundmodell Stöds för arbetsbelastningar med betala per token och etablerat dataflöde.
Meta-Llama-3.1-8B-Instruct API:er för grundmodell Stöds endast för etablerade dataflödesarbetsbelastningar.
gpt-4o Externa modeller
gpt-4o-2024-08-06 Externa modeller
gpt-4o-2024-05-13 Externa modeller
gpt-4o-mini Externa modeller
claude-3-5-sonnet-latest Externa modeller Antropisk modellprovider
claude-3-5-haiku-latest Externa modeller Antropisk modellprovider
claude-3-5-opus-latest Externa modeller Antropisk modellprovider
claude-3-5-sonnet-20241022 Externa modeller Mänsklig modellleverantör. Den här modellen stöder verktygssamtal med hjälp av Datoranvändning (beta).
claude-3-5-haiku-20241022 Externa modeller Antropisk modellprovider
claude-3-5-sonnet-20240620 Externa modeller Antropisk modellprovider
claude-3-haiku-20240307 Externa modeller Antropisk modellprovider
claude-3-opus-20240229 Externa modeller Antropisk modellprovider
claude-3-sonnet-20240229 Externa modeller Antropisk modellprovider
claude-3-5-sonnet-20241022-v2:0 Externa modeller Bedrock Anthropic modelltjänstleverantör. Den här modellen stöder verktygssamtal med hjälp av Datoranvändning (beta).
claude-3-5-haiku-20241022-v1:0 Externa modeller Bedrock leverantör av Anthropic-modeller
claude-3-5-sonnet-20240620-v1:0 Externa modeller Bedrock Anthropic modellleverantör
claude-3-sonnet-20240229-v1:0 Externa modeller Bedrock Anthropic-modelltjänsteleverantör
claude-3-opus-20240229-v1:0 Externa modeller "Leverantör av Bedrocks antropiska modeller"

Använda funktionsanrop

Om du vill använda funktionsanrop med ditt generativa AI-program måste du ange funktionen parameters och en description.

Standardbeteendet för tool_choice är "auto". På så sätt kan modellen bestämma vilka funktioner som ska anropas och om de ska anropas.

Du kan anpassa standardbeteendet beroende på ditt användningsfall. Följande är dina alternativ:

  • Ange tool_choice: "required". I det här scenariot anropar modellen alltid en eller flera funktioner. Modellen väljer vilken funktion eller vilka funktioner som ska anropas.
  • Ange tool_choice: {"type": "function", "function": {"name": "my_function"}}. I det här scenariot anropar modellen endast en specifik funktion.
  • Ställ in tool_choice: "none" för att inaktivera funktionsanrop och låt modellen bara generera ett användaranslutet meddelande.

Följande är ett exempel med en enda tur med hjälp av OpenAI SDK och dess tools parameter. Mer syntaxinformation finns i Chattaktivitet .

Viktigt!

Under offentlig förhandsversion optimeras funktionsanrop på Databricks för funktionsanrop med en enda tur.

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))

Den här parametern stöder också Datoranvändning (beta) för modeller som tillhandahålls av Anthropic och Amazon Bedrock for Anthropic. För antropiska verktyg, inklusive Datoranvändning, använder du följande syntax för att anropa verktyget:


"tools": [
  {
    "type": # Specify tool type here,
    "function": {
      # Required parameters for the tool type
    }
  }
]

JSON-schema

API:er för Foundation Model stöder i stort sett funktionsdefinitioner som godkänts av OpenAI. Men om du använder ett enklare JSON-schema för funktionsanropsdefinitioner resulterar det i JSON-generering av funktionsanrop av högre kvalitet. För att främja generering av högre kvalitet stöder Foundation Model-API:er endast en delmängd av JSON-schemaspecifikationer.

Följande definitionsnycklar för funktionsanrop stöds inte:

  • Reguljära uttryck med .pattern
  • Komplex kapsling eller schemasammansättning och validering använder: anyOf, oneOf, allOf, prefixItemseller $ref.
  • Listor med typer förutom specialfallet [type, “null”] där en typ i listan är en giltig JSON-typ och den andra är "null"

Dessutom gäller följande begränsningar:

  • Det maximala antalet nycklar som anges i JSON-schemat är 16.
  • Foundation Model-API:er tillämpar inte längd- eller storleksbegränsningar för objekt och matriser.
    • Detta inkluderar nyckelord som maxProperties, minPropertiesoch maxLength.
  • Starkt kapslade JSON-scheman resulterar i lägre kvalitet. Om möjligt kan du prova att platta ut JSON-schemat för bättre resultat.

Tokenanvändning

Snabbinmatning och andra tekniker används för att förbättra kvaliteten på verktygsanrop. Detta påverkar antalet indata- och utdatatoken som används av modellen, vilket i sin tur resulterar i faktureringskonsekvenser. Ju fler verktyg du använder, desto mer ökar dina indatatoken.

Begränsningar

Följande är begränsningar för funktionsanrop under offentlig förhandsversion:

  • Den aktuella funktionsanropslösningen är optimerad för funktionsanrop med en enda tur. Multi-turn-funktionsanrop stöds under förhandsversionen, men är under utveckling.
  • Parallell funktionsanrop stöds inte.
  • Det maximala antalet funktioner som kan definieras i tools är 32 funktioner.
  • För stöd för etablerat dataflöde stöds funktionsanrop endast på nya slutpunkter. Du kan inte lägga till funktionsanrop till tidigare skapade slutpunkter.

Notebook-exempel

Se följande notebook-fil för detaljerade exempel på funktionsanrop

Exempelanteckningsbok för funktionsanrop

Hämta anteckningsbok