0Pricing
AI Prompt Engineering · Lezione

Schema di tool e funzioni

Schemi per il function calling.

Schema di tool e funzioni è una lezione AI Prompt Engineering gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Prompt Engineering, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Prompt Engineering include 4 lezioni in totale.

I tool sono schemi con un intento

Il function calling consente al modello di chiedere al codice di eseguire un'azione. Ogni tool viene dichiarato con un nome, una descrizione, che indica quando usarlo, e un JSON Schema per i suoi parametri.

Il modello non esegue mai il codice; emette una richiesta di chiamata strutturata che il runtime inoltra. È lo schema a rendere analizzabili gli argomenti.

Anatomia di una definizione di tool

La definizione di un tool è una dichiarazione di funzionalità racchiusa in uno schema.

{
  'type': 'function',
  'function': {
    'name': 'get_weather',
    'description': 'Get current weather for a city. Use when the user asks about weather.',
    'parameters': {
      'type': 'object',
      'properties': {
        'city': {'type': 'string'},
        'units': {'type': 'string', 'enum': ['celsius', 'fahrenheit']}
      },
      'required': ['city', 'units'],
      'additionalProperties': False
    }
  }
}

La descrizione guida la selezione

Quando sono disponibili molti tool, il modello sceglie principalmente in base alla descrizione. Scriva le descrizioni come regole decisionali:

  • Indichi quando usarlo e quando non.
  • Lo distingua dai tool simili.
  • Menzioni le precondizioni necessarie.

Le descrizioni scadenti causano più spesso la selezione del tool sbagliato di quanto gli schemi scadenti causino errori negli argomenti.

Ciclo chiamata-esecuzione-risposta

Il function calling avviene su più turni. Il modello emette una chiamata, la si esegue, si aggiunge il risultato e il modello continua.

resp = client.chat.completions.create(model='gpt-4o', messages=msgs, tools=tools)
call = resp.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)
result = dispatch(call.function.name, args)
msgs.append(resp.choices[0].message)
msgs.append({'role': 'tool', 'tool_call_id': call.id,
             'content': json.dumps(result)})
# call the model again to continue with the tool result

Chiamate parallele ai tool

I modelli moderni possono richiedere più chiamate ai tool in un solo turno quando le azioni sono indipendenti. Il runtime dovrebbe iterare su tutti i tool_calls, eseguirli, idealmente in concorrenza, e restituire un messaggio tool per ogni tool_call_id.

Non presuma mai che ci sia una sola chiamata; esegua sempre un ciclo.

for call in resp.choices[0].message.tool_calls:
    args = json.loads(call.function.arguments)
    result = dispatch(call.function.name, args)
    msgs.append({'role': 'tool', 'tool_call_id': call.id,
                 'content': json.dumps(result)})

Forzare e limitare l'uso dei tool

Controlli la selezione con tool_choice:

  • auto — decide il modello.
  • required — deve essere chiamato un tool.
  • {name: ...} — forza un tool specifico.
  • none — disabilita i tool per questo turno.

Forzare un tool specifico trasforma il function calling in una pura estrazione strutturata.

client.chat.completions.create(
    model='gpt-4o', messages=msgs, tools=tools,
    tool_choice={'type': 'function', 'function': {'name': 'get_weather'}}
)

Convalidare gli argomenti prima dell'esecuzione

Anche con schemi rigorosi, tratti gli argomenti dei tool come input non attendibile. Li convalidi nuovamente rispetto allo schema e applichi le regole di business prima di interagire con sistemi reali, come database, pagamenti ed eliminazione di file.

def dispatch(name, args):
    schema = TOOLS[name]['function']['parameters']
    jsonschema.validate(args, schema)   # defense in depth
    if name == 'refund' and args['amount'] > MAX_AUTO_REFUND:
        return {'error': 'requires human approval'}
    return HANDLERS[name](**args)

Gli errori dei tool fanno parte del protocollo

Quando un tool fallisce, restituisca un errore strutturato come risultato del tool invece di generare un'eccezione. Il modello potrà quindi scusarsi, riprovare con argomenti corretti o scegliere un tool diverso.

Renda gli errori azionabili: includa un motivo e, quando è sicuro farlo, un suggerimento per il recupero.

{'status': 'error',
 'code': 'CITY_NOT_FOUND',
 'message': 'No city named Xyz. Ask the user to clarify the city.'}

Mantenere ridotta la superficie dei tool

Decine di tool riducono l'accuratezza della selezione e aumentano il costo in token, perché ogni schema è presente nel contesto a ogni turno. Possibili rimedi:

  • Raggruppi le azioni correlate dietro un unico tool con un enum action.
  • Esponga dinamicamente solo i tool pertinenti allo stato corrente.
  • Usi il namespacing per ridurre la confusione tra tool simili.

Irrobustire lo schema per gli effetti collaterali

Per le azioni distruttive, codifichi la sicurezza direttamente nello schema: richieda un campo di conferma esplicito, limiti gli intervalli e preferisca agli identificatori in testo libero gli enum o i pattern validati.

{
  'name': 'delete_records',
  'parameters': {
    'type': 'object',
    'properties': {
      'table': {'type': 'string', 'enum': ['logs', 'temp_cache']},
      'confirm': {'type': 'boolean'},
      'max_rows': {'type': 'integer', 'minimum': 1, 'maximum': 1000}
    },
    'required': ['table', 'confirm', 'max_rows'],
    'additionalProperties': False
  }
}

Testare le definizioni degli strumenti

Consideri la selezione degli strumenti un comportamento misurabile. Costruisca un set di valutazione di prompt associati allo strumento e agli argomenti attesi, quindi verifichi che il modello scelga correttamente. Rilevi le regressioni quando riformula le descrizioni o aggiunge nuovi strumenti.

cases = [
  {'prompt': 'Whats it like in Paris?', 'expect_tool': 'get_weather'},
  {'prompt': 'Convert 10 USD to EUR', 'expect_tool': 'fx_convert'}
]
for c in cases:
    assert run(c['prompt']).tool_name == c['expect_tool']

Verifica rapida

Un modello emette due tool_calls indipendenti in un'unica risposta dell'assistente. Che cosa deve fare il runtime?

Riepilogo

Gli schemi degli strumenti e delle funzioni in pratica:

  • Le descrizioni guidano la selezione; gli schemi determinano argomenti analizzabili.
  • Scorra tutti i tool_calls; supporti l'esecuzione in parallelo.
  • Controlli il comportamento con tool_choice; imponga uno strumento per la sola estrazione.
  • Convalidi nuovamente gli argomenti; restituisca errori strutturati.
  • Riduca al minimo la superficie degli strumenti e metta in sicurezza le azioni distruttive.

Successivamente: cicli di riparazione e validazione per i casi in cui l'output continui a essere errato.

Domande Frequenti

La lezione «Schema di tool e funzioni» è gratuita?

Sì — il testo completo di «Schema di tool e funzioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Prompt Engineering, passa a CoddyKit PRO. Il corso AI Prompt Engineering include 4 lezioni in totale.

Cosa imparerò in «Schema di tool e funzioni»?

Schemi per il function calling. Eserciti AI Prompt Engineering con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AI Prompt Engineering?

Non è richiesta alcuna esperienza precedente. AI Prompt Engineering su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Schema di tool e funzioni»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AI Prompt Engineering?

Sì. Ogni lezione AI Prompt Engineering include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Perché usare un output strutturato
  2. JSON Schema nei prompt
  3. Schema di tool e funzioni
  4. Cicli di correzione e validazione
← Torna a AI Prompt Engineering