Brug funktionsværktøjet

Fuldført

Funktionsværktøjet tillader din model at kalde udviklerdefinerede funktioner for at hente data eller udløse handlinger under et svar.

Hvad er funktionsværktøjet?

Funktionsværktøjet (funktionskald) lader en model bestemme, hvornår den skal kalde navngivne værktøjer, som du eksponerer i din applikation. Modellen kører ikke din forretningslogik direkte. I stedet returnerer den et struktureret funktionskald, din kode kører funktionen, og så sender du funktionsoutputtet tilbage til modellen.

Dette mønster er ideelt til at forbinde modelræsonnering med virkelige systemer som API'er, databaser, forretningsarbejdsgange og hjælpefunktioner.

Vigtige funktioner omfatter:

  • Strukturerede værktøjskald - Modellen udsender eksplicitte funktionskaldsanmodninger
  • Udviklerstyret udførelse – Din applikation bestemmer, hvordan og hvor funktioner kører
  • Pålideligt integrationsmønster - Kald sikkert API'er, interne tjenester eller hjælpeværktøjer
  • Multi-turn orkestrering - Returner værktøjsoutput og lad modellen fortsætte med at ræsonnere
  • Jordede svar - Svarene kan inkludere live, systemgenererede data

Almindelige use cases

Brugsscenario Eksempel
Systemintegration Kald et internt API for konto- eller ordreoplysninger
Opgaveautomatisering Udløs arbejdsgange som ticketoprettelse eller notifikationer
Dataopslag Forespørg forretningsregler eller referencetabeller før du svarer

Et simpelt eksempel

Her er et eksempel, der eksponerer en get_time funktion og lader modellen kalde den, når det er nødvendigt:

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

I dette flow beslutter modellen, hvornår den skal kalde get_time, din kode kører funktionen, og modellen returnerer derefter et jordet endeligt svar. Da brugeren kan indtaste enhver prompt, skal modellen bestemme, hvornår funktionen skal kaldes. Hvis det sker, vil svaret på prompten indeholde et funktionskald, som applikationskoden skal implementere, før en ny prompt med outputtet fra funktionen indsendes, som modellen skal behandle.

Outputtet kan se nogenlunde sådan ud:

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)

Den første brugerprompt ("Hej") krævede ikke brug af funktionsværktøjet, så modellen svarede normalt. Den anden prompt ("Hvad er klokken?") fik modellen til at vælge get_time funktionen, som den angav i sit svar. Applikationskoden kørte derefter funktionen og returnerede resultaterne til modellen, som derefter sendte et andet svar med resultaterne fra funktionen.

Tips

Dette eksempel bruger en enkelt funktion uden parametre. Du kan konfigurere værktøjet til at bruge flere funktioner, med eller uden parametre. For mere information om at specificere funktionsdetaljer, se OpenAI-udviklerguiden.

Hvordan funktionsværktøjet fungerer

Den generelle proces for at bruge funktionsværktøjet er:

  1. Du definerer værktøjer – Giv en eller flere funktionsdefinitioner i værktøjsarrayet.
  2. Modellen evaluerer prompten – Den afgør, om et funktionskald er nødvendigt.
  3. Modellen udsender et funktionskald - Svaret indeholder funktionsnavnet og kaldet metadata.
  4. Din app kører logik – kør matchningsfunktionen i din kode.
  5. Du returnerer funktionsoutput - Send et function_call_output element med resultatet.
  6. Modellen fuldender svaret – Den inkorporerer værktøjsresultater i det endelige svar.

Bedste praksis

  • Hold værktøjerne fokuserede – Små, enkeltformålsfunktioner er lettere at kontrollere og teste
  • Valider funktionsinput - Stol aldrig blindt på værktøjsargumenter i produktionssystemer
  • Håndter fejl sikkert - Returnér fejludgange, som modellen kan ræsonnere sig ud i
  • Logværktøjsbrug - Spor opkald, latenstid og fejlrater for fejlfinding og styring
  • Begræns følsomme operationer – Kræver eksplicit autorisation for handlinger med stor indvirkning

Begrænsninger at kende til

  • Modellen anmoder om funktionskald, men din applikation skal køre dem
  • Forkerte eller uventede værktøjsargumenter kan forekomme og bør valideres
  • Værktøjslatens kan øge end-to-end responstiden
  • Funktionskald forbedrer pålideligheden, men de endelige output skal stadig gennemgås for kritiske beslutninger

Brugt godt omdanner funktionsværktøjet en model fra en tekstgenerator til en orkestrator, der kan interagere med virkelige systemer på en kontrolleret og auditbar måde.