EsempioscriptbeginnerEseguibileresearch-brief
Recupero
Esempio rieseguibile beginner di tipo script che usa openai, pydantic.
Fatti chiave
- Livello
- beginner
- Runtime
- Python • API OpenAI
- Pattern
- Ricerca supportata dal contesto con evidenza esplicita
- 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
4-retrieval.py
python
import json
import os
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 knowledge base retrieval tool
# --------------------------------------------------------------
def search_kb(question: str):
"""
Load the whole knowledge base from the JSON file.
(This is a mock function for demonstration purposes, we don't search)
"""
with open("kb.json", "r") as f:
return json.load(f)
# --------------------------------------------------------------
# Step 1: Call model with search_kb tool defined
# --------------------------------------------------------------
tools = [
{
"type": "function",
"function": {
"name": "search_kb",
"description": "Get the answer to the user's question from the knowledge base.",
"parameters": {
"type": "object",
"properties": {
"question": {"type": "string"},
},
"required": ["question"],
"additionalProperties": False,
},
"strict": True,
},
}
]
system_prompt = "You are a helpful assistant that answers questions from the knowledge base about our e-commerce store."
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": "What is the return policy?"},
]
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 search_kb function
# --------------------------------------------------------------
def call_function(name, args):
if name == "search_kb":
return search_kb(**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 KBResponse(BaseModel):
answer: str = Field(description="The answer to the user's question.")
source: int = Field(description="The record id of the answer.")
completion_2 = client.beta.chat.completions.parse(
model="gpt-4o",
messages=messages,
tools=tools,
response_format=KBResponse,
)
# --------------------------------------------------------------
# Step 5: Check model response
# --------------------------------------------------------------
final_response = completion_2.choices[0].message.parsed
final_response.answer
final_response.source
# --------------------------------------------------------------
# Question that doesn't trigger the tool
# --------------------------------------------------------------
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": "What is the weather in Tokyo?"},
]
completion_3 = client.beta.chat.completions.parse(
model="gpt-4o",
messages=messages,
tools=tools,
)
completion_3.choices[0].message.content
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 →