Udostępnij za pośrednictwem


Wywołanie funkcji w Azure Databricks

W tym artykule opisano wywoływanie funkcji i sposób jej używania w ramach przepływów pracy aplikacji generowania sztucznej inteligencji. Wywoływanie funkcji Databricks jest kompatybilne z OpenAI i jest dostępne wyłącznie podczas serwowania modelu w ramach interfejsów API Foundation Model oraz punktów końcowych obsługujących modele zewnętrzne.

Co to jest wywoływanie funkcji?

Wywołanie funkcji umożliwia sterowanie danymi wyjściowymi modułów LLM, dzięki czemu generują ustrukturyzowane odpowiedzi bardziej niezawodnie. Podczas używania wywołania funkcji opisujesz funkcje w wywołaniu API, opisując argumenty funkcji za pomocą schematu JSON. Sam moduł LLM nie wywołuje tych funkcji, ale zamiast tego tworzy obiekt JSON, którego użytkownicy mogą używać do wywoływania funkcji w kodzie.

W przypadku funkcji wywołującej usługę Databricks podstawowa sekwencja kroków jest następująca:

  1. Wywołaj model przy użyciu przesłanego zapytania i zestawu funkcji zdefiniowanych w parametrze tools.
  2. Model decyduje, czy wywołać zdefiniowane funkcje. Po wywołaniu funkcji zawartość jest obiektem JSON zawierającym ciągi, zgodnym z twoim schematem niestandardowym.
  3. Przeanalizuj ciągi w formacie JSON w kodzie i wywołaj funkcję przy użyciu podanych argumentów, jeśli istnieją.
  4. Ponownie wywołaj model, dołączając ustrukturyzowaną odpowiedź jako nowy komunikat. Struktura odpowiedzi jest definiowana przez funkcje podane wcześniej w pliku tools. W tym miejscu model podsumowuje wyniki i wysyła to podsumowanie do użytkownika.

Kiedy należy używać wywoływania funkcji

Poniżej przedstawiono przykładowe przypadki użycia wywoływania funkcji:

  • Utwórz asystentów, którzy mogą odpowiedzieć na pytania, wywołując inne interfejsy API. Można na przykład zdefiniować funkcje takie jak send_email(to: string, body: string) lub current_weather(location: string, unit: 'celsius' | 'fahrenheit').
  • Definiowanie i używanie wywołań interfejsu API na podstawie języka naturalnego. Podobnie jak w przypadku podejmowania oświadczenia: "Kim są moi najlepsi klienci?" i tworzenie wywołania interfejsu API o nazwie get_customers(min_revenue: int, created_before: string, limit: int) i jego użycie.

W przypadku zadań wnioskowania wsadowego lub przetwarzania danych, takich jak konwertowanie danych bez struktury na dane ustrukturyzowane. Usługa Databricks zaleca używanie danych wyjściowych ze strukturą.

Obsługiwane modele

W poniższej tabeli wymieniono obsługiwane modele oraz funkcje serwujące, które udostępniają każdy z tych modeli. Zobacz Odpowiednie licencje dla deweloperów modeli i postanowienia dotyczące tych modeli.

Ważne

Począwszy od 11 grudnia 2024 r., Meta-Llama-3.3-70B-Instruct zastępuje obsługę Meta-Llama-3.1-70B-Instruct w podstawowych modelach API na punktach końcowych płatności za token.

Model Udostępniono przy użyciu funkcji obsługi modelu Uwagi
Claude-3.7-Sonnet API modeli bazowych Obsługiwane w punktach końcowych płatności za token.
Meta-Llama-3.3-70B-Instruct API modeli bazowych Wspierane przy obciążeniach z płatnością za token i zagwarantowaną przepustowością.
Meta-Llama-3.1-405B-Instruct API modeli bazowych Wspierane przy obciążeniach z płatnością za token i zagwarantowaną przepustowością.
Meta-Llama-3.1-8B-Instruct API modeli bazowych Wspierane przy obciążeniach z płatnością za token i zagwarantowaną przepustowością.
gpt-4o Modele zewnętrzne
gpt-4o-2024-08-06 Modele zewnętrzne
gpt-4o-2024-05-13 Modele zewnętrzne
gpt-4o-mini Modele zewnętrzne
claude-3-5-sonnet-latest Modele zewnętrzne Dostawca modelu antropotycznego
claude-3-5-haiku-latest Modele zewnętrzne Dostawca modelu antropotycznego
claude-3-5-opus-najnowszy Modele zewnętrzne Dostawca modelu antropotycznego
claude-3-5-sonnet-20241022 Modele zewnętrzne Dostawca modelu antropicznego. Ten model obsługuje wywoływanie narzędzi przy użyciu Computer Use (beta).
claude-3-5-haiku-20241022 Modele zewnętrzne Dostawca modelu antropotycznego
claude-3-5-sonnet-20240620 Modele zewnętrzne Dostawca modelu antropotycznego
claude-3-haiku-20240307 Modele zewnętrzne Dostawca modelu antropotycznego
claude-3-opus-20240229 Modele zewnętrzne Dostawca modelu antropotycznego
claude-3-sonnet-20240229 Modele zewnętrzne Dostawca modelu antropotycznego
claude-3-5-sonnet-20241022-v2:0 Modele zewnętrzne Dostawca modeli Bedrock Anthropic. Ten model obsługuje wywoływanie narzędzi przy użyciu Computer Use (beta).
claude-3-5-haiku-20241022-v1:0 Modele zewnętrzne Dostawca modelu antropicznego Bedrock
claude-3-5-sonnet-20240620-v1:0 Modele zewnętrzne Dostawca modelu antropicznego Bedrock
claude-3-sonnet-20240229-v1:0 Modele zewnętrzne Dostawca modelu antropicznego Bedrock
claude-3-opus-20240229-v1:0 Modele zewnętrzne Dostawca modelu antropicznego Bedrock

