Avvio rapido

Attenersi alla procedura riportata di seguito per iniziare a creare agenti AI aziendali con l'API Risposte OCI.

Suggerimento

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

Requisiti indispensabili

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>.

Importante

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.
1. Crea progetto

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 Azioni (tre punti) 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 esempio generativeaiproject20260316042443. È 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).

Importante

  • È 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.
Importante

  • È 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.
Suggerimento

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.

2. Imposta autenticazione

L'API OCI Responses supporta due metodi di autenticazione. È possibile utilizzare una delle due opzioni.

  • Chiavi API OCI Generative AI

    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
2.1 (a) Creare una Chiave API

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

    1. Immettere un nome per la chiave API. Questo campo è obbligatorio. Iniziare il nome 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.
    2. (Facoltativo) Immettere un descrizione.
    3. Salvare la chiave API nel compartimento <QuickStart-compartment-name>.
      È necessario disporre dell'autorizzazione per lavorare in un compartimento e visualizzare le risorse al suo interno. In caso di dubbi su quale compartimento utilizzare, contattare un amministratore. Per ulteriori informazioni, vedere Introduzione ai compartimenti.
    4. (Facoltativo) Assegnare Tag a questa chiave API. Vedere Tag risorsa.

    Nomi e tempi di scadenza delle chiavi

    1. Immettere un nome per la prima chiave in Nome chiave. Iniziare il nome 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.
    2. (Facoltativo) Impostare Data di scadenza chiave e Ora di scadenza chiave uno (UTC).
      Il valore predefinito è di tre mesi dalla data di creazione.
    3. Immettere un nome per la seconda chiave in Nome due chiavi.
    4. (Facoltativo) Impostare la data di scadenza due chiavi e la ora di scadenza due chiavi (UTC).
      Il valore predefinito è di tre mesi dalla data di creazione.
    5. Selezionare Crea.
  • Usare il comando api-key create e 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.

2.1 (b) Aggiungere l'autorizzazione alla chiave API

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:

  1. Aprire la pagina della lista Chiavi API.
  2. Selezionare la chiave API creata.
  3. 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>'}
2.2 (a) Installare la libreria di autenticazione IAM OCI Generative AI

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-auth

Il pacchetto oci-genai-auth fornisce gli strumenti di supporto per l'autenticazione per l'integrazione dell'autenticazione IAM OCI con OpenAI SDK, tra cui:

  • OciSessionAuth per lo sviluppo locale
  • OciUserPrincipalAuth per gli utenti che utilizzano le chiavi di firma API IAM OCI
  • OciInstancePrincipalAuth
  • OciResourcePrincipalAuth per 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.

3. Installa openai

Installare l'SDK OpenAI ufficiale.

Python

pip install openai
Nota

Per 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.

4. Trova l'endpoint per l'API delle risposte OCI

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
5. Trova ID e aree modello supportati

È 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.

6. Crea la tua prima risposta

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.

Esempio di chiave API
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)
Esempio OciUserPrincipalAuth

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)
Esempio OciSessionAuth

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)
Esempio OciResourcePrincipalAuth

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

Abilita registrazione 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(
    ...
)
Risposte flusso

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.

Aggiungi 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.

Suggerimento

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)
Recupera output strutturati

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'
)
Invia 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.

Suggerimento

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

Importante

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

Interprete codice

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.

Nota

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.
Suggerimento

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.

Nota

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/files esistente.
  • 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_id
  • file_id
  • filename

È 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.

Nota

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.
Nota

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:

Chiamata funzione

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:

  1. Il client invia una richiesta che include una o più definizioni di strumento di funzione.
  2. Il modello decide se uno di questi strumenti è necessario.
  3. Se è necessario uno strumento, il modello restituisce il nome e gli argomenti della funzione.
  4. L'applicazione esegue la funzione e prepara il risultato.
  5. L'applicazione invia il risultato in una richiesta di follow-up.
  6. 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_id e 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.

Suggerimento

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.

Chiamata MCP

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

Informazioni sulla ricerca SQL con 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.

Requisiti indispensabili

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
1. Crea connessioni tra database e DBTools

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

2. Impostare le autorizzazioni IAM per le aree di memorizzazione semantica e NL2SQL

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
  1. Creare un gruppo dinamico per le aree di memorizzazione asemantiche nella tenancy con la regola di corrispondenza seguente:
    all {resource.type='generativeaisemanticstore'}
  2. 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>'}
  3. 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>'}
  4. 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>
  5. 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>
  6. 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>
  7. 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 generativeaisemanticstore può:

  • 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'}
3. Imposta autenticazione IAM OCI

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

4. Creare un'area di memorizzazione semantica

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

  1. Aprire la pagina elenco delle aree di memorizzazione vettoriali.
  2. Immettere un nome e una descrizione.
  3. Selezionare il compartimento <QuickStart-compartment-name>.
  4. In Tipo origine dati, selezionare Dati strutturati.
  5. In Configura connettore di sincronizzazione, selezionare Strumento database OCI come tipo di connessione.
  6. Immettere l'ID connessione integrazione, quindi selezionare Test connessione integrazione.
  7. Immettere l'ID connessione query, quindi selezionare Esegui test connessione query.
  8. In Schemi specificare i nomi degli schemi di database da includere.
  9. Per Automazione, selezionare quando viene eseguito l'arricchimento:
    • Nessuno
    • In fase di creazione
  10. 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))
5. Esegui integrazione manualmente

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:

  • ListEnrichmentJobs
  • GetEnrichmentJob
  • CancelEnrichmentJob
6. Trova gli endpoint OCI per l'area di memorizzazione semantica e GenerateSqlFromNl

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
  • CreateSemanticStore
  • ListSemanticStores
  • GetSemanticStore
  • UpdateSemanticStore
  • ChangeSemanticStoreCompartment
  • DeleteSemanticStore
Job di integrazione
  • ListEnrichmentJobs
  • GetEnrichmentJob
  • GenerateEnrichmentJob
  • CancelEnrichmentJob
Genera SQL
GenerateSqlFromNl
Nota

L'URL di base è diverso per l'API delle aree di memorizzazione semantica e dei job di arricchimento.
7. Genera la prima istruzione SQL

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

Informazioni sul tracciamento delle chiamate API delle risposte

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.

Requisiti indispensabili

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.

1. Ispeziona output API risposte

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:

  • message
  • file_search_call
  • mcp_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)
2. Installare l'SDK Langfuse

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
3. Configura 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"
4. Strumento del client OpenAI

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"),
)
5. Invia una richiesta API di risposte registrate

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)