Käytä funktiotyökalua

Valmis

Funktiotyökalu mahdollistaa mallin kutsua kehittäjämäärittelyä funktioita datan hakemiseksi tai toimintojen käynnistämiseksi vastauksen aikana.

Mikä on funktiotyökalu?

Funktiotyökalu (funktioiden kutsu) antaa mallin päättää, milloin kutsua nimettyjä työkaluja, joita esittelet sovelluksessasi. Malli ei johda liiketoimintalogiikkaasi suoraan. Sen sijaan se palauttaa rakenteellisen funktiokutsun, koodisi suorittaa funktion, ja sitten välität funktion takaisin mallille.

Tämä malli sopii erinomaisesti mallipäättelyn yhdistämiseen todellisiin järjestelmiin, kuten API:iin, tietokantoihin, liiketoiminnan työnkulkuihin ja hyötyfunktioihin.

Tärkeimpiä ominaisuuksia ovat seuraavat:

  • Rakenteelliset työkalukutsut – Malli lähettää eksplisiittisiä funktiokutsupyyntöjä
  • Kehittäjän ohjaama suoritus – Sovelluksesi päättää, miten ja missä funktiot toimivat
  • Luotettava integraatiomalli – Kutsu API:t, sisäiset palvelut tai aputyökalut turvallisesti
  • Monivaiheinen orkestrointi – Palauta työkalun tulos ja anna mallin jatkaa päättelyä
  • Maanläheiset vastaukset – Vastaukset voivat sisältää reaaliaikaista, järjestelmän tuottamaa dataa

Yleiset käyttötapaukset

Käyttötapaus Esimerkki
Järjestelmäintegraatio Pyydä sisäistä API:ta tili- tai tilaustietojen saamiseksi
Tehtävien automaatio Käynnistä työnkulkuja, kuten tikettien luomista tai ilmoituksia
Tietojen haku Kysy liiketoimintasääntöjä tai viitetaulukoita ennen vastaamista

Yksinkertainen esimerkki

Tässä on esimerkki, joka paljastaa funktion get_time ja antaa mallin kutsua sitä tarvittaessa:

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

Tässä virtauksessa malli päättää, milloin kutsutaan get_time, koodisi suorittaa funktion, ja malli palauttaa sitten maadoittuneen lopullisen vastauksen. Koska käyttäjä voi syöttää minkä tahansa kehotteen, mallin on määriteltävä, milloin funktio täytyy kutsua. Jos näin on, kehotteen vastaus sisältää funktiokutsun, jonka sovelluskoodin on toteutettava ennen uuden kehotteen lähettämistä, jossa on funktion tulos mallin käsiteltäväksi.

Tulostus voisi näyttää jotakuinkin tältä:

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)

Ensimmäinen käyttäjäkehote ("Hei") ei vaatinut funktiotyökalun käyttöä, joten malli reagoi normaalisti. Toinen kehote ("Paljonko kello on?") laukaisi mallin valitsemaan funktion get_time , jonka se osoitti vastauksessaan. Sovelluskoodi suoritti funktion ja palautti tulokset malliin, joka lähetti toisen vastauksen funktion tuloksilla.

Vinkki

Tässä esimerkissä käytetään yhtä funktiota ilman parametreja. Voit konfiguroida työkalun käyttämään useita toimintoja, parametrien kanssa tai ilman. Lisätietoja funktioiden yksityiskohdista löytyy OpenAI-kehittäjäoppaasta.

Miten funktiotyökalu toimii

Yleinen prosessi funktiotyökalun käytössä on:

  1. Määrittelet työkalut – Anna yksi tai useampi funktiomääritelmä työkalutaulukossa.
  2. Malli arvioi kehotteen – Se määrittää, tarvitaanko funktiokutsua.
  3. Malli lähettää funktiokutsun – Vastaus sisältää funktion nimen ja kutsun metatiedot.
  4. Sovelluksesi ajaa logiikkaa – Suorita koodisi yhteensopivuusfunktio.
  5. Palautat funktiotuloksen – lähetä function_call_output kohde tuloksella.
  6. Malli täydentää vastauksen – se sisällyttää työkalutulokset lopulliseen vastaukseen.

Parhaat käytännöt

  • Pidä työkalut keskittyneinä – Pienet, yksikäyttöiset toiminnot ovat helpompia hallita ja testata
  • Validoi funktiosyötteet – Älä koskaan luota työkaluargumentteihin sokeasti tuotantojärjestelmissä
  • Käsittele virheitä turvallisesti – Palauta selkeät virhetulokset, joita malli voi perustella
  • Lokityökalun käyttö – Seuraa kutsuja, viivettä ja epäonnistumisprosentteja virheenkorjauksessa ja hallinnassa
  • Rajoita arkaluontoisia toimintoja – Vaaditaan eksplisiittinen lupa korkean vaikuttavuuden toimiin

Rajoitukset, joista kannattaa tietää

  • Malli pyytää funktiokutsuja, mutta sovelluksesi täytyy suorittaa ne
  • Virheellisiä tai odottamattomia työkaluargumentteja voi esiintyä ja ne tulisi validoida
  • Työkalun viive voi lisätä päästä päähän -vasteaikaa
  • Funktiokutsu parantaa luotettavuutta, mutta lopulliset tulokset täytyy silti tarkistaa kriittisiä päätöksiä varten

Hyvin käytettynä funktiotyökalu muuttaa mallin tekstigeneraattorista orkestroijaksi, joka voi olla vuorovaikutuksessa todellisten järjestelmien kanssa hallitusti, auditoitavalla tavalla.