EsempioscriptbeginnerEseguibiletool-agent
Strumenti
Esempio rieseguibile beginner di tipo script che usa openai, pydantic.
Fatti chiave
- Livello
- beginner
- Runtime
- Python • API OpenAI
- Pattern
- Flusso ispezionabile con confini di sistema visibili
- Interazione
- Sandbox live • Script
- Aggiornato
- 14 marzo 2026
Naviga questo esempio
Libreria
Sfoglia gli esempiRiapri la libreria completa per confrontare pattern vicini e percorsi collegati.Interazione
Esegui ora nel sandboxProva l'interazione direttamente nella superficie guidata di questo esempio.Sorgente
Apri codice completoLeggi l'implementazione reale, i punti evidenziati e i requisiti runtime.MCP
Chiama via MCPUsa la stessa risorsa dentro agenti, export deterministici e setup MCP.
Principi collegati
3-tools.py
python
import json
import os
import requests
from openai import OpenAI
from pydantic import BaseModel, Field
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
"""
docs: https://platform.openai.com/docs/guides/function-calling
"""
# --------------------------------------------------------------
# Define the tool (function) that we want to call
# --------------------------------------------------------------
def get_weather(latitude, longitude):
"""This is a publically available API that returns the weather for a given location."""
response = requests.get(
f"https://api.open-meteo.com/v1/forecast?latitude={latitude}&longitude={longitude}¤t=temperature_2m,wind_speed_10m&hourly=temperature_2m,relative_humidity_2m,wind_speed_10m"
)
data = response.json()
return data["current"]
# --------------------------------------------------------------
# Step 1: Call model with get_weather tool defined
# --------------------------------------------------------------
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current temperature for provided coordinates in celsius.",
"parameters": {
"type": "object",
"properties": {
"latitude": {"type": "number"},
"longitude": {"type": "number"},
},
"required": ["latitude", "longitude"],
"additionalProperties": False,
},
"strict": True,
},
}
]
system_prompt = "You are a helpful weather assistant."
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": "What's the weather like in Paris today?"},
]
completion = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
)
# --------------------------------------------------------------
# Step 2: Model decides to call function(s)
# --------------------------------------------------------------
completion.model_dump()
# --------------------------------------------------------------
# Step 3: Execute get_weather function
# --------------------------------------------------------------
def call_function(name, args):
if name == "get_weather":
return get_weather(**args)
for tool_call in completion.choices[0].message.tool_calls:
name = tool_call.function.name
args = json.loads(tool_call.function.arguments)
messages.append(completion.choices[0].message)
result = call_function(name, args)
messages.append(
{"role": "tool", "tool_call_id": tool_call.id, "content": json.dumps(result)}
)
# --------------------------------------------------------------
# Step 4: Supply result and call model again
# --------------------------------------------------------------
class WeatherResponse(BaseModel):
temperature: float = Field(
description="The current temperature in celsius for the given location."
)
response: str = Field(
description="A natural language response to the user's question."
)
completion_2 = client.beta.chat.completions.parse(
model="gpt-4o",
messages=messages,
tools=tools,
response_format=WeatherResponse,
)
# --------------------------------------------------------------
# Step 5: Check model response
# --------------------------------------------------------------
final_response = completion_2.choices[0].message.parsed
final_response.temperature
final_response.response
Principi correlati
- P1delegationProgettare per la delega piuttosto che per la manipolazione direttaProgettare esperienze attorno all'assegnazione del lavoro, l'espressione dell'intento, l'impostazione dei vincoli e la revisione dei risultati, piuttosto che richiedere agli utenti di eseguire manualmente ogni passaggio.Apri il principio →
- P8trustRendere espliciti i passaggi, le approvazioni e i blocchiQuando il sistema non può procedere, la ragione dovrebbe essere immediatamente visibile, insieme a qualsiasi azione richiesta dall'utente o da un'altra dipendenza.Apri il principio →
- P9orchestrationRappresentare il lavoro delegato come un sistema, non solo come una conversazioneDove il lavoro coinvolge più passaggi, agenti, dipendenze o attività concorrenti, dovrebbe essere rappresentato come un sistema strutturato piuttosto che solo come un flusso di messaggi.Apri il principio →
- P10delegationOttimizzare per la guida, non solo per l'inizioIl sistema dovrebbe supportare gli utenti non solo nell'avvio dei compiti, ma anche nella guida, nel perfezionamento, nella riprioritizzazione e nella correzione del lavoro mentre è in corso.Apri il principio →