Käytä funktiotyökalua
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:
- Määrittelet työkalut – Anna yksi tai useampi funktiomääritelmä työkalutaulukossa.
- Malli arvioi kehotteen – Se määrittää, tarvitaanko funktiokutsua.
- Malli lähettää funktiokutsun – Vastaus sisältää funktion nimen ja kutsun metatiedot.
- Sovelluksesi ajaa logiikkaa – Suorita koodisi yhteensopivuusfunktio.
-
Palautat funktiotuloksen – lähetä
function_call_outputkohde tuloksella. - 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.