Avvio rapido
Attenersi alla procedura riportata di seguito per iniziare a creare agenti AI aziendali con l'API Risposte OCI.
Per una panoramica dei passi e delle funzioni disponibili in questo QuickStart, mantenere compressa questa pagina ed esaminare i titoli. Quindi, espandere ogni titolo per i dettagli. I primi sei passi consentono di impostare l'ambiente in uso per ottenere una risposta modello mediante l'API Risposte. Le altre sezioni mostrano altre caratteristiche per gli agenti edilizi.
Ottieni una risposta modello con l'API Risposte
Prima di creare un progetto o chiamare l'API Risposte OCI, assicurarsi che siano disponibili le autorizzazioni IAM necessarie.
Concedere l'accesso alle risorse OCI Generative AI
creare un amministratore per concedere al gruppo di utenti di cui si appartiene l'autorizzazione per gestire le risorse di AI generativa OCI nel compartimento utilizzato per questo QuickStart, <QuickStart-compartment-name>;
allow group <your-group-name>
to manage generative-ai-family
in compartment <QuickStart-compartment-name>Con questa autorizzazione, puoi creare tutte le risorse del servizio di intelligenza artificiale generativa, inclusi progetti, chiavi API, aree di memorizzazione vettoriali e aree di memorizzazione semantiche in <QuickStart-compartment-name>.
Questo QuickStart utilizza un'impostazione di tipo sandbox per le relative autorizzazioni. Si consiglia di concedere l'accesso esteso solo agli amministratori o agli utenti che lavorano in ambienti sandbox. Per l'uso in produzione, applicare politiche più restrittive.
Un progetto è la risorsa fondamentale per organizzare gli agenti AI e gli asset correlati nell'AI generativa OCI. È possibile creare un progetto utilizzando la console.
Dopo aver creato un progetto, è possibile gestirlo tramite la console. Ad esempio, è possibile aggiornare i dettagli, spostarli in un altro compartimento, gestire le tag o eliminarli. Queste azioni sono disponibili dal menu nella pagina dell'elenco dei progetti.
Per iniziare, andare alla pagina della lista di progetti e selezionare Crea progetto.
Informazioni di base
Iniziare definendo gli attributi di base del progetto.
-
Nome (facoltativo):
Fornire un nome che inizi con una lettera o un carattere di sottolineatura, seguito da lettere, numeri, trattini o caratteri di sottolineatura. La lunghezza può essere compresa tra 1 e 255 caratteri. Se non si specifica un nome, viene generato automaticamente utilizzando il formato
generativeaiproject<timestamp>, ad esempiogenerativeaiproject20260316042443. È possibile eseguire l'aggiornamento in seguito. -
Descrizione (facoltativo):
Aggiungere una breve descrizione per identificare lo scopo del progetto.
-
Compartimento:
Selezionare il compartimento <QuickStart-compartment-name>.
Conservazione dati
Configurare la durata della memorizzazione dei dati generati.
-
Conservazione delle risposte:
Definisce per quanto tempo vengono memorizzate le singole risposte del modello dopo la generazione.
-
Conservazione delle conversazioni:
Decide per quanto tempo viene conservata un'intera conversazione dopo l'aggiornamento più recente.
È possibile impostare entrambi i valori in ore fino a un massimo di 720 ore (30 giorni).
Configurazione compattazione memoria a breve termine
La compattazione della memoria a breve termine riassume la cronologia delle conversazioni recenti in una rappresentazione compatta. Consente di gestire il contesto riducendo al contempo l'uso e la latenza del token.
-
Abilita (facoltativo):
Attivare la compattazione della memoria a breve termine per condensare automaticamente le interazioni precedenti.
-
Selezione del modello:
Se si abilita questa funzione, selezionare un modello di compattazione. I modelli disponibili variano in base all'area geografica.
Per i modelli disponibili, vedere 2.1 Short-Term Memory Compaction (Conversation History Compaction).
- È possibile selezionare il modello di compattazione solo al momento della creazione e non modificare questa opzione in un secondo momento.
- Se abilitata, questa funzione non può essere disabilitata senza eliminare il progetto.
Configurazione della memoria a lungo termine
Abilitando la memoria a lungo termine, il servizio può estrarre e rendere persistenti informazioni importanti dalle conversazioni per uso futuro. Questi dati vengono memorizzati come integrazioni, rendendoli ricercabili e riutilizzabili tra le interazioni.
-
Abilita (facoltativo):
Attiva la memoria a lungo termine per conservare gli insight chiave dalle conversazioni.
-
Selezione del modello:
Selezionare i seguenti modelli:
- Modello di estrazione: identifica e acquisisce informazioni importanti.
- Modello di incorporamento: converte i dati memorizzati in rappresentazioni vettoriali per il recupero.
- È necessario selezionare questi modelli durante la creazione del progetto.
- Dopo che è stato abilitato, non è possibile modificare i modelli e la memoria a lungo termine non può essere disabilitata a meno che il progetto non venga eliminato.
Per ottenere risultati ottimali, impostare sia la conservazione delle risposte che la conservazione delle conversazioni sulla durata massima di 720 ore quando si utilizza la memoria a lungo termine.
Tag
Le tag consentono di organizzare e gestire le risorse.
-
Facoltativo: selezionare Aggiungi tag per assegnare metadati al progetto.
Per ulteriori informazioni, vedere Resource Tags.
Al termine, selezionare Crea.
L'API OCI Responses supporta due metodi di autenticazione. È possibile utilizzare una delle due opzioni.
-
Autentica e raggiungi i modelli e gli endpoint con chiavi API specifiche del servizio AI generativa compatibili con OpenAI. Utilizzare questa opzione per il test e lo sviluppo anticipato.
-
Autenticazione basata su IAM OCI
Autenticare e raggiungere i modelli e gli endpoint utilizzando le richieste API firmate. Consigliamo questa opzione per i carichi di lavoro di produzione e gli ambienti gestiti da OCI. Prendere in considerazione l'uso dell'autenticazione IAM quando si effettua le operazioni riportate di seguito.
- Esegui le applicazioni nei servizi OCI come Functions o Oracle Kubernetes Engine (OKE)
- Si desidera evitare chiavi API di lunga durata
- Necessità di controllo dell'accesso centralizzato tramite IAM OCI
Questo passo è necessario solo se si utilizza l'autenticazione chiave API AI generativa OCI.
Crea una chiave API per autenticare le richieste all'AI generativa OCI. È possibile assegnare un nome alla chiave e, facoltativamente, configurare fino a due nomi chiave con date e ore di scadenza.
È possibile creare e gestire le chiavi API utilizzando la console, l'interfaccia CLI o l'API.
Nella pagina elenco chiavi API selezionare Crea chiave API.
informazioni di base
Nomi e tempi di scadenza delle chiavi
Usare il comando
api-key createe i parametri richiesti per creare una chiave API.oci generative-ai api-key create [OPTIONS]Per un elenco completo dei parametri e dei valori per i comandi CLI, consultare il manuale CLI Command Reference.
Eseguire l'operazione CreateApiKey per creare una chiave API. Fornire il nome visualizzato, la descrizione facoltativa e tutti i nomi di chiave con i relativi indicatori orari di scadenza in UTC.
Questo passo è necessario solo se si utilizza l'autenticazione chiave API AI generativa OCI.
Trova OCID chiave API
Per definire l'ambito delle autorizzazioni per una chiave API specifica, ottenere innanzitutto il relativo OCID.
Nella console:
- Aprire la pagina della lista Chiavi API.
- Selezionare la chiave API creata.
- Copia l'OCID. In genere inizia con
ocid1.generativeaiapikey....
Concedere l'autorizzazione alla chiave API
Per consentire a un gruppo specifico di utenti di richiamare l'API Risposte con questa chiave API, aggiungere il criterio IAM seguente:
allow group <agent-builders-with-Responses-API-group>
to manage generative-ai-response
in compartment <QuickStart-compartment-name>
where ALL {request.principal.type='generativeaiapikey',
request.principal.id='<api-key-OCID>'}Questo criterio consente alle richieste autenticate con la chiave API specificata di accedere all'API Risposte mantenendo l'accesso definito e controllato.
Solo per l'accesso sandbox più ampio, è possibile utilizzare il criterio seguente:
allow any-user to use generative-ai-family
in compartment <QuickStart-compartment-name>
where ALL {request.principal.type='generativeaiapikey',
request.principal.id='<your-api-key-OCID>'}Questo passo è necessario solo se si utilizza l'autenticazione chiave API AI generativa OCI. Se si utilizzano chiavi API OCI Generative AI, saltare questo passo.
Installare il package dell'applicazione di supporto per l'autenticazione OCI Generative AI:
pip install oci-genai-authIl pacchetto oci-genai-auth fornisce gli strumenti di supporto per l'autenticazione per l'integrazione dell'autenticazione IAM OCI con OpenAI SDK, tra cui:
OciSessionAuthper lo sviluppo localeOciUserPrincipalAuthper gli utenti che utilizzano le chiavi di firma API IAM OCIOciInstancePrincipalAuthOciResourcePrincipalAuthper ambienti gestiti da OCI
Quando si utilizza l'autenticazione IAM OCI con il client OpenAI, impostare api_key="not-used" e fornire un'autenticazione http_client.
Per OciUserPrincipalAuth, impostare un file di configurazione OCI per l'identità che firma le richieste. Fare riferimento agli argomenti correlati riportati di seguito.
- Argomento: Richiedi firme
- Esercitazione: Imposta autenticazione API per OCI
Installare l'SDK OpenAI ufficiale.
Python
pip install openaiPer richiamare l'API Risposte, utilizzare OpenAI SDK e non OCI SDK. Assicurarsi inoltre di utilizzare la versione più recente di OpenAI SDK.
Per altre lingue, vedere la pagina Librerie OpenAI.
L'API delle risposte OCI è l'API principale per la creazione di applicazioni Agentic AI aziendali nell'AI generativa OCI. Consente di inviare richieste modello, utilizzare strumenti e gestire il contesto di conversazione tramite un'unica API.
Utilizzare l'API Risposte per effettuare le operazioni riportate di seguito.
- Esegui flussi di lavoro degli agenti semplici e a passo singolo o in più fasi
- Abilita o disabilita il ragionamento, a seconda del caso d'uso
- Integra strumenti gestiti dalla piattaforma o lato client
- Gestire lo stato della conversazione nel servizio o nel client
L'API Risposte OCI utilizza un'interfaccia compatibile con OpenAI. Le richieste utilizzano la stessa sintassi in stile OpenAI, ma vengono inviate all'AI generativa OCI e autenticate con le credenziali OCI, come le chiavi API dell'AI generativa OCI o l'autenticazione basata su OCI IAM.
Il client consigliato è OpenAI SDK. Supporta linguaggi come Python, Java, TypeScript, Go e .NET. È inoltre possibile utilizzarlo con framework quali LangChain, LlamaIndex e OpenAI Agents SDK.
Utilizzare il seguente URL di base:
URL di base: https://inference.generativeai.${region}.oci.oraclecloud.com/openai/v1
Sostituire ${region} con l'area OCI, ad esempio us-chicago-1.
Per l'API Risposte, utilizzare il seguente percorso endpoint:
/responses
È possibile utilizzare l'API Risposte OCI per chiamare diversi tipi di modelli disponibili nelle aree supportate dell'AI generativa OCI. Per un elenco dei modelli e delle aree supportati, vedere Modelli e aree agente.
Modalità su richiesta
I modelli on-demand sono ospitati e gestiti da OCI e sono disponibili senza richiedere cluster AI dedicati. Esempi:
response = client.responses.create(
model="xai.grok-4-1-fast-reasoning",
input="Write a one-sentence explanation of what a database is."
)response = client.responses.create(
model="google.gemini-2.5-pro",
input="Write a one-sentence explanation of what a database is."
)Modalità dedicata
Per i carichi di lavoro di produzione che richiedono isolamento o prestazioni prevedibili, puoi ospitare modelli su un cluster AI dedicato. In questo caso, utilizzare l'OCID endpoint del cluster come identificativo del modello:
response = client.responses.create(
model="<dedicated-ai-cluster-endpoint-ocid>",
input="Write a one-sentence explanation of what a database is."
)Assicurarsi di selezionare la stessa area del cluster quando si invia la richiesta.
Seleziona un modello in un'area disponibile, con la modalità disponibile più adatta alle tue esigenze in termini di prestazioni, costi e controllo.
Gli esempi riportati di seguito mostrano come chiamare l'API Risposte utilizzando Python. Se la richiesta restituisce una spiegazione, l'API Risposte OCI funziona correttamente.
from openai import OpenAI
client = OpenAI(
base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1", # change the region if needed
api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", # replace with your Generative AI API key created in Step 2
project="ocid1.generativeaiproject.oc1.us-chicago-1.xxxxxxxx" # replace with your Generative AI project OCID created in Step 1
)
response = client.responses.create(
model="xai.grok-4-1-fast-reasoning",
input="Write a one-sentence explanation of what a database is."
)
print(response.output_text)Utilizza questo approccio quando utilizzi le chiavi di firma API IAM OCI (non le chiavi API dell'AI generativa OCI). Vedere Chiavi e OCID obbligatori.
from openai import OpenAI
from oci_openai import OciUserPrincipalAuth
import httpx
client = OpenAI(
base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1",
api_key="not-used",
project="ocid1.generativeaiproject.oc1.us-chicago-1.xxxxxxxx",
http_client=httpx.Client(
auth=OciUserPrincipalAuth(
config_file="~/.oci/config",
profile_name="DEFAULT",
)
)
response = client.responses.create(
model="xai.grok-4-1-fast-reasoning",
input="Write a one-sentence explanation of what a database is."
)
print(response.output_text)Utilizzare questo approccio quando si esegue il codice localmente:
from openai import OpenAI
from oci_openai import OciSessionAuth
import httpx
client = OpenAI(
base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1", # update region if needed
api_key="not-used",
project="ocid1.generativeaiproject.oc1.us-chicago-1.xxxxxxxx", # project OCID created earlier
http_client=httpx.Client(auth=OciSessionAuth(profile_name="DEFAULT")) # update profile if needed
)
response = client.responses.create(
model="xai.grok-4-1-fast-reasoning",
input="Write a one-sentence explanation of what a database is."
)
print(response.output_text)Utilizzare questo approccio quando si lavora con ambienti gestiti come le funzioni OCI o OCI Container Engine for Kubernetes (OKE):
from openai import OpenAI
from oci_openai import OciResourcePrincipalAuth
import httpx
client = OpenAI(
base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1", # update region if needed
api_key="not-used",
project="ocid1.generativeaiproject.oc1.us-chicago-1.xxxxxxxx", # project OCID created earlier
http_client=httpx.Client(auth=OciResourcePrincipalAuth()),
)
response = client.responses.create(
model="xai.grok-4-1-fast-reasoning",
input="Write a one-sentence explanation of what a database is."
)
print(response.output_text)Altre caratteristiche
In caso di problemi durante la chiamata all'API, l'abilitazione del log di debug può essere utile per la risoluzione dei problemi. I log di debug visualizzano le richieste e le risposte HTTP raw, incluso opc-request-id, utili quando si utilizza il supporto Oracle.
È possibile fare riferimento a questo ID richiesta durante la segnalazione dei problemi per facilitare l'identificazione e la diagnosi dei problemi più rapidamente.
from openai import OpenAI
import logging
logger = logging.getLogger("openai")
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())
# Create and use the OpenAI client as usual
client = OpenAI(
...
)
L'API OCI Responses supporta lo streaming, in cui è possibile ricevere gli output del modello in modo incrementale man mano che vengono generati i token.
Streaming di tutti gli eventi
response_stream = client.responses.create(
model="openai.gpt-oss-120b",
input="Explain the difference between structured and unstructured data.",
stream=True
)
for event in response_stream:
print(event)Output solo testo flusso (token delta)
response_stream = client.responses.create(
model="openai.gpt-oss-120b",
input="Explain the difference between structured and unstructured data.",
stream=True
)
for event in response_stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)Lo streaming è particolarmente utile per le applicazioni interattive in cui gli utenti possono leggere le risposte man mano che vengono generate.
I controlli di ragionamento consentono di ottimizzare l'impegno utilizzato dal modello prima di produrre una risposta. Questo è utile quando si desidera dare priorità alla velocità, alla profondità o all'equilibrio di entrambi.
Esaminare le funzioni chiave nella pagina dei dettagli del modello per assicurarsi che il modello che si sta chiamando abbia un ragionamento. Vedere Modelli di chat disponibili.
Impegno ragionamento
response = client.responses.create(
model="openai.gpt-oss-120b",
input="Solve 18 * (4 + 2).",
reasoning={"effort": "medium"},
store=False,
)
print(response.output_text)Output riepilogo motivo
Se stai creando un chatbot, abilitare riepiloghi del ragionamento può aiutare gli utenti a capire meglio come il modello è arrivato a un risultato. Durante lo streaming, gli utenti possono anche vedere i token di ragionamento mentre il modello sta pensando.
response = client.responses.create(
model="openai.gpt-oss-120b",
input="Solve 18 * (4 + 2).",
reasoning={"summary": "auto"},
store=False,
)
print(response.output_text)Utilizzare gli output strutturati quando si desidera che il modello restituisca i dati in un formato prevedibile anziché in formato libero. Ciò è utile per estrarre campi da input non strutturati, passare risultati ad altri sistemi o mostrare valori specifici in un'interfaccia utente. Nell'API Risposte OCI è possibile definire uno schema e analizzarne la risposta, il che rende l'output più coerente e più facile da usare per le applicazioni. Gli output strutturati corrispondono a uno schema fornito, mentre una modalità JSON garantisce solo JSON valido.
Un oggetto fortemente digitato è un oggetto i cui campi e tipi di dati sono definiti in anticipo. Ad esempio, se uno schema indica che customer_name deve essere una stringa e che priority deve essere uno dei valori "low", "medium" o "high", il risultato analizzato segue tale struttura. Ciò rende più facile per il codice lavorare con la risposta in modo sicuro e prevedibile. L'API Risposte OCI supporta questo aspetto consentendo di definire uno schema e di analizzare l'output del modello in oggetti fortemente digitati.
Questo approccio è utile quando si integra con i sistemi a valle, applicando la coerenza o estraendo campi specifici dall'input del linguaggio naturale.
from pydantic import BaseModel
from typing import Literal
class SupportRequest(BaseModel):
customer_name: str
product: str
issue_summary: str
priority: Literal["low", "medium", "high"]
requested_action: str
response = client.responses.parse(
model="<supported-model-id>",
input=[
{"role": "system", "content": "Extract the support request into the schema."},
{
"role": "user",
"content": (
"Sarah Johnson from Example Company says the mobile inventory app "
"crashes whenever she scans more than 20 items in one session. "
"This is delaying warehouse processing, and she wants a fix as soon as possible."
),
},
],
text_format=SupportRequest,
)
support_request = response.output_parsed
print(support_request)
Output di esempio:
SupportRequest(
customer_name='Sarah Johnson',
product='mobile inventory app',
issue_summary='App crashes whenever she scans more than 20 items in one session.',
priority='high',
requested_action='Provide a fix as soon as possible'
)L'API OCI Responses supporta modelli che accettano input multimodali. È possibile combinare il testo con immagini, file e controlli di ragionamento per supportare flussi di lavoro più completi come l'analisi dei documenti, la comprensione delle immagini e risposte di modelli più deliberate.
Esaminare le funzioni chiave nella pagina dei dettagli del modello per assicurarsi che il modello che si sta chiamando accetti input multimodali. Vedere Modelli di chat disponibili.
Input immagine come URL dati codificati in Base64
import base64
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
base64_image = encode_image("/path/to/image.png")
response = client.responses.create(
model="google.gemini-2.5-pro",
input=[
{
"role": "user",
"content": [
{"type": "input_text", "text": "Describe the main objects in this image."},
{
"type": "input_image",
"image_url": f"data:image/jpeg;base64,{base64_image}",
"detail": "high",
},
],
}
],
)
print(response.output_text)Input immagine come URL Internet
response = client.responses.create(
model="google.gemini-2.5-pro",
store=False,
input=[
{
"role": "user",
"content": [
{"type": "input_text", "text": "Describe the scene shown in this image."},
{
"type": "input_image",
"image_url": "https://example.photos/id/123",
},
],
}
],
)
print(response.output_text)Sostituire image_url con un URL immagine valido.
Input file come ID file
La funzione di input dell'ID file è supportata solo con i modelli Google Gemini. Per ogni richiesta, la dimensione combinata di tutti i file PDF caricati deve essere inferiore a 50 MB ed è possibile fornire un massimo di 10 ID file nella richiesta. Vedere modelli Gemini supportati.
file = client.files.create(
file=open("<path-to-file>", "rb"),
purpose="user_data"
)
response = client.responses.create(
model="google.gemini-2.5-pro",
input=[
{
"role": "user",
"content": [
{
"type": "input_file",
"file_id": file.id,
},
{
"type": "input_text",
"text": "Summarize this document.",
},
]
}
]
)
print(response.output_text)Input file come URL accessibile da Internet
response = client.responses.create(
model="google.gemini-2.5-flash",
input=[
{
"role": "user",
"content": [
{"type": "input_text", "text": "Summarize this file."},
{
"type": "input_file",
"file_url": "https://www.example.com/letters/example-letter.pdf",
},
],
}
],
)
print(response.output_text)API Aggiungi strumenti a risposte
Utilizzare la ricerca file per consentire al modello di recuperare il contenuto pertinente dai file memorizzati in una memoria di vettore durante la generazione della risposta. Ciò è utile quando si desidera che le risposte riflettano i documenti forniti anziché basarsi solo sulla conoscenza integrata del modello.
La creazione di archivi vettoriali e l'aggiunta di file consentono di abilitare la ricerca semantica e basata su parole chiave nei dati. Ciò estende la conoscenza integrata del modello con i tuoi contenuti personalizzati e aiuta a produrre risposte più precise e sensibili al contesto.
Poiché la ricerca file è gestita dal servizio, l'applicazione non deve implementare la propria pipeline di recupero.
Prepara una memoria di vettore
Prima di utilizzare la ricerca file, creare una memoria di vettore e aggiungere i file a cui si desidera fare riferimento al modello. OCI Generative AI supporta le seguenti API per la gestione di file e memoria di vettore:
| Set API | Descrizione |
|---|---|
| File | Caricare e gestire i file. |
| File area di memorizzazione vettoriale | Gestisce i file allegati a una memoria di vettore. |
| Batch file Vector Store | Aggiungere e gestire più file in un batch di memoria di vettore. |
| File container | Gestire i file in un contenitore. |
Esempio
Per utilizzare Ricerca file in una richiesta, aggiungere una definizione di strumento nella proprietà tools con type: "file_search" e fornire l'ID della memoria di vettore.
response = client.responses.create(
model="openai.gpt-oss-120b",
input="Summarize the main ideas covered in the documents in this vector store.",
tools=[
{
"type": "file_search",
"vector_store_ids": ["<vector_store_id>"]
}
]
)
print(response)
In questo esempio:
- Il modello può utilizzare il contenuto della memoria di vettore durante la generazione della risposta.
- Il recupero file è gestito dalla piattaforma.
- I parametri di ricerca ibridi non sono supportati con lo strumento di ricerca file.
Utilizzare l'interprete di codice per consentire al modello di scrivere ed eseguire codice Python in un contenitore sicuro e isolato. Questo strumento è utile per i calcoli, l'analisi dei dati, l'elaborazione dei file e altre attività complesse di calcolo.
Lo strumento di interprete del codice OCI utilizza lo stesso formato dello strumento di interprete del codice OpenAI utilizzato con l'API Responses con l'endpoint compatibile con OCI OpenAI. Per i dettagli relativi alla sintassi e alle richieste, vedere l'argomento Interprete codice nella documentazione OpenAI.
Nei prompt, fare riferimento all'interprete di codice come strumento python. Ad esempio: Use the python tool to solve the problem.
Poiché il codice viene eseguito in un ambiente isolato senza accesso alla rete esterna, Code Interpreter è una buona opzione quando il flusso di lavoro richiede il calcolo o l'elaborazione dei file in un'impostazione controllata.
Utilizzo di Code Intepreter
Se stai usando questo per la prima volta, pensa a Code Interpreter come a un'area di lavoro Python temporanea per il modello.
È possibile utilizzarlo per task quali:
- Risolvere i problemi di matematica
- Analisi dei file caricati
- Pulizia o trasformazione dei dati
- Creazione di grafici o tabelle
- Generazione di file di output quali log o set di dati elaborati
Ambiente esecuzione
L'ambiente Python include più di 420 librerie preinstallate, tra cui Pandas, Matplotlib e SciPy, quindi molte attività comuni funzionano senza alcuna configurazione aggiuntiva.
Il codice viene eseguito all'interno di un contenitore sandbox. Questo contenitore è l'ambiente di lavoro in cui viene eseguito Python e in cui i file caricati, i file generati e i dati di lavoro temporanei vengono memorizzati durante la sessione.
Limiti memoria contenitore
I contenitori dell'interprete di codice utilizzano un pool di memoria condivisa di 64 GB per tenancy.
Le dimensioni del contenitore supportate sono:
- 1 GB
- 4 GB
- 16 GB
- 64 GB
Questo limite condiviso può essere diviso tra più container. Ad esempio, può supportare:
- Sessantaquattro contenitori da 1 GB
- Sedici contenitori da 4 GB
- Quattro contenitori da 16 GB
- Un contenitore da 64 GB
Se è necessaria maggiore capacità, è possibile sottomettere una richiesta di servizio.
Scadenza container
Un contenitore scade dopo 20 minuti di inattività.
Questo è importante sapere quando si creano flussi in più fasi:
- Impossibile riutilizzare un contenitore scaduto
- Creare un nuovo contenitore
- Se necessario, è necessario caricare di nuovo i file
- Lo stato in memoria, come le variabili Python e gli oggetti Python, viene perso
Per questo motivo, è meglio trattare i container come ambienti di lavoro temporanei.
Esempio
Per utilizzare Code Interpreter, aggiungere una definizione di strumento nella proprietà tools con "type": "code_interpreter".
response = client.responses.create(
model="xai.grok-4-1-fast-reasoning",
tools=[
{
"type": "code_interpreter",
"container": {"type": "auto"}
}
],
instructions="Use the python tool to solve the problem and explain the result.",
input="Find the value of (18 / 3) + 7 * 2."
)
print(response.output_text)
In questo esempio, lo strumento python è Code Interpreter.
Container per interprete codice
Lo strumento Interprete codice richiede un oggetto contenitore. Il contenitore è l'ambiente isolato in cui il modello esegue il codice Python.
Un contenitore può contenere:
- File caricati
- File creati dal modello
- Dati di lavoro temporanei durante l'esecuzione
Quando si utilizza Code Interpreter, è possibile utilizzare una delle due modalità contenitore riportate di seguito.
- auto: OCI Generative AI esegue il provisioning o riutilizza un contenitore nel contesto corrente.
- OCID contenitore: si crea il contenitore personalmente, si definisce la dimensione della memoria e si fornisce l'OCID.
Per entrambe le opzioni, i container vengono creati e gestiti in OCI Generative AI. Il codice che viene eseguito in tali contenitori viene eseguito anche nella tenancy OCI Generative AI.
Lo strumento di interprete del codice OCI utilizza lo stesso formato dello strumento di interprete del codice OpenAI utilizzato con l'API Responses con l'endpoint compatibile con OCI OpenAI. Per i dettagli sulla sintassi e sulle richieste, consulta Containers for Code Intepreters e la documentazione dell'API OpenAI Containers.
Modalità automatica
In modalità automatica, il servizio esegue il provisioning o riutilizza automaticamente il contenitore. Questa è l'opzione più semplice e un buon punto di partenza per la maggior parte degli utenti.
Utilizza la modalità automatica quando:
- Si desidera che OCI Generative AI gestisca il contenitore
- Non hai bisogno di un controllo diretto sull'ambiente
- Vuoi un setup più semplice
Se si desidera, è possibile specificare memory_limit. Se non viene specificato, il valore predefinito è 1 GB.
response = client.responses.create(
model="xai.grok-code-fast-1",
tools=[{
"type": "code_interpreter",
"container": {
"type": "auto",
"memory_limit": "1g"
}
}],
input="Use the python tool to calculate the average of 12, 18, 24, and 30."
)Modalità esplicita
In modalità esplicita, si crea prima il contenitore e si imposta la dimensione. Passare quindi l'ID contenitore nella richiesta.
Utilizzare la modalità esplicita quando si desidera un maggiore controllo sulle impostazioni del contenitore, ad esempio le dimensioni della memoria, o quando si desidera mantenere una sessione dedicata.
container = client.containers.create(name="test-container", memory_limit="4g")
response = client.responses.create(
model="xai.grok-code-fast-1",
tools=[{
"type": "code_interpreter",
"container": container.id
}],
tool_choice="required",
input="Use the python tool to calculate the average of 12, 18, 24, and 30."
)
print(response.output_text)File nell'interprete di codice
Code Interpreter supporta l'interazione dinamica dei file durante la vita del contenitore. Il modello può leggere i file forniti e può anche creare nuovi file.
Ciò è utile per flussi di lavoro quali:
- Lettura di un file CSV o PDF
- Generazione di un grafico
- Salvataggio dell'output elaborato
- Creazione di log o report
Riferimento API: documentazione API OpenAI Container Files e API Container Files.
Persistenza file
I file creati o aggiornati dallo strumento python persistono tra i cicli di esecuzione del codice nello stesso contenitore, purché il contenitore non sia scaduto.
Ciò significa che il modello può basarsi su lavori precedenti nella stessa sessione. Ad esempio, può:
- Leggi file
- Analizzalo
- Salva un grafico
- Utilizzare il grafico più tardi nello stesso contenitore
Alla scadenza del contenitore, lo stato non è più disponibile.
Caricamento e gestione dei file
È possibile gestire i file contenitore tramite le API Container Files.
Le operazioni comuni includono:
- Crea file contenitore: consente di aggiungere un file al contenitore mediante caricamento multiparte o facendo riferimento a un ID
/v1/filesesistente. - Elenca file contenitore: consente di visualizzare i file nel contenitore
- Elimina file contenitore: rimuovere un file
- Recupera contenuto file contenitore: scaricare un file dal contenitore.
Ciò consente di utilizzare il contenitore come area di lavoro temporanea per l'esecuzione del codice basata su modelli.
File di output e citazioni
Quando il modello crea i file, tali file vengono memorizzati nel contenitore e possono essere restituiti come annotazioni nella risposta.
Queste annotazioni possono includere:
container_idfile_idfilename
È possibile utilizzare questi valori per recuperare il contenuto del file generato.
La risposta può includere un oggetto container_file_citation che identifica il file generato. Utilizzare l'operazione Recupera contenuto file contenitore per scaricare il file.
L'API OCI Responses supporta endpoint compatibili con OpenAI per funzioni quali Risposte, File, Container e File contenitore. È possibile utilizzare la documentazione OpenAI correlata come riferimento per la struttura delle richieste, i formati di risposta e i flussi di lavoro generali. Quando si utilizzano queste API con OCI, inviare richieste agli endpoint di inferenza dell'AI generativa OCI, utilizzare l'autenticazione OCI e notare che le risorse e l'esecuzione rimangono nell'AI generativa OCI, non in una tenancy OpenAI.
L'API File OCI utilizza lo stesso formato dell'API File OpenAI con l'endpoint compatibile con OCI OpenAI. Per i dettagli di sintassi e richiesta, consulta la documentazione API OpenAI Files.
L'interprete di codice OCI utilizzato come strumento per l'API Ressponses utilizza lo stesso formato dell'interprete di codice OpenAI con l'endpoint compatibile con OCI OpenAI. Per la sintassi e la richiesta vedere i seguenti riferimenti:
Utilizzare Chiamata funzione per consentire al modello di richiedere dati o azioni dall'applicazione durante un flusso di lavoro API Risposte. Ciò è utile quando il modello richiede informazioni o operazioni non disponibili nel prompt stesso, ad esempio dati di calendario, stato dell'applicazione interna o risultato di un'operazione personalizzata.
Con questo modello, il modello non esegue direttamente la funzione. Invece, restituisce il nome e gli argomenti della funzione, l'applicazione esegue la funzione e quindi l'applicazione invia l'output della funzione in modo che il modello possa continuare e produrre la risposta rivolta all'utente.
Cosa questo permette
La funzione Chiamata è utile quando l'applicazione deve mantenere il controllo dell'esecuzione, pur consentendo al modello di decidere quando sono necessarie informazioni esterne.
Casi d'uso di esempio:
- Ricerca degli eventi del calendario
- Recupero dei dati dell'applicazione
- Chiamata API interna o esterna
- Esecuzione di business logic o calcoli
Nella funzione è possibile chiamare un servizio esterno, un database, una delle API della libreria, un'interfaccia CLI o un server MCP locale.
Questo approccio ti offre flessibilità mantenendo il percorso di esecuzione all'interno dell'applicazione.
Flusso di esecuzione
Una tipica funzione chiamata interazione funziona las segue:
- Il client invia una richiesta che include una o più definizioni di strumento di funzione.
- Il modello decide se uno di questi strumenti è necessario.
- Se è necessario uno strumento, il modello restituisce il nome e gli argomenti della funzione.
- L'applicazione esegue la funzione e prepara il risultato.
- L'applicazione invia il risultato in una richiesta di follow-up.
- Il modello utilizza tale risultato per completare la risposta.
Opzioni gestione stato
Esistono due modi comuni per gestire lo stato nelle seguenti richieste:
-
Stato gestito dal servizio
Consigliato per la maggior parte dei casi d'uso. La richiesta di follow-up include
previous_response_ide il servizio tiene traccia dello scambio precedente. -
Stato gestito dal client
L'applicazione mantiene la cronologia completa delle interazioni e invia il contesto accumulato ad ogni richiesta.
Mantieni precise le definizioni degli strumenti. Nomi chiari, descrizioni ben scritte e parametri ben definiti aiutano il modello a selezionare lo strumento giusto e generare argomenti utilizzabili.
Definizione di uno strumento funzionale
Per definire uno strumento di funzione, aggiungere una voce nella proprietà tools con "type": "function".
Nell'esempio seguente viene definito uno strumento che recupera gli eventi di calendario per una data specificata.
tools = [
{
"type": "function",
"name": "get_calendar_events",
"description": "Return calendar events scheduled for a specific date.",
"parameters": {
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "Date to query, for example 2026-04-02"
}
},
"required": ["date"],
},
},
]Includere questo array tools nella richiesta client.responses.create().
Esempio: stato gestito dal servizio
In questo modello, la prima richiesta consente al modello di decidere se lo strumento è necessario. La seconda richiesta restituisce il risultato dello strumento e fa riferimento alla risposta precedente.
import json
tools = [
{
"type": "function",
"name": "get_calendar_events",
"description": "Return calendar events scheduled for a specific date.",
"parameters": {
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "Date to query, for example 2026-04-02"
}
},
"required": ["date"],
},
},
]
def get_calendar_events(date):
# Replace this with actual calendar logic or an API call
return [
{"time": "09:00", "title": "Team standup"},
{"time": "13:00", "title": "Design review"},
{"time": "16:00", "title": "Project check-in"},
]
# Initial request
response = client.responses.create(
model="openai.gpt-oss-120b",
tools=tools,
input="Show the calendar events for 2026-04-02.",
)
# Execute the requested function
tool_outputs = []
for item in response.output:
if item.type == "function_call" and item.name == "get_calendar_events":
args = json.loads(item.arguments)
events = get_calendar_events(**args)
tool_outputs.append({
"type": "function_call_output",
"call_id": item.call_id,
"output": json.dumps({"events": events}),
})
# Follow-up request
final = client.responses.create(
model="openai.gpt-oss-120b",
instructions="Summarize the schedule clearly for the user.",
tools=tools,
input=tool_outputs,
previous_response_id=response.id,
)
print(final.output_text)Esempio: stato gestito dal client
In questo modello, l'applicazione mantiene lo scambio completo e lo risottomette con la richiesta di follow-up.
import json
tools = [
{
"type": "function",
"name": "get_calendar_events",
"description": "Return calendar events scheduled for a specific date.",
"parameters": {
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "Date to query, for example 2026-04-02"
}
},
"required": ["date"],
},
},
]
def get_calendar_events(date):
# Replace this with actual calendar logic or an API call
return [
{"time": "09:00", "title": "Team standup"},
{"time": "13:00", "title": "Design review"},
{"time": "16:00", "title": "Project check-in"},
]
conversation = [
{"role": "user", "content": "Show the calendar events for 2026-04-02."}
]
response = client.responses.create(
model="openai.gpt-oss-120b",
tools=tools,
input=conversation,
)
conversation += response.output
for item in response.output:
if item.type == "function_call" and item.name == "get_calendar_events":
args = json.loads(item.arguments)
events = get_calendar_events(**args)
conversation.append({
"type": "function_call_output",
"call_id": item.call_id,
"output": json.dumps({"events": events}),
})
final = client.responses.create(
model="openai.gpt-oss-120b",
instructions="Summarize the schedule clearly for the user.",
tools=tools,
input=conversation,
)
print(final.output_text)La chiamata alle funzioni è un'opzione valida quando l'applicazione deve rimanere responsabile dell'esecuzione, del controllo dell'accesso e della logica di integrazione, consentendo al contempo al modello di richiedere le informazioni necessarie.
Gli strumenti MCP (Model Context Protocol) sono funzioni eseguibili o funzionalità che i modelli AI possono utilizzare per interagire con sistemi esterni. Utilizza la chiamata MCP in OCI Generative AI per consentire a un modello di accedere agli strumenti eseguibili esposti da un server MCP remoto durante una richiesta API di risposte. Questi strumenti possono fornire l'accesso a sistemi esterni come API, database, file system o endpoint delle applicazioni. OCI Generative AI comunica direttamente con i server MCP remoti come parte del flusso di lavoro delle richieste.
Quando utilizzare le chiamate MCP
Utilizzare Chiamata MCP quando il modello deve accedere agli strumenti ospitati su un server MCP remoto. Questo approccio è utile quando si desidera:
- La piattaforma Enterprise AI Agent per comunicare direttamente con il server MCP
- Meno passi di orchestrazione lato client
- Latenza inferiore rispetto a un pattern di strumenti eseguito dal client
- Accesso agli strumenti esposti tramite un server MCP remoto
Caratteristiche principali
MCP Calling offre i seguenti vantaggi:
- Comunicazione diretta da piattaforma a server: a differenza della chiamata di funzione standard, che restituisce il controllo all'applicazione client, MCP Calling consente all'AI generativa OCI di comunicare direttamente con il server MCP remoto.
-
Riduzione della latenza: poiché la richiesta non richiede un ulteriore round-trip client, MCP Calling può ridurre il sovraccarico dell'orchestrazione.
- Supporto dei trasporti: supporta il protocollo HTTP Streamable (SSE non più valido e non supportato).
Definizione di uno strumento MCP
Per definire uno strumento MCP, aggiungere una voce nella proprietà tools con "type": "mcp".
response_stream = client.responses.create(
model="openai.gpt-5.4",
tools=[
{
"type": "mcp",
"server_label": "dmcp",
"server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
"server_url": "https://mcp.deepwiki.com/mcp",
"require_approval": "never",
},
],
input="Roll 2d4+1",
stream=True,
)
for event in response_stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
In questo esempio viene eseguito il flusso della risposta e viene stampato il testo man mano che viene generato.
Limitare gli strumenti esposti da un server MCP
Un server MCP remoto può esporre molti strumenti, che possono aumentare i costi e la latenza. Se l'applicazione richiede solo un subset di tali strumenti, utilizzare allowed_tools per limitare il set.
response_stream = client.responses.create(
model="openai.gpt-oss-120b",
tools=[
{
"type": "mcp",
"server_label": "dmcp",
"server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
"server_url": "https://mcp.deepwiki.com/mcp",
"require_approval": "never",
"allowed_tools": ["roll"],
},
],
input="Roll 2d4+1",
stream=True,
store=False,
)
Autenticazione al server MCP
Se il server MCP remoto richiede l'autenticazione, passare il token di accesso nel campo authorization.
response_stream = client.responses.create(
model="xai.grok-4-1-fast-reasoning",
tools=[
{
"type": "mcp",
"server_label": "calendar",
"server_url": "https://calendar.example.com/mcp",
"authorization": "$CALENDAR_OAUTH_ACCESS_TOKEN"
},
],
input="List my meetings for 2026-02-02.",
stream=True
)
Passare solo il valore del token raw. Non includere il prefisso Bearer.
OCI invia il token nel corpo della richiesta API tramite TLS. OCI non decodifica, ispeziona, memorizza o registra il token. Si consiglia di utilizzare gli endpoint del server MCP con cifratura TLS.
Strumento NL2SQL
Utilizza SQL Search (NL2SQL) per convertire le richieste in linguaggio naturale in SQL convalidato per i dati aziendali in OCI Generative AI.
NL2SQL aiuta gli Enterprise AI Agent a lavorare con i dati aziendali federati senza spostare o duplicare i dati sottostanti. Utilizza un livello di arricchimento semantico per mappare i termini aziendali a tabelle di database, colonne e join, quindi genera SQL da input in linguaggio naturale.
NL2SQL genera solo SQL. Non esegue la query stessa. L'esecuzione delle query viene gestita separatamente tramite il server MCP DBTools, che autorizza ed esegue la query sul database di origine utilizzando l'identità dell'utente finale e i guardrail appropriati.
Prima di utilizzare NL2SQL, è necessario disporre dei seguenti elementi:
- Un database di origine, ad esempio Oracle Autonomous Database
- Due connessioni DBTools:
- Connessione di arricchimento
- Connessione query
- Autorizzazioni IAM per Semantic Stores, NL2SQL, Database Tools e segreti
- Autenticazione IAM OCI configurata per le API del servizio OCI utilizzate in questo avvio rapido
Prima di creare un'area di memorizzazione semantica, creare il database di origine e le connessioni DBTools necessarie.
Sono necessarie le seguenti connessioni:
Connessione di arricchimento
La connessione all'integrazione è una connessione al database con privilegi più elevati utilizzata durante l'integrazione. Sono necessari privilegi per:
- Esegui query
- Esegui operazioni DDL
- Accedere ai valori di esempio dal database
OCI Generative AI utilizza questa connessione per leggere i dettagli dello schema e creare i metadati necessari per la generazione SQL.
Connessione query
La connessione query è una connessione al database con privilegi inferiori utilizzata per eseguire query per conto dell'utente che esegue query.
Questa separazione aiuta a mantenere distinte le responsabilità di generazione ed esecuzione e supporta un controllo dell'accesso più sicuro.
Argomenti correlati
Prima di creare un'area di memorizzazione semantica, impostare i criteri IAM necessari.
Per amministratori negozio semantico
Se hai concesso l'accesso al passo QuickStart eseguito per concedere l'accesso alle risorse di AI generativa OCI, puoi saltare questo passo per gli amministratori. Hanno già il permesso di gestire i negozi semantici.
Gli amministratori dell'area di memorizzazione semantica sono amministratori che creano, aggiornano, eliminano e gestiscono la risorsa dell'area di memorizzazione semantica AI generativa OCI e le relative operazioni correlate a NL2SQL.
Chiedere a un amministratore di creare un gruppo IAM per gli amministratori. In questo argomento, il gruppo di amministratori è rappresentato dai seguenti elementi:
- <semantic-store-admin>
allow group <semantic-store-admin>
to manage generative-ai-semantic-store
in compartment <QuickStart-compartment-name>allow group <semantic-store-admin>
to manage generative-ai-nl2sql
in compartment <QuickStart-compartment-name>- Task di amministrazione disponibili con i due criteri precedenti
-
Un <semantic-store-admin> può:
- creare l'area di memorizzazione semantica
- visualizzare e aggiornarlo
- elimina o sposta
- arricchimento trigger
- ispezionare i risultati di arricchimento
- generare SQL dal linguaggio naturale per la convalida o il test
- gestire le operazioni NL2SQL legate all'area di memorizzazione
Per i negozi semantici di AI generativa OCI
- Creare un gruppo dinamico per le aree di memorizzazione semantiche create nella tenancy o in un compartimento specificato.
- Concedere l'autorizzazione del gruppo dinamico per:
- Accedi alle connessioni agli strumenti database
- Leggi metadati del database
- Leggi metadati di Autonomous Database
- Accedi a inferenza AI generativa
- Segreti di lettura utilizzati dalle connessioni degli strumenti di database
- Creare un gruppo dinamico per le aree di memorizzazione asemantiche nella tenancy con la regola di corrispondenza seguente:
all {resource.type='generativeaisemanticstore'} - Per limitare le aree di memorizzazione semantiche a un compartimento specifico, aggiornare la condizione precedente in modo che:
all {resource.type='generativeaisemanticstore', resource.compartment.id='<QuickStart-compartment-name>'} - Creare un criterio per concedere al gruppo dinamico l'autorizzazione ad accedere alle connessioni degli strumenti di database in un compartimento specificato.
allow dynamic-group <dynamic-group-name> to use database-tools-family in compartment <QuickStart-compartment-name>'} - Aggiungere un criterio per concedere al gruppo dinamico l'autorizzazione a leggere i segreti utilizzati dalle connessioni agli strumenti di database.
allow dynamic-group <dynamic-group-name> to read secret-family in compartment <QuickStart-compartment-name> - Aggiungere un criterio per concedere al gruppo dinamico l'autorizzazione a leggere i metadati di Oracle Database per le connessioni agli strumenti di database.
allow dynamic-group <dynamic-group-name> to read database-family in compartment <QuickStart-compartment-name> - Aggiungere un criterio per concedere al gruppo dinamico l'autorizzazione a leggere i metadati di Autonomous Database per le connessioni agli strumenti di database e i job di arricchimento.
allow dynamic-group <dynamic-group-name> to read autonomous-database-family in compartment <QuickStart-compartment-name> - Aggiungere un criterio per concedere al gruppo dinamico l'autorizzazione ad accedere alle risorse AI generativa OCI per l'inferenza.
allow dynamic-group <dynamic-group-name> to use generative-ai-family in compartment <QuickStart-compartment-name>
- Cosa forniscono le due politiche precedenti
-
La risorsa
generativeaisemanticstorepuò:- richiama inferenza LLM tramite intelligenza artificiale generativa
- utilizzare le connessioni di Database Tools per l'integrazione e l'esecuzione di query
- segreti di lettura richiesti dalle connessioni supportate dagli strumenti di database
- leggi i metadati di Oracle Database e Autonomous Database
Per utenti negozio semantico
Gli utenti dell'area di memorizzazione semantica sono utenti finali a cui è consentito accedere a un'area di memorizzazione semantica esistente e utilizzare le funzionalità NL2SQL, ma non è necessario amministrare la risorsa.
Chiedere a un amministratore di creare un gruppo IAM per gli utenti. In questo argomento, il gruppo di utenti è rappresentato da:
- <utenti semantico-negozio>
allow group <semantic-store-users>
to read generative-ai-semantic-store
in compartment <QuickStart-compartment-name>allow group <semantic-store-users>
to manage generative-ai-nl2sql
in compartment <QuickStart-compartment-name>- Task utente disponibili con i due criteri precedenti
-
<semantic-store-users> può:
- visualizzare l'archivio semantico
- utilizzare le funzionalità correlate a NL2SQL ad esso associate
- ispezionare e interrogare gli output
- informazioni sull'integrazione degli accessi
Per l'accesso utente alle connessioni agli strumenti di database
Concedere al gruppo l'accesso alle risorse degli strumenti di database necessarie:
allow group <semantic-store-users>
to use database-tools-family in compartment <QuickStart-compartment-name>
where all {request.principal.type='generativeaisemanticstore'}allow group <semantic-store-users>
to read database-family in compartment <QuickStart-compartment-name>
where all {request.principal.type='generativeaisemanticstore'}allow group <semantic-store-users>
to read autonomous-database-family in compartment <QuickStart-compartment-name>
where all {request.principal.type='generativeaisemanticstore'}Questo QuickStart utilizza l'autenticazione IAM OCI per l'API del servizio OCI che crea aree di memorizzazione semantiche, esegue job di arricchimento e genera SQL.
Impostare l'autenticazione IAM OCI per l'identità che firma le richieste. Gli esempi in questa sezione utilizzano l'SDK Python OCI e BaseClient.
È possibile eseguire l'autenticazione utilizzando:
- Un file di configurazione e chiavi di firma API OCI
- Firmatario del token di sicurezza
Gli esempi riportati di seguito utilizzano SecurityTokenSigner, ma è anche possibile utilizzare un firmatario di configurazione OCI standard se si adatta meglio al proprio ambiente.
Argomenti correlati
Per utilizzare NL2SQL, creare una risorsa Semantic Store OCI.
Un'area di memorizzazione semantica è supportata da una memoria di vettore con dati strutturati e include le connessioni DBTools riportate di seguito.
- Connessione di arricchimento
- Connessione query
Creare un'area di memorizzazione semantica nella console
- Aprire la pagina elenco delle aree di memorizzazione vettoriali.
- Immettere un nome e una descrizione.
- Selezionare il compartimento <QuickStart-compartment-name>.
- In Tipo origine dati, selezionare Dati strutturati.
- In Configura connettore di sincronizzazione, selezionare Strumento database OCI come tipo di connessione.
- Immettere l'ID connessione integrazione, quindi selezionare Test connessione integrazione.
- Immettere l'ID connessione query, quindi selezionare Esegui test connessione query.
- In Schemi specificare i nomi degli schemi di database da includere.
-
Per Automazione, selezionare quando viene eseguito l'arricchimento:
- Nessuno
- In fase di creazione
- Selezionare Crea.
Creare un'area di memorizzazione semantica utilizzando Python
L'esempio riportato di seguito crea e gestisce un'area di memorizzazione semantica utilizzando l'API del servizio OCI.
import json
import oci
from oci.base_client import BaseClient
from oci.retry import DEFAULT_RETRY_STRATEGY
API_VERSION = "20231130"
HOST = "https://generativeai.us-ashburn-1.oci.oraclecloud.com"
BASE_PATH = f"/{API_VERSION}"
def get_signer_auth_security_token(profile="DEFAULT"):
config = oci.config.from_file("~/.oci/config", profile)
signer = oci.auth.signers.SecurityTokenSigner(config)
return config, signer
def make_base_client(signer):
return BaseClient(
service_endpoint=HOST,
signer=signer,
retry_strategy=None,
)
def create_semantic_store(client, body: dict):
return client.call_api(
resource_path=f"{BASE_PATH}/semanticStores",
method="POST",
header_params={"content-type": "application/json"},
body=body,
)
if __name__ == "__main__":
config, signer = get_signer_auth_security_token(profile="DEFAULT")
client = make_base_client(signer)
create_body = {
"displayName": "TestSemanticStore",
"description": "Semantic store for the ADMIN schema",
"freeformTags": {},
"definedTags": {},
"dataSource": {
"queryingConnectionId": "ocid1.databasetoolsconnection.oc1.xxx",
"enrichmentConnectionId": "ocid1.databasetoolsconnection.oc1.xxx",
"connectionType": "DATABASE_TOOLS_CONNECTION",
},
"refreshSchedule": {"type": "ON_CREATE"},
"compartmentId": "xxx",
"schemas": {
"connectionType": "DATABASE_TOOLS_CONNECTION",
"schemas": [{"name": "ADMIN"}],
},
}
create_resp = create_semantic_store(client, create_body)
print("CREATE status:", create_resp.status)
create_payload = create_resp.data
if isinstance(create_payload, (bytes, str)):
create_payload = json.loads(create_payload)
print("CREATE response:", json.dumps(create_payload, indent=2))Per Automazione, se è stato selezionato Nessuno anziché Al momento della creazione, è possibile eseguire l'arricchimento dopo la creazione dell'area di memorizzazione semantica. Eseguire questo passo se si è saltata l'opzione Al momento della creazione.
Il processo di arricchimento legge i metadati dello schema, ad esempio tabelle e colonne, dal database connesso. OCI Generative AI utilizza questi metadati per generare l'istruzione SQL.
Per attivare l'arricchimento manualmente, chiamare l'API GenerateEnrichmentJob.
È inoltre possibile gestire i job di integrazione utilizzando l'API seguente:
ListEnrichmentJobsGetEnrichmentJobCancelEnrichmentJob
NL2SQL utilizza le API del servizio OCI anziché i percorsi /openai/v1 compatibili con OCI OpenAI.
CRUD negozio semantico
Utilizzare il seguente URL di base per le operazioni CRUD dell'area di memorizzazione semantica:
URL di base: https://generativeai.${region}.oci.oraclecloud.com
Utilizzare il percorso endpoint seguente:
/20231130/semanticStores
Autenticazione:
- Solo sessione IAM
API Mansione integrazione
Utilizzare il seguente URL di base per i job di arricchimento di un'area di memorizzazione semantica:
URL di base: https://inference.generativeai.${region}.oci.oraclecloud.com
Utilizzare il percorso endpoint seguente:
/20260325/semanticStores/{semanticStoreId}/
Autenticazione:
- Solo sessione IAM
Genera SQL da linguaggio naturale
Utilizzare il seguente URL di base per la generazione SQL:
URL di base: https://inference.generativeai.${region}.oci.oraclecloud.com
Utilizzare il seguente pattern endpoint:
/20260325/semanticStores/{semanticStoreId}/actions/generateSqlFromNl
Autenticazione:
- Solo sessione IAM
API Semantic Store e NL2SQL disponibili
Negozi semantici
- Negozi semantici
-
CreateSemanticStoreListSemanticStoresGetSemanticStoreUpdateSemanticStoreChangeSemanticStoreCompartmentDeleteSemanticStore
- Job di integrazione
-
ListEnrichmentJobsGetEnrichmentJobGenerateEnrichmentJobCancelEnrichmentJob
- Genera SQL
GenerateSqlFromNl
L'URL di base è diverso per l'API delle aree di memorizzazione semantica e dei job di arricchimento.
Una volta che il Semantic Store è pronto e l'arricchimento è stato completato, chiamare l'API NL2SQL per generare SQL dal linguaggio naturale.
import json
import oci
from oci.base_client import BaseClient
INFERENCE_BASE_URL = "https://inference.generativeai.<region>.oci.oraclecloud.com"
API_VERSION = "20260325"
SEMANTIC_STORE_ID = "ocid1.generativeaisemanticstore.oc1.xxx"
config = oci.config.from_file("~/.oci/config", "oc1")
signer = oci.auth.signers.SecurityTokenSigner(config)
client = BaseClient(
service_endpoint=INFERENCE_BASE_URL,
signer=signer,
retry_strategy=None,
)
resource_path = (
f"/{API_VERSION}/semanticStores/{SEMANTIC_STORE_ID}/actions/generateSqlFromNl"
)
body = {
"displayName": "Generate SQL example",
"description": "Generate SQL from natural language",
"inputNaturalLanguageQuery": "Give me last week's order details."
}
resp = client.call_api(
resource_path=resource_path,
method="POST",
header_params={"content-type": "application/json"},
body=body,
)
print("HTTP status:", resp.status)
print("opc-request-id:", resp.headers.get("opc-request-id"))
data = resp.data
if isinstance(data, (bytes, str)):
data = json.loads(data)
print(json.dumps(data, indent=2))Osserva
Utilizzare i dati di trace di risposta built-in nell'API Risposte OCI per comprendere come è stata elaborata una richiesta. Per un'osservabilità più approfondita, puoi anche integrare l'API delle risposte OCI con piattaforme di osservabilità esterne come Langfuse.
Questo QuickStart mostra come ispezionare i dettagli di esecuzione restituiti dall'API Risposte e come tracciare le richieste utilizzando Langfuse.
Prima di iniziare, è necessario disporre dei seguenti elementi:
- Un progetto di AI generativa OCI
- Autenticazione configurata per l'API Risposte OCI
- OpenAI SDK installato
- Client API di OCI Responses funzionante
(Facoltativo) Per l'integrazione con Langfuse, è necessario un account Langfuse e le credenziali.
Quando si chiama l'API Risposte OCI, la risposta include un campo output. Questo campo è un array di elementi che descrivono ciò che è accaduto durante la richiesta.
Ogni elemento rappresenta un passo dell'esecuzione e può includere tipi diversi, ad esempio:
messagefile_search_callmcp_call
Questi elementi di output forniscono visibilità sull'elaborazione della richiesta. È possibile utilizzarli per:
- Eseguire il debug e comprendere il comportamento del modello
- Visualizzare i passi di esecuzione in un'interfaccia utente
- Crea flussi di lavoro di osservabilità o registrazione personalizzati
Ad esempio, dopo aver inviato una richiesta, è possibile ispezionare il campo output:
response = client.responses.create(
model="openai.gpt-oss-120b",
input="Explain the difference between structured and unstructured data."
)
for item in response.output:
print(item.type)
Per insight più approfonditi, come latenza, costi e tracce di esecuzione, puoi integrare l'API delle risposte OCI con una piattaforma di osservabilità.
Un'opzione è Langfuse, una piattaforma di progettazione LLM open source che aiuta gli sviluppatori a eseguire il debug, monitorare e migliorare le applicazioni LLM. Langfuse offre osservabilità end-to-end per il trace delle azioni degli agenti, supporta il controllo delle versioni dei prompt e consente di valutare gli output dei modelli. Si integra con framework popolari come OpenAI, LangChain e LlamaIndex.
Installare Langfuse SDK:
pip install langfuse
Impostare le variabili di ambiente Langfuse e OCI necessarie:
LANGFUSE_SECRET_KEY="sk-lf-xxxxxxxxx"
LANGFUSE_PUBLIC_KEY="pk-lf-xxxxxxxxx"
LANGFUSE_BASE_URL="https://us.cloud.langfuse.com"
# OCI Generative AI credentials
OCI_GENAI_API_KEY="sk-xxxxxxxxx"
OCI_GENAI_PROJECT_ID="ocid1.generativeaiproject.oc1.xxx"Importare il client OpenAI dall'SDK Langfuse. Il codice richiesta esistente rimane invariato, ma le richieste vengono tracciate automaticamente.
import os
from langfuse.openai import OpenAI # Import from Langfuse
client = OpenAI(
base_url="https://inference.generativeai.<region>.oci.oraclecloud.com/openai/v1",
api_key=os.getenv("OCI_GENAI_API_KEY"),
project=os.getenv("OCI_GENAI_PROJECT_ID"),
)Dopo aver eseguito la strumentazione del client, inviare una richiesta API Risposte come al solito. Langfuse traccia automaticamente la richiesta.
Esempio:
response = client.responses.create(
model="openai.gpt-oss-120b",
tools=[
{
"type": "mcp",
"server_label": "dmcp",
"server_url": "https://mcp.example.com/mcp",
"require_approval": "never",
},
],
input="Explain why tracing and observability are important in distributed systems."
)
print(response.output_text)