Avvio rapido
Utilizza i passaggi seguenti per iniziare a creare agenti AI aziendali con OCI Generative AI. In questa guida viene illustrato l'impostazione iniziale, corredata del contesto, in modo da comprendere non solo l'operazione, ma anche il perché è importante.
Prerequisito: impostazione delle autorizzazioni IAM
Prima di creare un progetto, assicurarsi che i gruppi di utenti appropriati abbiano accesso alle risorse OCI Generative AI. Senza queste autorizzazioni, non sarà possibile creare o gestire progetti e asset correlati.
OCI fornisce un tipo di risorsa aggregato, generative-ai-family, che concede l'accesso a tutti i tipi di risorse di intelligenza artificiale generativa tramite un singolo criterio.
Concedere un accesso ampio solo agli amministratori o agli utenti che lavorano in ambienti sandbox o di sviluppo. Per l'uso in produzione, considerare l'applicazione di politiche più restrittive.
Concedere l'accesso a livello di tenancy
Per consentire a un gruppo di utenti di gestire tutte le risorse di intelligenza artificiale generativa nella tenancy:
allow group <your-group-name> to manage generative-ai-family
in tenancyConcedi accesso a livello di compartimento
Per definire l'ambito dell'accesso a un compartimento specifico:
allow group <your-group-name> to manage generative-ai-family
in compartment <your-compartment-name>Una volta stabilite queste autorizzazioni, si è pronti per creare il primo progetto.
1. Crea progetto
Un progetto è la risorsa fondamentale per organizzare e gestire gli agenti AI e gli asset correlati nell'AI generativa OCI. È possibile creare un progetto utilizzando la console di Oracle Cloud.
Dopo aver creato un progetto, è possibile gestirlo tramite la console, ad esempio aggiornandone i dettagli, spostandolo in un altro compartimento, gestendo le tag o eliminandolo. Queste azioni sono disponibili dal menu nella pagina della lista di progetti.
Per iniziare, andare alla pagina della lista di progetti e selezionare Crea progetto.
informazioni di base
-
Nome (facoltativo):
Fornire un nome che inizi con una lettera o un carattere di sottolineatura, seguito da lettere, numeri, trattini o caratteri di sottolineatura (da 1 a 255 caratteri). Se non si specifica un nome, ne viene generato automaticamente uno utilizzando il formato seguente:
generativeaiproject<timestamp>(ad esempio,generativeaiproject20260316042443). È possibile eseguire l'aggiornamento in seguito. -
Descrizione (facoltativo):
Aggiungere una breve descrizione per identificare lo scopo del progetto.
-
Compartimento:
Selezionare il compartimento in cui risiederà il progetto. Per impostazione predefinita, si tratta del compartimento corrente, ma è possibile scegliere qualsiasi compartimento in cui si dispone delle autorizzazioni necessarie.
Conservazione dati
Configurare la durata della memorizzazione dei dati generati. Ciò consente di bilanciare l'usabilità con i requisiti del ciclo di vita dei dati:
-
Conservazione delle risposte:
Definisce per quanto tempo vengono memorizzate le singole risposte del modello dopo la generazione.
-
Conservazione delle conversazioni:
Determina 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).
Compattazione memoria a breve termine
Questa funzione migliora l'efficienza riepilogando 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 abilitato, selezionare un modello di compattazione. I modelli disponibili variano in base all'area geografica.
- Il modello di compattazione è selezionato al momento della creazione e non può essere modificato in seguito.
- Una volta abilitata, questa funzione non può essere disabilitata senza eliminare il progetto.
Memoria a lungo termine
La memoria a lungo termine consente al sistema di estrarre e mantenere informazioni importanti dalle conversazioni per un 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:
- Modello di estrazione: identifica e acquisisce informazioni importanti.
- Modello di incorporamento: converte i dati memorizzati in rappresentazioni vettoriali per il recupero.
- Questi modelli devono essere selezionati durante la creazione del progetto e non possono essere modificati in seguito.
- Dopo l'abilitazione, la memoria a lungo termine non può essere disabilitata a meno che il progetto non venga eliminato.
Per ottenere risultati ottimali, impostare la conservazione delle risposte e delle conversazioni sulla durata massima (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.
Selezionare infine Crea per creare il progetto.
2. Crea chiave API
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.
Le chiavi API vengono utilizzate per autenticare le richieste all'AI generativa OCI. In questo passo, verrà creata una chiave che le applicazioni o gli strumenti possono utilizzare per accedere in modo sicuro al servizio.
È possibile creare e gestire le chiavi API utilizzando la console, l'interfaccia CLI o l'API.
Nella pagina di elenco Chiavi API selezionare Crea chiave API. Per assistenza nella ricerca della pagina di elenco, vedere Elenca chiavi API.
Informazioni di base
Nomi delle chiavi e tempi di scadenza
Assicurarsi di aggiungere l'autorizzazione per la chiave API dopo aver creato la chiave. 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 i nomi delle chiavi con i relativi indicatori orari di scadenza (UTC).
3. Aggiungi autorizzazione alla chiave API
Trova OCID chiave API
Per definire l'ambito delle autorizzazioni per una chiave API specifica, è necessario il relativo OCID.
Nella console:
- Passare alla pagina della lista Chiavi API.
- Selezionare la chiave API creata.
- Copiare OCID (in genere inizia con
ocid1.generativeaiapikey...)
Concedere l'autorizzazione alla chiave API
Creare un criterio IAM per consentire alla chiave API di richiamare l'API delle risposte:
allow group <your-group-name>
to manage generative-ai-response in tenancy where ALL
{request.principal.type='generativeaiapikey',
request.principal.id='<your-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.
4. Chiama l'API Risposte OCI
L'API Risposte OCI è l'interfaccia principale per la creazione di applicazioni Agentic AI aziendali nell'AI generativa OCI. Offre un modo flessibile per combinare funzionalità di base, come orchestrazione, ragionamento, strumenti e stato delle conversazioni, in un'unica richiesta.
Con questa API puoi:
- Esegui un'inferenza semplice e a passo singolo o crea flussi di lavoro degli agenti in più fasi
- Abilita o disabilita il ragionamento a seconda del caso d'uso
- Integra gli strumenti (gestiti dalla piattaforma o lato client)
- Gestire lo stato della conversazione nel servizio o all'interno del client
Questo approccio unificato ti consente di iniziare a creare agenti semplici e progressivamente più avanzati, mantenendo al contempo il controllo su costi, latenza e comportamento.
URL di base 🔗
Utilizzare il seguente URL di base per accedere all'API Risposte OCI:
https://inference.generativeai.<region>.oci.oraclecloud.com/openai/v1Sostituire <region> con l'identificativo di area appropriato (ad esempio, us-chicago-1).
Supporto SDK 🔗
L'API OCI Responses è compatibile con OpenAI SDK, consigliato per interagire con il servizio. È supportato in molti linguaggi, tra cui Python, Java, TypeScript, Go e .NET.
Puoi anche usarlo con framework di agenti popolari come LangChain, LlamaIndex e OpenAI Agents SDK.
Installare l'SDK OpenAI ufficiale (Python)
Python
pip install openaiPer richiamare l'API Risposte, assicurarsi di utilizzare OpenAI SDK e non OCI SDK. Assicurarsi inoltre di avere installato la versione più recente di OpenAI SDK.
Per altre lingue, vedere la pagina Librerie OpenAI.
Fai la tua prima richiesta 🔗
L'esempio riportato di seguito mostra come chiamare l'API Responses utilizzando Python.
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)
Se la risposta restituisce una spiegazione, l'API Risposte OCI funziona correttamente.
Informazioni sugli endpoint API delle risposte OCI
L'API Risposte OCI utilizza un'interfaccia compatibile con OpenAI, ma tutte le richieste vengono instradate tramite l'endpoint di inferenza OCI Generative AI:
https://inference.generativeai.<region>.oci.oraclecloud.com/openai/v1
Ciò significa che puoi utilizzare API di stile OpenAI familiari (ad esempio /responses o /containers), mentre tutte le richieste vengono eseguite all'interno di OCI.
Sebbene le API seguano il formato OpenAI, sono completamente integrate con OCI:
- L'autenticazione utilizza le chiavi API di OCI Generative AI o l'accesso basato su IAM, non le credenziali OpenAI
- Le risorse (ad esempio container, vector store o file) vengono create e gestite all'interno di OCI, non in un ambiente OpenAI
- Esecuzione ed elaborazione dei dati rimangono interamente all'interno di OCI
Ad esempio, quando si effettua una chiamata:
/openai/v1/containers
il contenitore viene creato e gestito in OCI Generative AI.
Sono supportati solo gli endpoint elencati di seguito. Altri endpoint OpenAI non sono compatibili con OCI Generative AI.
Il resto di questo Quickstart fornisce esempi di come utilizzare questi endpoint.
Endpoint disponibili
| API | URL di base | Autenticazione | Percorso endpoint |
|---|---|---|---|
| API risposte | https://inference.generativeai.${region}.oci.oraclecloud.com |
Chiave API o sessione IAM | /openai/v1/responses |
| API conversazioni | https://inference.generativeai.${region}.oci.oraclecloud.com |
Chiave API o sessione IAM | /openai/v1/conversations |
| API File | https://inference.generativeai.${region}.oci.oraclecloud.com |
Chiave API o sessione IAM | /openai/v1/files |
| API File Vector Store | https://inference.generativeai.${region}.oci.oraclecloud.com |
Chiave API o sessione IAM | /openai/v1/vector_stores/{id}/files |
| Ricerca Vector Store | https://inference.generativeai.${region}.oci.oraclecloud.com |
Chiave API o sessione IAM | /openai/v1/vector_stores/{id}/search |
| API container | https://inference.generativeai.${region}.oci.oraclecloud.com |
Chiave API o sessione IAM | /openai/v1/containers |
| CRUD progetto | https://generativeai.${region}.oci.oraclecloud.com |
Solo sessione IAM | /20231130/generativeAiProjects |
| CRUD chiave API | https://generativeai.${region}.oci.oraclecloud.com |
Solo sessione IAM | /20231130/apikeys |
| CRUD negozio semantico | https://generativeai.${region}.oci.oraclecloud.com |
Solo sessione IAM | /20231130/semanticStores |
| CRUD memoria di vettore | https://generativeai.${region}.oci.oraclecloud.com |
Solo sessione IAM | /20231130/openai/v1/vector_stores |
Autenticazione IAM OCI
Nei passi precedenti, è stata utilizzata una chiave API AI generativa per autenticare le richieste all'API delle risposte OCI. Le chiavi API sono un'opzione conveniente per test rapidi e sviluppo precoce. Tuttavia, per i carichi di lavoro di produzione, molti team preferiscono l'autenticazione basata su IAM OCI per una maggiore sicurezza e un controllo dell'accesso centralizzato.
L'API OCI Responses supporta completamente l'autenticazione IAM OCI. In questa sezione viene descritto come utilizzare l'autenticazione basata su IAM anziché le chiavi API.
Quando utilizzare l'autenticazione IAM
Prendere in considerazione l'uso dell'autenticazione IAM quando:
- Esecuzione di applicazioni nei servizi OCI (ad esempio, Functions o OKE)
- Evitare credenziali di lunga durata come le chiavi API
- Applicazione di un controllo dell'accesso capillare tramite criteri IAM
Installare la libreria di autenticazione IAM OCI
Installare la libreria oci-genai-auth, che fornisce le utility di supporto per l'integrazione dell'autenticazione IAM OCI con OpenAI SDK:
pip install oci-genai-authQuesta libreria include i seguenti strumenti di supporto per l'autenticazione:
OciSessionAuth(per lo sviluppo locale)OciUserPrincipalAuthOciInstancePrincipalAuthOciResourcePrincipalAuth(per ambienti gestiti da OCI)
Configurare il client OpenAI
Quando si utilizza l'autenticazione IAM, inizializzare il client OpenAI con un client HTTP personalizzato e un handler di autenticazione. In questo caso, il valore api_key è "not used".
Esempio: sviluppo locale (OciSessionAuth)
Utilizzare questo approccio quando si esegue il codice a livello locale (ad esempio su un laptop che utilizza un profilo CLI OCI):
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)Esempio: OCI Managed Environments (OciResourcePrincipalAuth)
Utilizzare questo approccio quando si esegue in servizi OCI come OCI Functions 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()),
)L'uso dell'autenticazione IAM OCI consente all'applicazione di accedere in modo sicuro all'AI generativa OCI senza gestire le chiavi API, allineandosi allo stesso tempo alle procedure di sicurezza OCI standard.
Garantire le autorizzazioni richieste
Prima di chiamare l'API delle risposte OCI, verificare che siano in vigore i criteri IAM appropriati. I criteri richiesti dipendono dal metodo di autenticazione utilizzato.
Se si utilizza l'autenticazione IAM OCI
Se i criteri sono stati aggiunti in Prerequisito: impostazione delle autorizzazioni IAM, saltare questo passo.
Per consentire a un gruppo di utenti di chiamare l'API Risposte, aggiungere il criterio seguente:
allow group <your-group-name>
to manage generative-ai-response in tenancySe si utilizza l'autenticazione chiave API IA generativa
Quando si utilizza l'autenticazione della chiave API, è necessario un altro criterio per autorizzare le richieste effettuate con la chiave API. Se i criteri sono stati aggiunti in 3. Aggiungere l'autorizzazione alla chiave API, saltare questo passo.
Per concedere l'accesso a una chiave API specifica:
allow group <your-group-name>
to manage generative-ai-response in tenancy
where ALL {request.principal.type='generativeaiapikey',
request.principal.id='<your-api-key-OCID>'}Per un accesso più ampio (ad esempio durante i test), è possibile utilizzare un criterio più generale:
allow any-user
to manage generative-ai-family in tenancy
where ALL {request.principal.type='generativeaiapikey',
request.principal.id='<your-api-key-OCID>'}Questi criteri garantiscono che le richieste, autenticate tramite chiavi IAM o API, siano autorizzate ad accedere alle risorse OCI Generative AI.
Abilita log debug
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(
...
)
Modelli chiamata
È 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.
Modelli in hosting di terze parti
OCI Generative AI fornisce l'accesso AI modelli da fornitori di terze parti. Specificare il modello utilizzando il nome completamente qualificato:
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."
)Modelli su richiesta
I modelli on-demand sono ospitati e gestiti da OCI e sono disponibili senza richiedere un'infrastruttura dedicata:
response = client.responses.create(
model="openai.gpt-oss-120b",
input="Write a one-sentence explanation of what a database is."
)Cluster AI dedicati (modalità dedicata)
Per i carichi di lavoro di produzione che richiedono isolamento o prestazioni prevedibili, puoi distribuire 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."
)Questa flessibilità ti consente di selezionare il modello di implementazione più adatto alle tue esigenze in termini di prestazioni, costi e controllo.
Risposte flusso
L'API OCI Responses supporta lo streaming, consentendo di ricevere gli output del modello in modo incrementale man mano che vengono generati. Ciò può migliorare la reattività per output più lunghi.
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 si desidera visualizzare le risposte agli utenti man mano che vengono generati.
Output strutturato
In alcuni casi d'uso, è possibile che il modello restituisca le risposte in un formato strutturato anziché in formato libero. L'API OCI Responses 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
class CalendarEvent(BaseModel):
name: str
date: str
participants: list[str]
response = client.responses.parse(
model="openai.gpt-oss-120b",
input=[
{"role": "system", "content": "Extract the event details."},
{
"role": "user",
"content": "The team meeting is scheduled for Monday with Sarah, John, and Priya.",
},
],
store=False,
text_format=CalendarEvent,
)
event = response.output_parsed
print(event)
Traccia chiamate API
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:
messageweb_search_callfile_search_callmcp_callmcp_list_tools
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
Integrazione con gli strumenti di osservabilità 🔗
Per insight più approfonditi come latenza, costi e tracce di esecuzione, puoi integrare l'API delle risposte OCI con le piattaforme di osservabilità.
Molti provider supportano le API compatibili con OpenAI. Una di queste opzioni è Langfuse, una piattaforma di progettazione LLM open source che aiuta gli sviluppatori a eseguire il debug, monitorare e migliorare le applicazioni LLM. Fornisce osservabilità end-to-end per il tracciamento delle azioni degli agenti, supporta il controllo delle versioni dei prompt e aiuta nella valutazione degli output del modello. Langfuse si integra con framework popolari come OpenAI, LangChain e LlamaIndex.
L'esempio seguente mostra come utilizzare Langfuse per tracciare e monitorare le chiamate API Risposte.
Passo 1: Installare l'SDK Langfuse
pip install langfusePasso 2: configurare le variabili di ambiente
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"Passo 3: strumento del client OpenAI
Importare il client OpenAI dall'SDK Langfuse. Il codice 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.us-ashburn-1.oci.oraclecloud.com/openai/v1",
api_key=os.getenv("OCI_GENAI_API_KEY"),
project=os.getenv("OCI_GENAI_PROJECT_ID"),
)
# Requests are automatically instrumented by Langfuse
response = client.responses.create(
model="openai.gpt-oss-120b",
tools=[
{
"type": "mcp",
"server_label": "dmcp",
"server_url": "https://mcp.deepwiki.com/mcp",
"require_approval": "never",
},
],
input="Explain why tracing and observability are important in distributed systems."
)
print(response.output_text)Questa integrazione offre visibilità end-to-end sulle chiamate API senza richiedere modifiche significative al codice dell'applicazione.
Input multimodali
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.
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="openai.gpt-oss-120b",
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 accessibile da Internet
response = client.responses.create(
model="openai.gpt-oss-120b",
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
L'ID file come funzione di input è supportato 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)Ragionamento
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.
Impegno ragionamento
import json
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.
import json
response = client.responses.create(
model="openai.gpt-oss-120b",
input="Solve 18 * (4 + 2).",
reasoning={"summary": "auto"},
store=False,
)
print(response.output_text)Strumenti funzione
Gli strumenti di funzione consentono al modello di richiedere dati o azioni dall'applicazione client durante un flusso di risposta. Ciò è utile quando il modello ha bisogno di informazioni che si trovano al di fuori del prompt stesso, ad esempio i dati del calendario, lo stato dell'applicazione interna o il risultato di un'operazione personalizzata.
Con questo modello, il modello non esegue direttamente la funzione. Invece, segnala che deve essere utilizzata una funzione, l'applicazione client esegue quel lavoro e quindi l'applicazione invia il risultato in modo che il modello possa continuare e produrre la risposta rivolta all'utente.
Cosa questo permette
Gli strumenti di funzione sono utili quando l'applicazione deve mantenere il controllo dell'esecuzione, pur consentendo al modello di decidere quando sono necessarie informazioni esterne.
Tipici casi d'uso sono:
- Ricerca degli eventi del calendario
- Recupero dei dati dell'applicazione
- Chiamata di API interne o esterne
- Esecuzione di business logic o calcoli
Questo approccio ti offre flessibilità mantenendo il percorso di esecuzione all'interno dell'applicazione.
Flusso di esecuzione 🔗
Un'interazione tipica dello strumento di funzione funziona così:
- Il client invia una richiesta che include una o più definizioni di strumento.
- Il modello decide se uno di questi strumenti è necessario.
- Se è necessario uno strumento, il modello restituisce il nome e gli argomenti dello strumento.
- L'applicazione esegue lo strumento 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 di gestione dello 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 conserva l'intera cronologia delle interazioni e invia il contesto accumulato a ogni richiesta.
Mantieni precise le definizioni degli strumenti. Nomi chiari, descrizioni accurate e parametri ben definiti aiutano il modello a selezionare lo strumento giusto e generare argomenti utilizzabili.
Definizione di uno strumento funzionale
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 servizio
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)Gli strumenti di funzione sono un'opzione efficace quando l'applicazione deve rimanere responsabile dell'esecuzione, del controllo dell'accesso e della logica di integrazione, pur consentendo al modello di richiedere le informazioni di cui ha bisogno.
Strumento MCP
Lo strumento MCP consente a un modello di utilizzare le funzionalità esposte da un server MCP remoto durante una richiesta. Queste funzionalità possono includere l'accesso a servizi esterni, origini dati o endpoint delle applicazioni.
In OCI Generative AI, questa funzionalità è disponibile tramite chiamate MCP remote, che consentono al servizio di interagire con un server MCP come parte del flusso di lavoro del modello.
Quando utilizzare lo strumento MCP
Utilizzare lo strumento MCP quando il modello deve accedere a funzionalità esterne ospitate su un server MCP.
Questo approccio è utile quando si desidera:
- Il servizio 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 alle funzionalità esposte tramite un server MCP remoto
Lo strumento MCP fa parte del set di strumenti OCI Generative AI e può essere utilizzato insieme ad altri strumenti supportati.
Supporto trasporto
Le chiamate MCP remote utilizzano Streamable HTTP.
Definizione di uno strumento MCP
Aggiungere la definizione del server MCP nel campo tools della richiesta.
response_stream = client.responses.create(
model="xai.grok-code-fast-1",
tools=[
{
"type": "mcp",
"server_label": "calendar",
"server_description": "An MCP server that retrieves calendar events for a specified date.",
"server_url": "https://example.com/mcp",
"require_approval": "never",
},
],
input="What events are scheduled for 2026-04-02?",
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 dal server MCP
Se il server MCP remoto espone un numero di strumenti superiore a quello richiesto dall'applicazione, è possibile limitare il set disponibile utilizzando allowed_tools.
response_stream = client.responses.create(
model="openai.gpt-oss-120b",
tools=[
{
"type": "mcp",
"server_label": "calendar",
"server_description": "An MCP server that retrieves calendar events for a specified date.",
"server_url": "https://example.com/mcp",
"require_approval": "never",
"allowed_tools": ["get_events"],
},
],
input="Show the calendar events for 2026-02-02.",
stream=True,
store=False,
)Autenticazione al server MCP
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,
store=False,
)Passare solo il valore del token. Non includere il prefisso Bearer. OCI invia il token su TLS come parte della richiesta e non decodifica, ispeziona, memorizza o registra il token.
Hosting server MCP
OCI Generative AI fornisce anche l'hosting di server MCP per aiutare a distribuire e ridimensionare i server MCP.
Lo strumento MCP è una buona opzione quando desideri che OCI Generative AI funzioni direttamente con un server MCP remoto durante l'esecuzione delle richieste, senza richiedere all'applicazione client di gestire ogni passo dello strumento stesso.
Strumento di ricerca file
Lo strumento di ricerca file consente al modello di cercare il contenuto pertinente dai file memorizzati in una memoria di vettore e di utilizzare il contenuto recuperato durante la formazione di una risposta. Ciò è utile quando si desidera che le risposte riflettano i documenti forniti, piuttosto che basarsi solo sulla conoscenza integrata del modello.
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 diversi pattern di gestione dei file tramite API che seguono lo stile API dei file OpenAI.
| Set API | Descrizione |
|---|---|
| File | Gestione dei file standard. |
| File area di memorizzazione vettoriale | File collegati direttamente ai negozi. |
| Batch file Vector Store | File per l'elaborazione batch da aggiungere ai negozi. |
| File container | Gestione dei file containerizzati. |
Esempio
Per rendere disponibile la ricerca file in una richiesta, aggiungere una voce dello strumento 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)
- 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.
Interprete codice
Code Interpreter consente al modello di scrivere ed eseguire codice Python in un contenitore sicuro. Ciò è utile per attività quali calcoli, analisi dei dati ed elaborazione dei file.
Nei prompt, è possibile chiamare lo strumento Interprete codice come strumento python. Ad esempio: Utilizzare lo strumento python per risolvere il problema.
Poiché il codice viene eseguito in un ambiente isolato senza accesso alla rete esterna, è una buona opzione per le attività che richiedono il calcolo o l'elaborazione dei file in un'impostazione controllata.
Per cosa puoi usarlo
Se stai usando questo per la prima volta, aiuta a pensare a Code Interpreter come a un'area di lavoro Python temporanea per il modello.
È possibile utilizzarlo per task quali:
- risolvere problemi matematici
- 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, pertanto molte attività comuni funzionano senza alcuna configurazione aggiuntiva.
Il codice viene eseguito all'interno di un container. Questo contenitore è l'ambiente di lavoro in cui viene eseguito Python e dove vengono memorizzati i file 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, potrebbe 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
- è necessario creare un nuovo contenitore
- i file devono essere nuovamente caricati, se necessario
- stato in-memory, ad esempio variabili Python, perso
Per questo motivo, è meglio trattare i container come ambienti di lavoro temporanei.
Esempio
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)Container per interprete codice
L'interprete di codice ha bisogno di un 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 l'interprete di codice, è possibile assegnare una delle due modalità contenitore riportate di seguito.
- Automatico: OCI Generative AI crea il contenitore automaticamente e assegna automaticamente una dimensione del contenitore.
- OCID contenitore: si crea il contenitore da soli, si definisce la dimensione del contenitore e si fornisce l'OCID.
Per entrambe le opzioni, i container vengono creati e gestiti in AI generativa OCI. Il codice eseguito in tali contenitori viene eseguito anche nella tenancy AI generativa OCI.
Modalità automatica
In modalità automatica, il servizio crea 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:
- vuoi che OCI Generative AI gestisca il container
- Non hai bisogno di un controllo diretto sull'ambiente
- vuoi un setup più semplice
response = client.responses.create(
model="xai.grok-code-fast-1",
tools=[{
"type": "code_interpreter",
"container": {
"type": "auto"
}
}],
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 specifiche del contenitore, ad esempio la dimensione della memoria.
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 può funzionare con i 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 output elaborato
- creazione di log o report
Persistenza file 🔗
I file creati o modificati dallo strumento python rimangono disponibili nello stesso contenitore finché il contenitore non è scaduto.
Ciò significa che il modello può basarsi su lavori precedenti nella stessa sessione. Ad esempio, può:
- leggi un file
- analizza
- salvare 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 del file contenitore.
Le operazioni comuni includono:
- Crea file contenitore: aggiunge un file al contenitore
- 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 e citazioni di output 🔗
Quando il modello crea i file, tali file vengono memorizzati nel contenitore e possono essere utilizzati come riferimento nella risposta.
Questi riferimenti includono:
container_idfile_idfilename
È possibile utilizzare questi valori per recuperare il contenuto del file generato.
L'API OCI Responses supporta endpoint compatibili con OpenAI per funzioni quali Risposte, File, Container e File contenitore. Per questo motivo, la documentazione OpenAI correlata può essere utilizzata come riferimento per la struttura delle richieste, i formati di risposta e i flussi di lavoro generali. Tuttavia, quando si utilizzano queste API con OCI, inviare richieste agli endpoint di inferenza AI generativa OCI, utilizzare l'autenticazione OCI e tenere presente che le risorse e l'esecuzione rimangono nell'AI generativa OCI e non in una tenancy OpenAI.
L'API OCI Responses supporta endpoint compatibili con OpenAI per funzioni quali Risposte, File, Container e File contenitore. Per questo motivo, la documentazione OpenAI correlata può essere utilizzata come riferimento per la struttura delle richieste, i formati di risposta e i flussi di lavoro generali. Tuttavia, quando si utilizzano queste API con OCI, inviare le richieste agli endpoint di inferenza AI generativa OCI, utilizzare l'autenticazione OCI e le risorse e l'esecuzione rimangono in AI generativa OCI, non in una tenancy OpenAI. Vedere Endpoint disponibili per l'URL di base e gli endpoint supportati.
Riferimento OpenAI
Strumento NL2SQL
Lo strumento NL2SQL aiuta gli agenti AI aziendali a trasformare il linguaggio naturale in SQL convalidato. È progettato per eseguire query sui dati aziendali federati senza spostare o duplicare i dati sottostanti.
NL2SQL esegue il mapping del linguaggio business ai campi, alle tabelle e ai join del database tramite un livello di arricchimento semantico. Lo strumento genera solo SQL. Non esegue la query stessa.
L'esecuzione delle query viene gestita separatamente dal server DBTools MCP. Tale server chiama il servizio NL2SQL per generare SQL, quindi autorizza ed esegue la query sul database di origine utilizzando l'identità dell'utente finale e i guardrail appropriati.
Per utilizzare NL2SQL, creare una risorsa Semantic Store OCI. Una memoria semantica è supportata da una memoria di vettore con dati strutturati e include due connessioni DBTools:
- Connessione di arricchimento
- Connessione query
Durante l'impostazione, si seleziona quando viene eseguito l'arricchimento:
- Al momento della creazione: l'arricchimento viene avviato automaticamente dopo la creazione dell'area di memorizzazione semantica
- Manuale: l'arricchimento viene attivato in seguito tramite una chiamata API
Il processo di arricchimento legge i metadati dello schema, ad esempio tabelle e colonne, dal database connesso. Questi metadati vengono quindi utilizzati per generare istruzioni SQL più accurate.
Al termine dell'arricchimento, è possibile chiamare l'API GenerateSqlFromNl per convertire l'input del linguaggio naturale in SQL.
Requisiti indispensabili
Prima di utilizzare lo strumento NL2SQL, creare un database e configurare le connessioni al database necessarie.
Per ulteriori informazioni, fare riferimento agli argomenti sotto riportati.
Autorizzazioni per negozi semantici
Per utilizzare i dati strutturati per l'esecuzione di query NL2SQL e basate su schema, impostare i criteri IAM necessari prima di creare l'area di memorizzazione semantica.
Accesso ai segreti
Concedere l'accesso di gruppo per leggere i segreti utilizzati dagli strumenti di database:
allow group <your-group-name>
to read secret-family in compartment <your-compartment-name>
where all {request.principal.type='generativeaisemanticstore'}Accesso alle connessioni agli strumenti di database
Concedere al gruppo l'accesso alle risorse degli strumenti di database necessarie:
allow group <your-group-name>
to use database-tools-family in compartment <compartment-name>
where all {request.principal.type='generativeaisemanticstore'}
allow group <your-group-name>
to read database-family in compartment <compartment-name>
where all {request.principal.type='generativeaisemanticstore'}allow group <your-group-name>
to read autonomous-database-family in compartment <compartment-name>
where all {request.principal.type='generativeaisemanticstore'}Accesso alle risorse di intelligenza artificiale generativa
Se il criterio più ampio riportato di seguito è già in vigore, include l'accesso alle risorse dell'area di memorizzazione semantica:
allow group <your-group-name>
to manage generative-ai-family in tenancySe si desidera un accesso più limitato, utilizzare il criterio riportato di seguito per consentire al gruppo di creare e gestire le aree di memorizzazione semantiche.
allow group <your-group-name>
to manage generative-ai-semantic-store
in compartment <your-compartment-name>Se il gruppo deve utilizzare solo un'area di memorizzazione semantica esistente e chiamare NL2SQL, utilizzare i criteri più specifici riportati di seguito.
allow group <your-group-name>
to use generative-ai-semantic-store
in compartment <your-compartment-name>allow group <your-group-name>
to manage generative-ai-nl2sql
in compartment <your-compartment-name>Creazione di un'area di memorizzazione semantica
Una memoria semantica è una memoria di vettore con dati strutturati che puntano a un database. Questo task documenta i passi per la creazione di una memoria di vettore con dati strutturati utilizzando la console di Oracle Cloud.
Dopo aver creato una memoria di vettore, è possibile visualizzarne i dettagli ed eseguire altri task, ad esempio aggiornarla o eliminarla. Per accedere a questi task, utilizzare il menu nella console.
Per creare una memoria di vettore, nella pagina della lista selezionare Crea memoria di vettore. Per assistenza nella ricerca della pagina elenco, vedere Elenca negozi vettoriali.
informazioni di base
Tipo di origine dati
Selezionare Dati strutturati. Questa opzione crea un'area di memorizzazione semantica per l'esecuzione di query NL2SQL e basate su schema.
Dati strutturati
API di memorizzazione semantica
È possibile gestire le aree di memorizzazione semantiche utilizzando la seguente API:
ChangeSemanticStoreCompartmentCreateSemanticStoreDeleteSemanticStoreGetSemanticStoreUpdateSemanticStoreListSemanticStores
Per la gestione dei job di arricchimento, sono disponibili anche le seguenti API:
ListEnrichmentJobsGetEnrichmentJobGenerateEnrichmentJobCancelEnrichmentJob
Esempio: creazione e gestione di un'area di memorizzazione semantica con Python
import json
import oci
from oci.base_client import BaseClient
from oci.retry import DEFAULT_RETRY_STRATEGY
API_VERSION = "20231130"
HOST = "https://dev.generativeai.us-ashburn-1.oci.oraclecloud.com"
BASE_PATH = f"/{API_VERSION}"
def get_signer_auth_api_key(profile="DEFAULT"):
config = oci.config.from_file("~/.oci/config", profile)
signer = oci.signer.Signer(
tenancy=config["tenancy"],
user=config["user"],
fingerprint=config["fingerprint"],
private_key_file_location=config["key_file"],
pass_phrase=config.get("pass_phrase"),
)
return config, signer
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,
)
def update_semantic_store(client, semantic_store_id: str, body: dict):
return client.call_api(
resource_path=f"{BASE_PATH}/semanticStores/{semantic_store_id}",
method="PUT",
header_params={"content-type": "application/json"},
body=body,
retry_strategy=DEFAULT_RETRY_STRATEGY,
)
def get_semantic_store(client, semantic_store_id: str):
return client.call_api(
resource_path=f"{BASE_PATH}/semanticStores/{semantic_store_id}",
method="GET",
retry_strategy=DEFAULT_RETRY_STRATEGY,
)
def delete_semantic_store(client, semantic_store_id: str):
return client.call_api(
resource_path=f"{BASE_PATH}/semanticStores/{semantic_store_id}",
method="DELETE",
retry_strategy=DEFAULT_RETRY_STRATEGY,
)
if __name__ == "__main__":
# Choose one authentication method
# config, signer = get_signer_auth_api_key(profile="DEFAULT")
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": "ocid1.tenancy.oc1..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))
semantic_store_id = create_payload.get("id") or "<semantic-store-ocid>"
update_body = {
"refreshSchedule": {"type": "ON_CREATE"},
"schemas": {
"connectionType": "DATABASE_TOOLS_CONNECTION",
"schemas": [{"name": "ADMIN"}],
},
}
update_resp = update_semantic_store(client, semantic_store_id, update_body)
print("UPDATE status:", update_resp.status)
print("UPDATE response:", update_resp.data)
get_resp = get_semantic_store(client, semantic_store_id)
print("GET status:", get_resp.status)
print("GET response:", get_resp.data)
delete_resp = delete_semantic_store(client, semantic_store_id)
print("DELETE status:", delete_resp.status)
print("DELETE response:", delete_resp.data)Esempio: chiamare l'API NL2SQL
Una volta che l'area di memorizzazione semantica è pronta e l'arricchimento è stato completato, è possibile 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))
Conversazioni con più turni
OCI Generative AI supporta interazioni in più turni, in modo da poter creare applicazioni che mantengono il contesto tra i turni degli utenti.
Al riguardo, è possibile procedere in due modi:
- Concatenamento risposte
- API conversazioni
Concatenamento risposte
Con il concatenamento delle risposte, ogni nuova risposta punta a quella precedente. Questa è un'opzione semplice quando si desidera portare avanti il contesto senza creare esplicitamente una risorsa di conversazione.
# first turn
response1 = client.responses.create(
model="openai.gpt-oss-120b",
input="Give me three ideas for a team offsite.",
)
print("Response 1:", response1.output_text)
# second turn
response2 = client.responses.create(
model="openai.gpt-oss-120b",
input="Make the second idea more budget friendly.",
previous_response_id=response1.id,
)
print("Response 2:", response2.output_text)
API conversazioni
# create a conversation
conversation = client.conversations.create(
metadata={"topic": "demo"}
)
print("Conversation ID:", conversation.id)
# first turn
response1 = client.responses.create(
model="openai.gpt-oss-120b",
input="Give me three ideas for a team offsite.",
conversation=conversation.id,
)
print("Response 1:", response1.output_text)
# second turn
response2 = client.responses.create(
model="openai.gpt-oss-120b",
input="Make the second idea more budget friendly.",
conversation=conversation.id,
)
print("Response 2:", response2.output_text)