Używanie wywoływania funkcji

Aby używać wywoływania funkcji w aplikacji generatywnej sztucznej inteligencji, należy podać funkcję parameters i description.

Domyślne zachowanie dla elementu tool_choice to "auto". Dzięki temu model może zdecydować, które funkcje mają być wywoływane i czy mają być wywoływane.

Możesz dostosować domyślne zachowanie w zależności od przypadku użycia. Dostępne są następujące opcje:

  • Ustaw tool_choice: "required". W tym scenariuszu model zawsze wywołuje jedną lub więcej funkcji. Model wybiera funkcję lub funkcje do wywołania.
  • Ustaw tool_choice: {"type": "function", "function": {"name": "my_function"}}. W tym scenariuszu model wywołuje tylko określoną funkcję.
  • Ustaw tool_choice: "none", aby wyłączyć wywoływanie funkcji i umożliwić modelowi generowanie komunikatu dla użytkownika.

Poniżej przedstawiono pojedynczy przykład użycia pakietu SDK OpenAI i jego parametru tools. Aby uzyskać dodatkowe informacje o składni, zobacz Zadanie czatu.

Ważne

Podczas publicznej wersji zapoznawczej wywoływanie funkcji na Databricks jest zoptymalizowane pod kątem wywoływania funkcji w trybie pojedynczym obrocie.

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

Ten parametr obsługuje również używanie komputera (beta) dla modeli Claude'a.

Schemat JSON

API modelu bazowego zasadniczo obsługują definicje funkcji akceptowane przez OpenAI. Jednak użycie prostszego schematu JSON dla definicji wywołań funkcji powoduje generowanie JSON o wyższej jakości wywołania funkcji. Aby podwyższyć jakość tworzenia, interfejsy API modelu podstawowego obsługują tylko podzestaw specyfikacji schematu JSON .

Następujące klucze definicji wywołań funkcji nie są obsługiwane:

  • Wyrażenia regularne używające pattern.
  • Złożone zagnieżdżanie lub komponowanie schematów i ich walidacja przy użyciu: anyOf, oneOf, allOf, prefixItems lub $ref.
  • Listy typów z wyjątkiem specjalnego przypadku [type, “null”], w którym jeden typ na liście jest prawidłowym typem JSON, a drugi jest "null"

Ponadto obowiązują następujące ograniczenia:

  • Maksymalna liczba kluczy określonych w schemacie JSON wynosi 16.
  • Interfejsy API modelu foundation nie wymuszają ograniczeń dotyczących długości ani rozmiaru obiektów i tablic.
    • Obejmuje to słowa kluczowe, takie jak maxProperties, minPropertiesi maxLength.
  • Silnie zagnieżdżone schematy JSON powodują generowanie niższej jakości. Jeśli to możliwe, spróbuj spłaszczać schemat JSON, aby uzyskać lepsze wyniki.

Użycie tokenu

Technika wstrzykiwania danych wejściowych oraz inne metody są używane w celu poprawy jakości wywołań narzędzi. Ma to wpływ na liczbę tokenów wejściowych i wyjściowych używanych przez model, co z kolei powoduje implikacje dotyczące rozliczeń. Im więcej narzędzi używasz, tym bardziej zwiększa się liczba tokenów wejściowych.

Ograniczenia

Poniżej przedstawiono ograniczenia dotyczące wywoływania funkcji w publicznej wersji zapoznawczej:

  • Bieżące rozwiązanie do wywoływania funkcji jest zoptymalizowane pod kątem jednoliniowych wywołań funkcji. Wywoływanie funkcji w wielu etapach jest obsługiwane podczas wersji zapoznawczej, ale nadal znajduje się w fazie rozwoju.
  • Wywołania funkcji równoległych nie są obsługiwane.
  • Maksymalna liczba funkcji, które można zdefiniować w programie tools , to 32 funkcje.
  • W przypadku obsługi przepływności aprowizowanej wywoływanie funkcji jest obsługiwane tylko na nowych punktach końcowych. Nie można dodać wywołania funkcji do wcześniej utworzonych punktów końcowych.

Przykład notatnika

Zapoznaj się z poniższym notesem, aby uzyskać szczegółowe przykłady wywołań funkcji

Przykładowy notatnik wywoływania funkcji

Zdobądź notatnik