Tool- og function-schemas
Schemas til function calling.
Tool- og function-schemas er en gratis Promptteknik til AI-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Promptteknik til AI, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Promptteknik til AI-kurset indeholder 4 lektioner i alt.
Værktøjer er skemaer plus hensigt
Funktionskald gør det muligt for en model at anmode om, at din kode udfører en handling. Hvert værktøj deklareres med et navn, en beskrivelse (hvornår det skal bruges) og et JSON Schema for dets parametre.
Modellen kører aldrig kode; den udsender en struktureret anmodning om et kald, som dit kørselsmiljø sender videre. Skemaet gør argumenterne fortolkelige.
Et værktøjs definition
En værktøjsdefinition er en erklæring af en funktionalitet, der er pakket ind i et skema.
{
'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
}
}
}Beskrivelsen styrer valget
Når mange værktøjer er tilgængelige, vælger modellen primært ud fra beskrivelsen. Skriv beskrivelser som beslutningsregler:
- Angiv hvornår det skal bruges, og hvornår det ikke skal bruges.
- Adskil det fra beslægtede værktøjer.
- Nævn nødvendige forudsætninger.
Svage beskrivelser fører oftere til valg af forkert værktøj end svage skemaer fører til fejl i argumenter.
Løkken Kald-Udfør-Returnér
Funktionskald foregår over flere omgange. Modellen udsender et kald, du udfører det, tilføjer resultatet, og modellen fortsætter.
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 resultParallelle værktøjskald
Moderne modeller kan anmode om flere værktøjskald i én omgang, når handlingerne er uafhængige. Dit kørselsmiljø bør gennemløbe alle tool_calls, udføre dem (helst samtidigt) og returnere én værktøjsmeddelelse pr. tool_call_id.
Antag aldrig, at der kun er ét kald; gennemløb dem altid alle.
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)})Tvingning og begrænsning af værktøjsbrug
Styr valget med tool_choice:
auto— modellen bestemmer.required— modellen skal kalde et værktøj.{name: ...}— tving et bestemt værktøj.none— deaktivér værktøjer i denne omgang.
At tvinge et bestemt værktøj gør funktionskald til ren struktureret udtrækning.
client.chat.completions.create(
model='gpt-4o', messages=msgs, tools=tools,
tool_choice={'type': 'function', 'function': {'name': 'get_weather'}}
)Validér argumenter før udførelse
Selv med strenge skemaer skal du behandle værktøjsargumenter som upålidelige inddata. Validér dem igen mod skemaet, og anvend forretningsregler, før du påvirker virkelige systemer (databaser, betalinger, sletning af filer).
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)Værktøjsfejl er en del af protokollen
Når et værktøj fejler, skal du returnere en struktureret fejl som værktøjsresultat i stedet for at kaste en undtagelse. Modellen kan derefter undskylde, prøve igen med rettede argumenter eller vælge et andet værktøj.
Gør fejl handlingsanvisende: medtag en årsag og, hvor det er sikkert, et tip til genoprettelse.
{'status': 'error',
'code': 'CITY_NOT_FOUND',
'message': 'No city named Xyz. Ask the user to clarify the city.'}Begræns antallet af værktøjer
Dusinvis af værktøjer forringer valgnøjagtigheden og øger tokenomkostningen (hvert skema er i konteksten ved hver omgang). Afhjælp det sådan:
- Saml relaterede handlinger bag ét værktøj med en
action-enum. - Gør kun de værktøjer, der er relevante for den aktuelle tilstand, tilgængelige dynamisk.
- Brug navnerum for at mindske forveksling mellem lignende værktøjer.
Hærdning af skemaer til sideeffekter
For destruktive handlinger skal du indbygge sikkerhed i selve skemaet: kræv et felt til eksplicit bekræftelse, begræns intervaller, og undgå identifikatorer i fri tekst til fordel for enum-værdier eller validerede mønstre.
{
'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
}
}Test af værktøjsdefinitioner
Betragt valg af værktøj som en målbar adfærd. Opret et evalueringssæt med prompts, der er knyttet til det forventede værktøj og dets argumenter, og kontrollér derefter, at modellen vælger korrekt. Spor regressioner, når du omformulerer beskrivelser eller tilføjer nye værktøjer.
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']Hurtigt tjek
En model udsender to uafhængige tool_calls i én assistentrunde. Hvad skal dit kørselsmiljø gøre?
Opsummering
Værktøjs- og funktionsskemaer i praksis:
- Beskrivelser styrer valget; skemaer styrer argumenter, der kan fortolkes.
- Gennemgå alle tool_calls; understøt parallel udførelse.
- Styr adfærden med tool_choice; gennemtving brugen af et værktøj til ren udtrækning.
- Validér argumenterne igen; returnér strukturerede fejl.
- Begræns værktøjsfladen, og gør destruktive handlinger sikre.
Næste emne: reparations- og valideringssløjfer, når uddata stadig går galt.
Lær Promptteknik til AI med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 53
- Lektioner
- 199
Ofte stillede spørgsmål
Er lektionen “Tool- og function-schemas” gratis?
Ja — alle 3 lektioner i læringssporet Promptteknik til AI, inklusive “Tool- og function-schemas”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Promptteknik til AI-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Tool- og function-schemas”?
Schemas til function calling. Du øver dig i Promptteknik til AI med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Promptteknik til AI?
Der kræves ingen tidligere erfaring. Promptteknik til AI på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Tool- og function-schemas”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Promptteknik til AI-lektion?
Ja. Alle Promptteknik til AI-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Hvorfor struktureret output
- JSON Schema i prompts
- Tool- og function-schemas
- Reparations- og valideringsloops