Volání funkcí v Azure Databricks
Důležité
Tato funkce je ve verzi Public Preview a je podporovaná v rozhraních API základního modelu s platbou za token podle spotřeby a koncových bodech se zřízenou propustností.
Tento článek popisuje volání funkcí a jeho použití jako součást pracovních postupů generující aplikace AI. Volání funkce Databricks je kompatibilní s OpenAI a je k dispozici pouze během modelu, který slouží jako součást rozhraní API základního modelu.
Co je volání funkce
Volání funkcí poskytuje způsob, jak řídit výstup LLM, takže generate strukturované odpovědi spolehlivěji. Při volání funkce popisujete argumenty funkcí ve volání rozhraní API pomocí JSON schema. SAMOTNÝ LLM tyto funkce nevolá, ale vytvoří objekt JSON, který uživatelé mohou použít k volání funkcí ve svém kódu.
Pro volání funkce v Databricks je základní posloupnost kroků následující:
- Volání modelu pomocí odeslaného dotazu a set funkcí definovaných v parametru
tools
. - Model se rozhodne, jestli se mají nebo nevolat definované funkce. Při zavolání funkce je obsah objektem JSON řetězců, které odpovídají vašemu vlastnímu schema.
- Parsujte řetězce do formátu JSON v kódu a volejte funkci s zadanými argumenty, pokud existují.
- Znovu zavolejte model tak, že připojíte strukturovanou odpověď jako novou zprávu. Struktura odpovědi je definována funkcemi, které jste zadali dříve v
tools
. Odsud model shrnuje výsledky a odesílá tento souhrn uživateli.
Kdy použít volání funkce
Následuje příklad případů použití pro volání funkce:
- Vytvářejte asistenty, kteří můžou odpovídat na otázky voláním jiných rozhraní API. Můžete například definovat funkce jako
send_email(to: string, body: string)
nebocurrent_weather(location: string, unit: 'celsius' | 'fahrenheit')
. - Definujte a používejte volání rozhraní API na základě přirozeného jazyka. Líbí se vám prohlášení "Kdo jsou mými hlavními zákazníky?". a vytvoří ho do volání rozhraní API s názvem
get_customers(min_revenue: int, created_before: string, limit: int)
a zavoláním daného rozhraní API.
Pro dávkové odvozování nebo úlohy zpracování dat, jako je převod nestrukturovaných dat na strukturovaná data. Databricks doporučuje používat strukturované výstupy.
Podporované modely
Následující table uvádí podporované modely a kterou funkci obsluhy modelů každý model zpřístupňuje.
- U modelů dostupných rozhraními API pro základní modely najdete v tématu Omezení rozhraní API modelu foundation pro dostupnost oblastí.
- U modelů dostupných externími modely najdete v tématu Dostupnost oblastí pro dostupnost oblastí.
Důležité
Od 11. prosince 2024 nahrazuje Meta-Llama-3.3-70B-Instruct podporu pro Meta-Llama-3.1-70B-Instruct v rozhraních Foundation Model APIs na koncových bodech s platbou za token.
Důležité
Meta Llama 3.3 má licenci na LLAMA 3.3 Community License, Copyright © Meta Platforms, Inc. Všechna práva vyhrazena. Zákazníci zodpovídají za zajištění dodržování podmínek této licence a Zásady přijatelného použití Llama 3.3.
Meta Llama 3.1 je licencovaný pod licencí LLAMA 3.1 Community License, Copyright © Meta Platforms, Inc. Všechna práva vyhrazena. Zákazníci zodpovídají za zajištění dodržování předpisů s příslušnými licencemi modelu.
Model | Zpřístupněno pomocí funkce obsluhy modelů | Notes |
---|---|---|
Meta-Llama-3.3-70B-Instruct | Rozhraní API základního modelu | Podporuje se u úloh s průběžnými platbami a zřízenou propustností. |
Meta-Llama-3.1-405B-Instruct | Rozhraní API základního modelu | Podporuje se u úloh s průběžnými platbami a zřízenou propustností. |
Meta-Llama-3.1-8B-Instruct | Rozhraní API základního modelu | Podporuje se pouze u úloh se zřízenou propustností. |
gpt-4o | Externí modely | |
gpt-4o-2024-08-06 | Externí modely | |
gpt-4o-2024-05-13 | Externí modely | |
gpt-4o-mini | Externí modely |
Použití volání funkce
Pokud chcete používat volání funkcí s aplikací generující umělé inteligence, musíte zadat funkci parameters
a funkci description
.
Výchozí chování tool_choice
je "auto"
. Model tak rozhodne, které funkce se mají volat a jestli se mají volat.
Výchozí chování můžete přizpůsobit v závislosti na vašem případu použití. Toto jsou vaše možnosti:
-
Set
tool_choice: "required"
. V tomto scénáři model vždy volá jednu nebo více funkcí. Model vybere, kterou funkci nebo funkce se mají volat. -
Set
tool_choice: {"type": "function", "function": {"name": "my_function"}}
. V tomto scénáři model volá pouze konkrétní funkci. -
Set
tool_choice: "none"
zakázat volání funkcí a nechat model pouze generate zprávu pro uživatele.
Následuje příklad jednoho turnu pomocí sady OpenAI SDK a jeho parametru tools
. Další podrobnosti o syntaxi najdete v úloze chatu.
Důležité
Během verze Public Preview je volání funkce v Databricks optimalizované pro volání funkce s jedním turn.
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))
schema JSON
Rozhraní API základního modelu široce podporují definice funkcí přijaté openAI. Použití jednoduššího JSON schema pro definice volání funkcí vede k generování vyšší kvality JSON pro volání funkcí. Pokud chcete zvýšit úroveň generování kvality, rozhraní API základního modelu podporují pouze podmnožinu specifikace JSON schema.
Následující klíče definic volání funkce nejsou podporovány:
- Regulární výrazy používající
pattern
. - Složité vnořené nebo schema složení a ověřování pomocí:
anyOf
,oneOf
,allOf
,prefixItems
nebo$ref
. - Seznamy typů s výjimkou speciálního případu
[type, “null”]
where jeden typ v list je platným typem JSON a druhý typ je"null"
Platí také následující omezení:
- Maximální počet klíčů zadaných v schema JSON je
16
. - Rozhraní API základního modelu nevynucují omezení délky nebo velikosti objektů a polí.
- To zahrnuje klíčová slova jako
maxProperties
,minProperties
amaxLength
.
- To zahrnuje klíčová slova jako
- Silně vnořené schémata JSON způsobí nižší generování kvality. Pokud je to možné, zkuste zploštět schema JSON, aby se zlepšily výsledky.
Využití tokenů
Injektáž výzvy a další techniky se používají ke zvýšení kvality volání nástrojů. To má vliv na počet vstupních a výstupních tokenů spotřebovaných modelem, což zase vede k důsledkům fakturace. Čím více nástrojů použijete, tím více se zvýší počet vstupních tokenů.
Omezení
Toto jsou omezení pro volání funkcí během verze Public Preview:
- Aktuální řešení volání funkcí je optimalizované pro volání funkce s jedním otáčením. Volání více funkcí je podporováno během verze Preview, ale probíhá ve vývoji.
- Paralelní volání funkcí není podporováno.
- Maximální počet funkcí, které lze definovat,
tools
je 32 funkcí. - Pro podporu zřízené propustnosti se volání funkcí podporuje jenom na nových koncových bodech. Do dříve vytvořených koncových bodů není možné přidat volání funkce.
Příklad poznámkového bloku
Podrobné příklady volání funkcí najdete v následujícím poznámkovém bloku.
Ukázkový poznámkový blok volání funkcí
poznámkového bloku