Użyj narzędzia funkcji
Wskazówka
Aby uzyskać więcej szczegółów, zobacz kartę Tekst i obrazy .
Narzędzie funkcji umożliwia modelowi wywoływanie funkcji zdefiniowanych przez deweloperów w celu pobierania danych lub wyzwalania akcji podczas odpowiedzi.
Co to jest narzędzie funkcyjne?
Narzędzie funkcji (wywoływanie funkcji) umożliwia modelowi podjęcie decyzji o tym, kiedy wywołać nazwane narzędzia uwidaczniane w aplikacji. Model nie uruchamia logiki biznesowej bezpośrednio. Zamiast tego zwraca wywołanie funkcji ustrukturyzowanej, kod uruchamia funkcję, a następnie przekazuje dane wyjściowe funkcji z powrotem do modelu.
Ten wzorzec jest idealny do łączenia rozumowania modelu z rzeczywistymi systemami, takimi jak interfejsy API, bazy danych, przepływy pracy biznesowe i funkcje narzędziowe.
Najważniejsze funkcje obejmują:
- Wywołania narzędzi strukturalnych — model emituje jawne żądania wywołania funkcji
- Wykonywanie kontrolowane przez dewelopera — Aplikacja decyduje, jak i gdzie działają funkcje
- Niezawodny wzorzec integracji — bezpieczne wywoływanie interfejsów API, usług wewnętrznych lub narzędzi pomocników
- Orkiestracja wielowrotna — zwraca dane wyjściowe narzędzia i pozwól modelowi kontynuować wnioskowanie
- Ugruntowane odpowiedzi — odpowiedzi mogą obejmować dane na żywo, generowane przez system
Typowe przypadki użycia
| Przypadek użycia | Przykład |
|---|---|
| Integracja systemu | Wywołaj wewnętrzny interfejs API dla danych konta lub zamówienia |
| Automatyzacja zadań | Wyzwalanie przepływów pracy, takich jak tworzenie biletu lub powiadomienia |
| Wyszukiwanie danych | Wykonywanie zapytań dotyczących reguł biznesowych lub tabel odwołań przed udzieleniem odpowiedzi |
Prosty przykład
Oto przykład, który uwidacznia get_time funkcję i umożliwia modelowi wywołanie go w razie potrzeby:
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()
W tym przepływie model decyduje, kiedy wywołać get_time, kod uruchamia funkcję, a następnie model zwraca ugruntowaną ostateczną odpowiedź. Ponieważ użytkownik może wprowadzić dowolny monit, model musi określić, kiedy musi wywołać funkcję. Jeśli tak, odpowiedź na monit będzie zawierać wywołanie funkcji, które kod aplikacji musi zaimplementować przed przesłaniem nowego monitu z danymi wyjściowymi funkcji do przetworzenia przez model.
Dane wyjściowe mogą wyglądać mniej więcej tak:
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)
Pierwszy monit użytkownika ("Hello") nie wymagał użycia narzędzia funkcji, więc model odpowiedział normalnie. Druga podpowiedź ("O której godzinie?") spowodowała wybranie przez model funkcji get_time, co zostało wskazane w jego odpowiedzi. Następnie kod aplikacji uruchomił funkcję i zwrócił wyniki do modelu, który następnie wysłał drugą odpowiedź z wynikami funkcji.
Wskazówka
W tym przykładzie użyto pojedynczej funkcji bez parametrów. Narzędzie można skonfigurować tak, aby używało wielu funkcji z parametrami lub bez nich. Aby uzyskać więcej informacji na temat określania szczegółów funkcji, zobacz Przewodnik dla deweloperów openAI.
Jak działa narzędzie funkcjonalne
Ogólny proces korzystania z narzędzia funkcji to:
- Definiujesz narzędzia — podaj co najmniej jedną definicję funkcji w tablicy narzędzi.
- Model ocenia monit — określa, czy potrzebne jest wywołanie funkcji.
- Model emituje wywołanie funkcji — odpowiedź zawiera nazwę funkcji i metadane wywołania.
- Aplikacja uruchamia logikę — uruchom zgodną funkcję w kodzie.
-
Zwracasz dane wyjściowe funkcji — wyślij
function_call_outputelement z wynikiem. - Model kończy odpowiedź — dołącza wyniki narzędzia do końcowej odpowiedzi.
Najlepsze rozwiązania
- Skupiaj się na narzędziach — małe, jednofunkcyjne funkcje są łatwiejsze do kontrolowania i testowania
- Weryfikowanie danych wejściowych funkcji — nigdy nie ufaj argumentom narzędzi ślepo w systemach produkcyjnych
- Bezpieczna obsługa błędów — zwracanie czytelnych wyników błędów, które model może przetwarzać
- Użycie narzędzia dziennika — śledzenie wywołań, opóźnień i współczynników niepowodzeń na potrzeby debugowania i zapewniania ładu
- Ograniczanie operacji poufnych — wymagaj jawnej autoryzacji dla akcji o dużym wpływie
Ograniczenia, o których warto wiedzieć
- Model żąda wywołań funkcji, ale aplikacja musi je uruchomić
- Mogą wystąpić nieprawidłowe lub nieoczekiwane argumenty narzędzia i należy je zweryfikować
- Opóźnienie w działaniu narzędzi może zwiększyć czas odpowiedzi od początku do końca
- Wywoływanie funkcji zwiększa niezawodność, ale ostateczne dane wyjściowe nadal wymagają przeglądu kluczowych decyzji
Przy właściwym użyciu narzędzie funkcji przekształca model z generatora tekstu w orkiestrator, który może wchodzić w interakcje z rzeczywistymi systemami w kontrolowany, audytowalny sposób.