Použití nástroje Functions
Nástroj funkcí umožňuje vašemu modelu volat funkce definované vývojářem k načtení dat nebo aktivaci akcí během odpovědi.
Co je nástroj pro funkce?
Nástroj funkcí (volání funkcí) umožňuje modelu rozhodnout, kdy volat pojmenované nástroje, které zveřejníte ve své aplikaci. Model nespouští vaši obchodní logiku přímo. Místo toho vrátí volání strukturované funkce, kód spustí funkci a pak předá výstup funkce zpět do modelu.
Tento model je ideální pro propojení modelů s reálnými systémy, jako jsou rozhraní API, databáze, obchodní pracovní postupy a utility.
Mezi klíčové funkce patří:
- Strukturovaná volání nástrojů – model generuje explicitní žádosti o volání funkcí.
- Spouštění řízené vývojářem – Aplikace rozhoduje, jak a kde běží funkce.
- Spolehlivý model integrace – bezpečně volejte rozhraní API, interní služby nebo pomocné nástroje
- Orchestrace s více kroky – vrácení výstupu nástroje a nechat model pokračovat v úvahách
- Základní odpovědi – Odpovědi můžou zahrnovat živá, systémově generovaná data
Běžné případy použití
| Případ použití | Příklad |
|---|---|
| Integrace systému | Volání interního rozhraní API pro podrobnosti o účtu nebo objednávce |
| Automatizace úloh | Aktivace pracovních postupů, jako je vytvoření lístku nebo oznámení |
| Vyhledávání dat | Prozkoumání obchodních pravidel nebo referenčních tabulek před poskytnutím odpovědi |
Jednoduchý příklad
Tady je příklad, který zveřejňuje get_time funkci a umožňuje modelu ji v případě potřeby volat:
import time
from openai import OpenAI
# Function to get the current time
def get_time():
return f"The time is {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}"
# Main function
def main():
client = OpenAI(
base_url={openai_endpoint},
api_key={auth_key_or_token}
)
function_tools = [
{
"type": "function",
"name": "get_time",
"description": "Get the current time"
}
]
# Initialize messages with a system prompt
messages = [
{"role": "developer", "content": "You are an AI assistant that provides information."},
]
# Loop until the user types 'quit'
while True:
prompt = input("\nEnter a prompt (or type 'quit' to exit)\n")
if prompt.lower() == "quit":
break
# Append the user prompt to the messages
messages.append({"role": "user", "content": prompt})
# Get initial response
response = client.responses.create(
model=model_deployment,
input=messages,
tools=function_tools
)
# Append model output to the messages
messages += response.output
# Was there a function call?
for item in response.output:
if item.type == "function_call" and item.name == "get_time":
current_time = get_time()
messages.append({
"type": "function_call_output",
"call_id": item.call_id,
"output": current_time
})
# Get a follow up response using the tool output
response = client.responses.create(
model=model_deployment,
instructions="Answer only with the tool output.",
input=messages,
tools=function_tools
)
print(response.output_text)
# Run the main function when the script starts
if __name__ == '__main__':
main()
V tomto toku se model rozhodne, kdy se má volat get_time, váš kód spustí funkci a model pak vrátí základní konečnou odpověď. Vzhledem k tomu, že uživatel může zadat jakoukoli výzvu, musí model určit, kdy potřebuje volat funkci. Pokud ano, odpověď na výzvu bude obsahovat volání funkce, které musí být kódem aplikace provedené před odesláním nové výzvy s výstupem z této funkce, aby jej model mohl zpracovat.
Výstup může vypadat přibližně takto:
Enter a prompt (or type 'quit' to exit)
Hello
Hello! How can I help you today?
Enter a prompt (or type 'quit' to exit)
What time is it?
The time is 2026-03-19 17:17:41.
Enter a prompt (or type 'quit' to exit)
První výzva uživatele ("Hello") nepožadovala použití nástroje funkcí, takže model normálně reagoval. Druhá výzva ("What time is it?") aktivovala model, aby zvolil funkci get_time, což naznačilo ve své odpovědi. Kód aplikace pak funkci spustil a vrátil výsledky do modelu, který pak odeslal druhou odpověď s výsledky funkce.
Návod
V tomto příkladu se používá jedna funkce bez parametrů. Nástroj můžete nakonfigurovat tak, aby používal více funkcí s parametry nebo bez parametrů. Další informace o zadávání podrobností o funkcích najdete v příručce pro vývojáře OpenAI.
Jak funguje funkce nástroje
Obecný postup použití nástroje funkcí je následující:
- Definujete nástroje – Zadejte jednu nebo více definic funkcí v poli nástrojů.
- Model vyhodnocuje výzvu – Určuje, jestli je potřeba volat funkci.
- Model generuje volání funkce – odpověď obsahuje název funkce a metadata volání.
- Aplikace spouští logiku – Spusťte odpovídající funkci v kódu.
-
Vrátíte výstup funkce – odešlete
function_call_outputpoložku s výsledkem. - Model dokončí odpověď – zahrne výsledky nástroje do konečné odpovědi.
Osvědčené postupy
- Zaměřte se na nástroje – malé, jednoúčelové funkce jsou snadnější řídit a testovat
- Ověřování vstupů funkcí – nikdy slepo nedůvěřujte argumentům nástroje v produkčních systémech.
- Bezpečné zpracování chyb – Vrácení jasných výstupů chyb, které může model zdůvodnět
- Využití nástroje protokolu – Sledování volání, latence a míry selhání pro ladění a zásady správného řízení
- Omezení citlivých operací – Vyžadování explicitní autorizace pro akce s vysokým dopadem
Omezení, o kterých byste měli vědět
- Model požaduje volání funkce, ale vaše aplikace je musí spustit.
- Mohou nastat nesprávné nebo neočekávané argumenty nástroje a měly by být ověřeny.
- Latence nástroje může zvýšit dobu odezvy od konce do konce.
- Volání funkcí zvyšuje spolehlivost, ale konečné výstupy stále potřebují přezkoumání pro důležitá rozhodnutí.
Pokud je funkce dobře využívána, nástroj může proměnit model z generátoru textu na orchestrátor, který může interagovat se skutečnými systémy řízeným a auditovatelným způsobem.