Démarrage express

Procédez comme suit pour commencer à créer des agents d'IA d'entreprise avec l'API OCI Responses.

Conseil

Pour obtenir un aperçu des étapes et des fonctionnalités offertes dans ce démarrage rapide, réduisez cette page et vérifiez les titres. Développez ensuite chaque titre pour plus de détails. Les six premières étapes configurent votre environnement pour obtenir une réponse de modèle à l'aide de l'API Réponses. Les autres sections présentent d'autres caractéristiques pour les agents de bâtiment.

Obtenir une réponse de modèle avec l'API Réponses

Prérequis

Avant de créer un projet ou d'appeler l'API OCI Responses, vérifiez que les droits d'accès IAM requis sont en place.

Accorder l'accès aux ressources OCI Generative AI

ignorez un administrateur pour accorder au groupe d'utilisateurs auquel vous appartenez le droit d'accès permettant de gérer les ressources OCI Generative AI dans le compartiment utilisé pour ce démarrage rapide, <QuickStart-compartment-name>.

allow group <your-group-name> 
to manage generative-ai-family
in compartment <QuickStart-compartment-name>

Avec ce droit d'accès, vous pouvez créer toutes les ressources du service d'IA générative, y compris les projets, les clés d'API, les banques de vecteurs et les banques sémantiques dans <QuickStart-compartment-name>.

Important

Ce démarrage rapide utilise une configuration de type modèle d'environnement restreint pour ses droits d'accès. Nous vous recommandons d'accorder un accès étendu uniquement aux administrateurs ou aux utilisateurs travaillant dans des environnements Sandbox. Pour une utilisation en production, appliquez des stratégies plus restrictives.
1. Création d'un projet

Un projet est la ressource de base pour l'organisation des agents d'IA et des ressources associées dans OCI Generative AI. Pour créer un projet, utilisez la console.

Une fois le projet créé, vous pouvez le gérer via la console. Par exemple, vous pouvez mettre à jour ses détails, les déplacer vers un autre compartiment, gérer des balises ou les supprimer. Ces actions sont disponibles dans le menu Actions (trois points) de la page de liste des projets.

Pour commencer, accédez à la page de la liste des projets et sélectionnez Créer un projet.

Informations de base

Commencez par définir les attributs de base du projet.

  • Nom (facultatif) :

    Indiquez un nom qui commence par une lettre ou un trait de soulignement, suivi de lettres, de chiffres, de traits d'union ou de traits de soulignement. La longueur peut être comprise entre 1 et 255 caractères. Si vous n'indiquez pas de nom, un nom est généré automatiquement à l'aide du format generativeaiproject<timestamp>, par exemple generativeaiproject20260316042443. Vous pouvez le mettre à jour ultérieurement.

  • Description (facultatif):

    Ajoutez une brève description pour identifier l'objectif du projet.

  • Compartiment:

    Sélectionnez le compartiment <QuickStart-compartment-name>.

Conservation des données

Configurez la durée pendant laquelle les données générées sont stockées.

  • Conservation de la réponse :

    Définit la durée pendant laquelle les réponses de modèle individuelles sont stockées après la génération.

  • Conservation de la conversation :

    Détermine la durée pendant laquelle une conversation entière est conservée après sa mise à jour la plus récente.

Vous pouvez définir les deux valeurs en heures, jusqu'à 720 heures (30 jours) au maximum.

Configuration de la compaction de la mémoire à court terme

Le compactage de mémoire à court terme résume l'historique des conversations récentes en une représentation compacte. Il permet de maintenir le contexte tout en réduisant l'utilisation et la latence des jetons.

  • Activer (facultatif) :

    Activez la compression de mémoire à court terme pour condenser automatiquement les interactions précédentes.

  • Sélection de modèle :

    Si vous activez cette fonctionnalité, sélectionnez un modèle de compactage. Les modèles disponibles varient selon la région.

    Pour connaître les modèles disponibles, reportez-vous à Compaction de mémoire à court terme 2.1 (compaction d'historique de conversation).

Important

  • Vous ne pouvez sélectionner le modèle de compactage qu'au moment de la création et ne pouvez pas modifier cette option ultérieurement.
  • Si elle est activée, cette fonction ne peut pas être désactivée sans supprimer le projet.

Configuration de mémoire à long terme

En activant la mémoire à long terme, le service peut extraire et conserver des informations importantes des conversations pour une utilisation future. Ces données sont stockées en tant qu'intégrations, ce qui les rend consultables et réutilisables dans les interactions.

  • Activer (facultatif) :

    Activez la mémoire à long terme pour conserver les informations clés des conversations.

  • Sélection de modèle :

    Sélectionnez les modèles suivants :

    • Modèle d'extraction : identifie et capture les informations importantes.
    • Modèle d'intégration : convertit les données stockées en représentations vectorielles pour extraction.
Important

  • Vous devez sélectionner ces modèles lors de la création du projet.
  • Une fois qu'il est activé, vous ne pouvez pas modifier les modèles et la mémoire à long terme ne peut pas être désactivée, sauf si le projet est supprimé.
Conseil

Pour de meilleurs résultats, définissez à la fois la conservation des réponses et la conservation des conversations sur la durée maximale de 720 heures lorsque vous utilisez de la mémoire à long terme.

Balises

Les balises vous aident à organiser et à gérer les ressources.

  • Facultatif : sélectionnez Ajouter une balise pour affecter des métadonnées au projet.

    Pour plus d'informations, reportez-vous à Balises de ressource.

Une fois que vous avez terminé, sélectionnez Créer.

2. Configurer l'authentification

L'API OCI Responses prend en charge deux méthodes d'authentification. Vous pouvez utiliser l'une ou l'autre option.

  • Clés d'API OCI Generative AI

    Authentifiez et atteignez les modèles et les adresses avec des clés d'API propres au service d'IA générative compatibles OpenAI. Utilisez cette option pour les tests et le développement anticipé.

  • Authentification basée sur OCI IAM

    Authentifier et atteindre les modèles et les adresses à l'aide de demandes d'API signées. Nous recommandons cette option pour les charges de travail de production et les environnements gérés par OCI. Envisagez d'utiliser l'authentification IAM lorsque vous :

    • Exécuter des applications dans des services OCI tels que Functions ou Oracle Kubernetes Engine (OKE)
    • Vous voulez éviter les clés d'API à long terme
    • Besoin d'un contrôle d'accès centralisé via OCI IAM
2.1 a) Création d'une clé d'API

Cette étape est requise uniquement si vous utilisez l'authentification par clé d'API OCI Generative AI.

Créez une clé d'API pour authentifier les demandes auprès d'OCI Generative AI. Vous pouvez nommer la clé et éventuellement configurer jusqu'à deux noms de clé avec des dates et heures d'expiration.

Vous pouvez créer et gérer des clés d'API en utilisant la console, l'interface de ligne de commande ou l'API.

  • Sur la page de liste Clés d'API, sélectionnez Créer une clé d'API.

    Informations de base

    1. Entrez le nom de la clé d'API. Ce champ est obligatoire. Commencez le nom par une lettre ou un tiret de soulignement, suivi de lettres, de chiffres, de traits d'union ou de trait de soulignement. La longueur peut être comprise entre 1 et 255 caractères.
    2. (Facultatif) Entrez une description.
    3. Enregistrez la clé d'API dans le compartiment <QuickStart-compartment-name>.
      Vous devez être autorisé à travailler dans un compartiment pour y voir les ressources. En cas de doute sur le compartiment à utiliser, contactez un administrateur. Pour plus d'informations, reportez-vous à Présentation des compartiments.
    4. (Facultatif) Affectez des balises à cette clé d'API. Reportez-vous à Balises de ressource.

    Noms de clé et heures d'expiration

    1. Entrez le nom de la première clé dans Nom de la clé unique. Commencez le nom par une lettre ou un tiret de soulignement, suivi de lettres, de chiffres, de traits d'union ou de trait de soulignement. La longueur peut être comprise entre 1 et 255 caractères.
    2. (Facultatif) Définissez une date d'expiration de clé unique et une heure d'expiration de clé unique (UTC).
      La valeur par défaut est de trois mois à compter de la date de création.
    3. Entrez le nom de la seconde clé dans Nom de la clé deux.
    4. (Facultatif) Définissez la date d'expiration des deux clés et la heure d'expiration des deux clés (UTC).
      La valeur par défaut est de trois mois à compter de la date de création.
    5. Sélectionnez Create (Créer).
  • Utilisez la commande api-key create et les paramètres requis pour créer une clé d'API.

    oci generative-ai api-key create [OPTIONS]

    Pour obtenir la liste complète des paramètres et des valeurs des commandes de la CLI, reportez-vous à la référence des commandes de la CLI.

  • Exécutez l'opération CreateApiKey pour créer une clé d'API. Indiquez le nom d'affichage, la description facultative et tous les noms de clé avec leur horodatage d'expiration au format UTC.

2.1 b) Ajouter une autorisation à la clé d'API

Cette étape est requise uniquement si vous utilisez l'authentification par clé d'API OCI Generative AI.

Rechercher l'OCID de clé d'API

Pour définir la portée des droits d'accès à une clé d'API spécifique, commencez par obtenir son OCID.

Dans la console :

  1. Ouvrez la page de liste des clés d'API.
  2. Sélectionnez la clé d'API que vous avez créée.
  3. Copiez l'OCID. Il commence généralement par ocid1.generativeaiapikey....

Accorder le droit d'accès à la clé d'API

Pour autoriser un groupe d'utilisateurs spécifique à appeler l'API de réponses avec cette clé d'API, ajoutez la stratégie IAM suivante :

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>'}

Cette stratégie permet aux demandes authentifiées avec la clé d'API indiquée d'accéder à l'API des réponses tout en gardant l'accès étendu et contrôlé.

Pour un accès à un modèle d'environnement restreint plus large uniquement, vous pouvez utiliser la stratégie suivante :

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) Installation de la bibliothèque d'authentification OCI Generative AI IAM

Cette étape est requise uniquement si vous utilisez l'authentification par clé d'API OCI Generative AI. Si vous utilisez des clés d'API OCI Generative AI, ignorez cette étape.

Installez le package d'aide à l'authentification OCI Generative AI :

pip install oci-genai-auth

Le package oci-genai-auth fournit des aides à l'authentification pour l'intégration de l'authentification OCI IAM au kit SDK OpenAI, notamment :

  • OciSessionAuth pour le développement local
  • OciUserPrincipalAuth pour les utilisateurs utilisant les clés de signature d'API OCI IAM
  • OciInstancePrincipalAuth
  • OciResourcePrincipalAuth pour les environnements gérés par OCI

Lorsque vous utilisez l'authentification OCI IAM avec le client OpenAI, définissez api_key="not-used" et fournissez une valeur http_client authentifiée.

Pour OciUserPrincipalAuth, configurez un fichier de configuration OCI pour l'identité qui signe les demandes. Reportez-vous aux rubriques connexes suivantes :

3. Installer openai

Installez le SDK officiel OpenAI.

Python

pip install openai
Remarque

Pour appeler l'API des réponses, utilisez le kit SDK OpenAI, et non le kit SDK OCI. Assurez-vous également d'utiliser la dernière version du kit SDK OpenAI.

Pour les autres langues, reportez-vous à la page Bibliothèques OpenAI.

4. Recherche de l'adresse pour l'API OCI Responses

L'API OCI Responses est l'API principale pour créer des applications agénétiques d'IA d'entreprise dans OCI Generative AI. Il vous permet d'envoyer des demandes de modèle, d'utiliser des outils et de gérer le contexte de conversation via une seule API.

Utilisez l'API des réponses pour :

  • Exécuter des workflows d'inférence simple en une étape ou en plusieurs étapes
  • Activer ou désactiver le raisonnement, selon le cas d'utilisation
  • Intégrer des outils gérés par la plate-forme ou côté client
  • Gérer l'état de la conversation dans le service ou dans le client

L'API des réponses OCI utilise une interface compatible OpenAI. Les demandes utilisent la même syntaxe de type OpenAI, mais elles sont envoyées à OCI Generative AI et authentifiées avec les informations d'identification OCI, telles que les clés d'API OCI Generative AI ou l'authentification basée sur OCI IAM.

Le client recommandé est le kit SDK OpenAI. Il prend en charge des langages tels que Python, Java, TypeScript, Go et .NET. Vous pouvez également l'utiliser avec des frameworks tels que LangChain, LlamaIndex et OpenAI Agents SDK.

Utilisez l'URL de base suivante :

URL de base : https://inference.generativeai.${region}.oci.oraclecloud.com/openai/v1

Remplacez ${region} par la région OCI, par exemple, us-chicago-1.

Pour l'API des réponses, utilisez le chemin d'adresse suivant :

/responses
5. Rechercher les ID et régions de modèle pris en charge

Vous pouvez utiliser l'API OCI Responses pour appeler différents types de modèle disponibles dans les régions prises en charge par OCI Generative AI. Pour obtenir la liste des modèles et des régions pris en charge, reportez-vous à Modèles et régions d'agent.

Mode à la demande

Les modèles à la demande sont hébergés et gérés par OCI et sont disponibles sans nécessiter de clusters d'IA dédiés. Exemples :

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

Mode dédié

Pour les charges de travail de production nécessitant une isolation ou des performances prévisibles, vous pouvez héberger des modèles sur un cluster d'IA dédié. Dans ce cas, utilisez l'OCID d'adresse de cluster comme identificateur de modèle :

response = client.responses.create(
    model="<dedicated-ai-cluster-endpoint-ocid>",
    input="Write a one-sentence explanation of what a database is."
)

Veillez à sélectionner la même région que le cluster lorsque vous envoyez la demande.

Sélectionnez un modèle dans une région disponible, avec le mode disponible qui correspond le mieux à vos exigences en matière de performances, de coûts et de contrôle.

6. Créez votre première réponse

Les exemples suivants montrent comment appeler l'API Réponses à l'aide de Python. Si la demande renvoie une explication, l'API OCI Responses fonctionne correctement.

Exemple de clé d'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)
Exemple OciUserPrincipalAuth

Utilisez cette approche lorsque vous utilisez des clés de signature d'API OCI IAM (et non des clés d'API OCI Generative AI). Reportez-vous à Clés et OCID requis.

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

Utilisez cette approche lorsque vous exécutez du code localement :

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

Utilisez cette approche lorsque vous travaillez avec des environnements gérés tels qu'OCI Functions ou 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)

Plus de fonctionnalités

Activer la journalisation du débogage

Si vous rencontrez des problèmes lors de l'appel de l'API, l'activation de la journalisation du débogage peut vous aider à résoudre les problèmes. Les journaux de débogage affichent les demandes et réponses HTTP brutes, y compris le fichier opc-request-id, qui est utile lors de l'utilisation du support technique Oracle.

Vous pouvez référencer cet ID de demande lorsque vous signalez des problèmes afin d'identifier et de diagnostiquer plus rapidement les problèmes.

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(
    ...
)
Réponses de flux

L'API OCI Responses prend en charge la transmission en continu, où vous pouvez recevoir les sorties de modèle de façon incrémentielle lorsque les jetons sont générés.

Diffuser tous les événements

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)

Sortie de texte de flux uniquement (jetons 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)

Le streaming est particulièrement utile pour les applications interactives où les utilisateurs peuvent lire les réponses au fur et à mesure qu'elles sont générées.

Ajouter un motif

Les contrôles de raisonnement vous permettent de régler l'effort que le modèle utilise avant de produire une réponse. Ceci est utile lorsque vous souhaitez hiérarchiser la vitesse, la profondeur ou un équilibre des deux.

Conseil

Vérifiez les principales fonctionnalités de la page de détails du modèle pour vous assurer que le modèle que vous appelez a un raisonnement. Reportez-vous à Modèles de discussion disponibles.

Effort de raisonnement

response = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Solve 18 * (4 + 2).",
    reasoning={"effort": "medium"},
    store=False,
)

print(response.output_text)

Sortie de synthèse du raisonnement

Si vous créez un chatbot, l'activation de résumés de raisonnement peut aider les utilisateurs à mieux comprendre comment le modèle est arrivé à un résultat. Pendant la diffusion en continu, les utilisateurs peuvent également voir des jetons de raisonnement pendant que le modèle réfléchit.

response = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Solve 18 * (4 + 2).",
    reasoning={"summary": "auto"},
    store=False,
)

print(response.output_text)
Obtenir les sorties structurées

Utilisez des sorties structurées lorsque vous voulez que le modèle renvoie des données dans un format prévisible au lieu d'un texte de format libre. Cela est utile pour extraire des champs d'entrée non structurée, transmettre des résultats à d'autres systèmes ou afficher des valeurs spécifiques dans une interface utilisateur. Dans l'API des réponses OCI, vous définissez un schéma et analysez la réponse par rapport à celui-ci, ce qui rend la sortie plus cohérente et plus facile à utiliser pour les applications. Les sorties structurées correspondent à un schéma fourni, tandis qu'un mode JSON garantit uniquement un JSON valide.

Un objet de type fort est un objet dont les champs et les types de données sont définis à l'avance. Par exemple, si un schéma indique que customer_name doit être une chaîne et que priority doit être l'une des chaînes "low", "medium" ou "high", le résultat analysé suit cette structure. Le code peut ainsi plus facilement utiliser la réponse de manière sûre et prévisible. L'API OCI Responses le prend en charge en vous permettant de définir un schéma et d'analyser la sortie du modèle en objets fortement typés.

Cette approche est utile lors de l'intégration avec les systèmes en aval, de l'application de la cohérence ou de l'extraction de champs spécifiques à partir de la saisie du langage naturel.

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)

Exemple de sortie :

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'
)
Envoyer des entrées multimodales

L'API OCI Responses prend en charge les modèles qui acceptent les entrées multimodales. Vous pouvez combiner du texte avec des images, des fichiers et des contrôles de raisonnement pour prendre en charge des flux de travail plus riches tels que l'analyse de documents, la compréhension d'images et des réponses de modèles plus délibérées.

Conseil

Vérifiez les principales fonctionnalités de la page de détails du modèle pour vous assurer que le modèle que vous appelez accepte les entrées multimodales. Reportez-vous à Modèles de discussion disponibles.

Entrée d'image en tant qu'URL de données codées en 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)

Saisie d'image en tant qu'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)

Remplacez image_url par une URL d'image valide.

Entrée de fichier en tant qu'ID de fichier

Important

La fonction d'entrée d'ID de fichier est prise en charge uniquement avec les modèles Google Gemini. Pour chaque demande, la taille combinée de tous les fichiers PDF téléchargés doit être inférieure à 50 Mo et vous pouvez fournir un maximum de 10 ID de fichier dans la demande. Reportez-vous à Modèles Gemini pris en charge.
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)

Entrée de fichier en tant qu'URL accessible par 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)

Ajouter des outils à l'API des réponses

Interpréteur de code

Utilisez l'interpréteur de code pour laisser le modèle écrire et exécuter du code Python dans un conteneur isolé et sécurisé. Cet outil est utile pour les calculs, l'analyse des données, le traitement des fichiers et d'autres tâches volumineuses.

Remarque

L'outil d'interpréteur de code OCI utilise le même format que l'outil d'interpréteur de code OpenAI utilisé avec l'API Réponses avec l'adresse compatible OCI OpenAI. Pour plus d'informations sur la syntaxe et les demandes, reportez-vous à la rubrique Interpréteur de code dans la documentation OpenAI.
Conseil

Dans les invites, référencez l'interpréteur de code en tant qu'outil python. Par exemple : Use the python tool to solve the problem.

Comme le code s'exécute dans un environnement isolé sans accès au réseau externe, l'interpréteur de code est une bonne option lorsque le workflow a besoin d'un calcul ou d'un traitement de fichier dans un paramètre contrôlé.

Utilisation du code Intepreter

Si vous utilisez ceci pour la première fois, considérez l'interpréteur de code comme un espace de travail Python temporaire pour le modèle.

Vous pouvez l'utiliser pour des tâches telles que :

  • Résoudre des problèmes mathématiques
  • Analyse des fichiers chargés
  • Nettoyage ou transformation des données
  • Création de graphiques ou de tableaux
  • Générer des fichiers de sortie tels que des journaux ou des jeux de données traités

Environnement d'exécution

L'environnement Python comprend plus de 420 bibliothèques préinstallées, y compris Pandas, Matplotlib et SciPy, tant de tâches courantes fonctionnent sans configuration supplémentaire.

Le code est exécuté dans un conteneur de modèle d'environnement restreint. Ce conteneur est l'environnement de travail dans lequel Python est exécuté et où les fichiers téléchargés, les fichiers générés et les données de travail temporaires sont stockés pendant la session.

Limites de mémoire du conteneur

Les conteneurs d'interpréteur de code utilisent un pool de mémoire partagée de 64 Go par location.

Les tailles de conteneur prises en charge sont les suivantes :

  • 1 Go
  • 4 Go
  • 16 Go
  • 64 Go

Cette limite partagée peut être divisée entre plusieurs conteneurs. Par exemple, il peut prendre en charge les éléments suivants :

  • Soixante-quatre conteneurs de 1 Go
  • Seize conteneurs de 4 Go
  • Quatre conteneurs de 16 Go
  • Un conteneur de 64 Go

Si vous avez besoin de plus de capacité, vous pouvez soumettre une demande de service.

Expiration du conteneur

Un conteneur expire après 20 minutes d'inactivité.

Ceci est important à savoir lors de la création de flux à plusieurs étapes :

  • Un conteneur expiré ne peut pas être réutilisé
  • Vous devez créer un conteneur
  • Les fichiers doivent être chargés à nouveau si nécessaire
  • L'état en mémoire, tel que les variables Python et les objets Python, est perdu

Pour cette raison, il est préférable de traiter les conteneurs comme des environnements de travail temporaires.

Exemple

Pour utiliser l'interpréteur de code, ajoutez une définition d'outil dans la propriété tools avec "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)

Dans cet exemple, l'outil python est Code Interpreter.

Conteneurs pour l'interprète de code

L'outil Interpréteur de code nécessite un objet conteneur. Le conteneur est l'environnement isolé où le modèle exécute du code Python.

Un conteneur peut contenir :

  • Fichiers téléchargés
  • Fichiers créés par le modèle
  • Données de travail temporaires pendant l'exécution

Lorsque vous utilisez l'interpréteur de code, vous pouvez utiliser l'un des deux modes de conteneur suivants :

  • auto : OCI Generative AI provisionne ou réutilise un conteneur dans le contexte en cours.
  • OCID de conteneur : vous créez le conteneur vous-même, définissez la taille de mémoire et fournissez l'OCID.

Pour les deux options, les conteneurs sont créés et gérés dans OCI Generative AI. Le code qui s'exécute dans ces conteneurs s'exécute également dans la location OCI Generative AI.

Remarque

L'outil d'interpréteur de code OCI utilise le même format que l'outil d'interpréteur de code OpenAI utilisé avec l'API Responses avec l'adresse compatible OCI OpenAI. Pour plus d'informations sur la syntaxe et les demandes, reportez-vous aux rubriques Conteneurs pour les entiers de code et Documentation de l'API des conteneurs OpenAI.

Mode automatique

En mode automatique, le service provisionne ou réutilise le conteneur pour vous. C'est l'option la plus simple et un bon point de départ pour la plupart des utilisateurs.

Utiliser le mode automatique lorsque :

  • Vous voulez qu'OCI Generative AI gère le conteneur
  • Vous n'avez pas besoin de contrôle direct sur l'environnement
  • Vous voulez une configuration plus simple

Vous pouvez éventuellement indiquer memory_limit. Si vous ne l'indiquez pas, la valeur par défaut est 1 Go.

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

Mode explicite

En mode explicite, vous créez d'abord le conteneur et définissez sa taille. Ensuite, vous transmettez l'ID de conteneur dans la demande.

Utilisez le mode explicite lorsque vous souhaitez plus de contrôle sur les paramètres du conteneur, tels que la taille de la mémoire, ou lorsque vous souhaitez gérer une session dédiée.

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)

Fichiers dans l'interpréteur de code

L'interpréteur de code prend en charge l'interaction dynamique des fichiers pendant la durée de vie du conteneur. Le modèle peut lire les fichiers que vous fournissez et peut également créer de nouveaux fichiers.

Cela est utile pour les workflows tels que :

  • Lecture d'un fichier CSV ou PDF
  • Génération d'un graphique
  • Enregistrement de la sortie traitée
  • Création de journaux ou de rapports

Référence d'API : documentation sur l'API OpenAI Container Files et API Container Files.

Persistance de fichier

Les fichiers créés ou mis à jour par l'outil python persistent dans les virages d'exécution de code dans le même conteneur, tant que le conteneur n'a pas expiré.

Cela signifie que le modèle peut s'appuyer sur les travaux antérieurs de la même session. Par exemple, il peut :

  • Lire un dossier
  • Analyser
  • Enregistrer un graphique
  • Utiliser ce graphique ultérieurement dans le même conteneur

Lorsque le conteneur expire, cet état n'est plus disponible.

Téléchargement et gestion de fichiers

Vous pouvez gérer les fichiers conteneur via les API Container Files.

Les opérations courantes sont les suivantes :

  • Créer un fichier conteneur : ajoutez un fichier au conteneur, soit par téléchargement multipart, soit par référence à un ID /v1/files existant.
  • Liste des fichiers de conteneur : visualisez les fichiers dans le conteneur.
  • Supprimer un fichier conteneur : enlever un fichier
  • Extraire le contenu du fichier conteneur : téléchargez un fichier à partir du conteneur.

Vous pouvez ainsi utiliser le conteneur en tant qu'espace de travail temporaire pour l'exécution de code basé sur un modèle.

Fichiers de sortie et citations

Lorsque le modèle crée des fichiers, ces fichiers sont stockés dans le conteneur et peuvent être renvoyés sous forme d'annotations dans la réponse.

Ces annotations peuvent inclure :

  • container_id
  • file_id
  • filename

Vous pouvez utiliser ces valeurs pour extraire le contenu du fichier généré.

La réponse peut inclure un objet container_file_citation qui identifie le fichier généré. Utilisez l'opération Extraire le contenu du fichier conteneur pour télécharger le fichier.

L'API des réponses OCI prend en charge les adresses compatibles OpenAI pour des fonctionnalités telles que les réponses, les fichiers, les conteneurs et les fichiers de conteneur. Vous pouvez utiliser la documentation OpenAI associée comme référence pour la structure des demandes, les formats de réponse et les workflows généraux. Lorsque vous utilisez ces API avec OCI, envoyez des demandes aux adresses d'inférence OCI Generative AI, utilisez l'authentification OCI et notez que les ressources et l'exécution restent dans OCI Generative AI, et non dans une location OpenAI.

Remarque

L'API OCI Files utilise le même format que l'API OpenAI Files avec l'adresse compatible OCI OpenAI. Pour plus d'informations sur la syntaxe et les demandes, reportez-vous à la documentation de l'API OpenAI Files.
Remarque

L'interpréteur de code OCI utilisé comme outil pour l'API Ressponses utilise le même format que l'interpréteur de code OpenAI avec l'adresse compatible OCI OpenAI. Pour la syntaxe et la demande, reportez-vous aux références suivantes :

Appel de fonction

Utilisez l'appel de fonction pour laisser le modèle demander des données ou des actions à partir de votre application lors d'un workflow d'API Réponses. Cela est utile lorsque le modèle a besoin d'informations ou d'opérations qui ne sont pas disponibles dans l'invite elle-même, telles que les données de calendrier, l'état de l'application interne ou le résultat d'une opération personnalisée.

Avec ce modèle, le modèle n'exécute pas la fonction directement. Au lieu de cela, il renvoie le nom et les arguments de la fonction, l'application exécute la fonction, puis l'application renvoie la sortie de la fonction afin que le modèle puisse continuer et produire la réponse utilisateur.

Ce qui permet

L'appel de fonction est utile lorsque votre application doit garder le contrôle de l'exécution tout en permettant au modèle de décider du moment où des informations externes sont nécessaires.

Exemples de cas d'emploi :

  • Recherche d'événements de calendrier
  • Extraction des données d'application
  • Appel d'API interne ou externe
  • Exécuter une logique métier ou des calculs

Dans votre fonction, vous pouvez appeler un service externe, une base de données, l'une de vos propres API de bibliothèque, une interface de ligne de commande ou un serveur MCP local.

Cette approche vous offre de la flexibilité tout en conservant le chemin d'exécution dans l'application.

Flux d'exécution

Une interaction d'appel de fonction typique fonctionne comme suit :

  1. Le client envoie une demande qui inclut une ou plusieurs définitions d'outil de fonction.
  2. Le modèle décide si l'un de ces outils est nécessaire.
  3. Si un outil est nécessaire, le modèle renvoie le nom de la fonction et les arguments.
  4. L'application exécute la fonction et prépare le résultat.
  5. L'application renvoie ce résultat dans une demande de suivi.
  6. Le modèle utilise ce résultat pour terminer la réponse.

Options de traitement par état

Il existe deux façons courantes de gérer l'état de ces demandes :

  • Etat géré par le service

    Recommandé pour la plupart des cas d'utilisation. La demande de suivi inclut previous_response_id et le service suit l'échange précédent.

  • Etat géré par le client

    L'application conserve l'historique complet des interactions et envoie le contexte cumulé à chaque demande.

Conseil

Gardez les définitions d'outils précises. Des noms clairs, des descriptions bien écrites et des paramètres bien définis aident le modèle à sélectionner le bon outil et à générer des arguments utilisables.

Définir un outil de fonction

Pour définir un outil de fonction, ajoutez une entrée dans la propriété tools avec "type": "function".

L'exemple suivant définit un outil qui extrait les événements de calendrier pour une date donnée :

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"],
        },
    },
]

Incluez ce tableau tools dans la demande client.responses.create().

Exemple : état géré par le service

Dans ce modèle, la première demande permet au modèle de décider si l'outil est nécessaire. La seconde demande renvoie le résultat de l'outil et référence la réponse précédente.

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)

Exemple : état géré par le client

Dans ce modèle, l'application conserve l'échange complet et le soumet à nouveau avec la demande de suivi.

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)

L'appel de fonction est une option puissante lorsque l'application doit rester responsable de l'exécution, du contrôle d'accès et de la logique d'intégration, tout en permettant au modèle de demander les informations dont il a besoin.

Appel MCP

Les outils MCP (Model Context Protocol) sont des fonctions exécutables ou des fonctionnalités que les modèles d'IA peuvent utiliser pour interagir avec des systèmes externes. Utilisez l'appel MCP dans OCI Generative AI pour permettre à un modèle d'accéder aux outils exécutables exposés par un serveur MCP distant lors d'une demande d'API de réponses. Ces outils peuvent fournir un accès à des systèmes externes tels que des API, des bases de données, des systèmes de fichiers ou des adresses d'application. OCI Generative AI communique directement avec les serveurs MCP distants dans le cadre du workflow de demande.

Quand utiliser l'appel MCP

Utilisez l'appel MCP lorsque le modèle a besoin d'accéder aux outils hébergés sur un serveur MCP distant. Cette approche est utile lorsque vous voulez :

  • La plate-forme Enterprise AI Agent pour communiquer directement avec le serveur MCP
  • Moins d'étapes d'orchestration côté client
  • Latence plus faible qu'un modèle d'outil exécuté par le client
  • Accès aux outils exposés via un serveur MCP distant

Principales fonctionnalités

MCP Calling offre les avantages suivants :

  • Communication directe entre la plate-forme et le serveur : contrairement à l'appel de fonction standard, qui renvoie le contrôle à l'application client, l'appel MCP permet à OCI Generative AI de communiquer directement avec le serveur MCP distant.
  • Latence réduite : la demande ne nécessitant pas d'aller-retour client supplémentaire, l'appel MCP peut réduire la surcharge de l'orchestration.

  • Prise en charge du transport : prend en charge le protocole HTTP Streamable (SSE en phase d'abandon et non pris en charge).

Définition d'un outil MCP

Pour définir un outil MCP, ajoutez une entrée dans la propriété tools avec "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)

Cet exemple transmet la réponse et imprime le texte tel qu'il est généré.

Limitation des outils exposés par un serveur MCP

Un serveur MCP distant peut exposer de nombreux outils, ce qui peut augmenter les coûts et la latence. Si l'application n'a besoin que d'un sous-ensemble de ces outils, utilisez allowed_tools pour limiter l'ensemble.

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,
)

Authentification du serveur MCP

Si le serveur MCP distant nécessite une authentification, transmettez le jeton d'accès dans le champ 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
)

Transmettez uniquement la valeur de jeton brute. N'incluez pas le préfixe Bearer.

OCI envoie le jeton dans le corps de la demande d'API via TLS. OCI ne décode pas, n'inspecte pas, ne stocke pas et ne consigne pas le jeton. Nous vous recommandons d'utiliser des adresses de serveur MCP chiffrées par TLS.

Outil NL2SQL

A propos de la recherche SQL avec NL2SQL

Utilisez SQL Search (NL2SQL) pour convertir des demandes en langage naturel en SQL validé pour les données d'entreprise dans OCI Generative AI.

NL2SQL aide les agents d'IA d'entreprise à utiliser les données d'entreprise fédérées sans déplacer ni dupliquer les données sous-jacentes. Il utilise une couche d'enrichissement sémantique pour mettre en correspondance des termes métier avec des tables de base de données, des colonnes et des jointures, puis génère du code SQL à partir d'entrées en langage naturel.

NL2SQL génère uniquement du code SQL. Il n'exécute pas la requête elle-même. L'exécution des requêtes est gérée séparément via le serveur DBTools MCP, qui autorise et exécute la requête sur la base de données source à l'aide de l'identité de l'utilisateur final et des garde-fous appropriés.

Prérequis

Avant d'utiliser NL2SQL, vous devez disposer des éléments suivants :

  • Une base de données source, telle qu'Oracle Autonomous Database
  • Deux connexions DBTools :
    • Connexion d'enrichissement
    • Connexion de requête
  • Droits d'accès IAM pour les magasins sémantiques, NL2SQL, Database Tools et les clés secrètes
  • Authentification OCI IAM configurée pour les API de service OCI utilisées dans ce démarrage rapide
1. Créer des connexions à la base de données et aux outils de paramétrage

Avant de créer une banque sémantique, créez la base de données source et les connexions DBTools requises.

Les connexions suivantes sont nécessaires :

Connexion d'enrichissement

La connexion d'enrichissement est une connexion de base de données à privilèges supérieurs utilisée lors de l'enrichissement. Il a besoin de privilèges pour :

  • Exécuter des requêtes
  • Effectuer des opérations LDD
  • Accéder à des exemples de valeur à partir de la base de données

OCI Generative AI utilise cette connexion pour lire les détails du schéma et créer les métadonnées nécessaires à la génération SQL.

Connexion de requête

La connexion de requête est une connexion de base de données à privilèges inférieurs utilisée pour exécuter des requêtes pour le compte de l'utilisateur qui effectue l'interrogation.

Cette séparation permet de distinguer les responsabilités de génération et d'exécution et de prendre en charge un contrôle d'accès plus sûr.

Rubriques connexes

2. Configuration des droits d'accès IAM pour les magasins sémantiques et NL2SQL

Avant de créer une banque sémantique, configurez les stratégies IAM requises.

Pour les administrateurs de banque sémantique

Si vous avez accordé l'accès à l'étape QuickStart exécutée pour accorder l'accès aux ressources OCI Generative AI, vous pouvez ignorer cette étape pour les administrateurs. Ils ont déjà la permission de gérer les magasins sémantiques.

Les administrateurs de banque sémantique sont des administrateurs qui créent, mettent à jour, suppriment et gèrent la ressource de banque sémantique OCI Generative AI et ses opérations liées à NL2SQL.

Demandez à un administrateur de créer un groupe IAM pour les administrateurs. Dans cette rubrique, le groupe d'administrateurs est représenté par :

  • <sémantique-magasin-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>
Tâches d'administration disponibles avec les deux stratégies précédentes

Un élément <semantic-store-admin> peut :

  • créer le magasin sémantique
  • afficher et mettre à jour le
  • supprimer ou déplacer
  • enrichissement de déclencheur
  • inspecter les résultats d'enrichissement
  • générer du code SQL à partir du langage naturel pour la validation/test
  • Gérer les opérations NL2SQL liées à la banque

Pour les magasins sémantiques OCI Generative AI

  • Créez un groupe dynamique pour les espaces de stockage sémantiques créés dans la location ou un compartiment indiqué.
  • Autorisez le groupe dynamique à :
    • Accéder aux connexions Database Tools
    • Lire les métadonnées de base de données
    • Lire les métadonnées Autonomous Database
    • Accéder à l'inférence d'IA générative
    • Lire les clés secrètes utilisées par les connexions Database Tools
  1. Créez un groupe dynamique pour les banques asemantiques dans la location avec la règle de mise en correspondance suivante :
    all {resource.type='generativeaisemanticstore'}
  2. Pour limiter les magasins sémantiques à un compartiment spécifique, mettez à jour la condition précédente pour :
    all {resource.type='generativeaisemanticstore',
     resource.compartment.id='<QuickStart-compartment-name>'}
  3. Créez une stratégie pour accorder au groupe dynamique le droit d'accès aux connexions Database Tools dans un compartiment indiqué.
    allow dynamic-group <dynamic-group-name> 
    to use database-tools-family in compartment <QuickStart-compartment-name>'}
  4. Ajoutez une stratégie pour autoriser le groupe dynamique à lire les clés secrètes utilisées par les connexions Database Tools.
    allow dynamic-group <dynamic-group-name> 
    to read secret-family in compartment <QuickStart-compartment-name>
  5. Ajoutez une stratégie pour accorder au groupe dynamique le droit de lire les métadonnées Oracle Database pour les connexions Database Tools.
    allow dynamic-group <dynamic-group-name> 
    to read database-family in compartment <QuickStart-compartment-name>
  6. Ajoutez une stratégie pour accorder au groupe dynamique le droit de lire les métadonnées Autonomous Database pour les connexions et les travaux d'enrichissement Database Tools.
    allow dynamic-group <dynamic-group-name> 
    to read autonomous-database-family in compartment <QuickStart-compartment-name>
  7. Ajoutez une stratégie pour accorder au groupe dynamique le droit d'accès aux ressources OCI Generative AI pour inférence.
    allow dynamic-group <dynamic-group-name> 
    to use generative-ai-family in compartment <QuickStart-compartment-name>
Ce que les deux politiques précédentes fournissent

La ressource generativeaisemanticstore peut :

  • appeler l'inférence LLM via l'IA générative
  • utiliser les connexions Database Tools pour l'enrichissement et l'interrogation
  • lire les clés secrètes requises par les connexions soutenues par Database Tools
  • lire les métadonnées Oracle Database et Autonomous Database

Pour les utilisateurs du magasin sémantique

Les utilisateurs de banque sémantique sont des utilisateurs finaux autorisés à accéder à une banque sémantique existante et à utiliser les fonctionnalités NL2SQL, mais n'ont pas besoin d'administrer la ressource.

Demandez à un administrateur de créer un groupe IAM pour les utilisateurs. Dans cette rubrique, le groupe d'utilisateurs est représenté par :

  • <utilisateurs-magasin sémantique>
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>
Tâches utilisateur disponibles avec les deux stratégies précédentes

<semantic-store-users> peut :

  • voir le magasin sémantique
  • utiliser les fonctionnalités NL2SQL qui lui sont associées
  • Contrôler et interroger les sorties
  • accéder aux informations d'enrichissement

Pour l'accès utilisateur aux connexions Database Tools

Autorisez le groupe à accéder aux ressources Database Tools requises :

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. Configuration de l'authentification OCI IAM

Ce démarrage rapide utilise l'authentification OCI IAM pour l'API de service OCI qui crée des magasins sémantiques, exécute des travaux d'enrichissement et génère du code SQL.

Configurez l'authentification OCI IAM pour l'identité qui signe les demandes. Les exemples de cette section utilisent le kit SDK Python OCI et BaseClient.

Vous pouvez vous authentifier à l'aide des éléments suivants :

  • Fichier de configuration OCI et clés de signature d'API
  • Signataire de jeton de sécurité

Les exemples suivants utilisent SecurityTokenSigner, mais vous pouvez également utiliser un signataire de configuration OCI standard si cela convient mieux à votre environnement.

Rubriques connexes

4. Créer un magasin sémantique

Pour utiliser NL2SQL, créez une ressource de banque sémantique OCI.

Une banque sémantique est soutenue par une banque de vecteurs avec des données structurées et inclut les connexions DBTools suivantes :

  • Connexion d'enrichissement
  • Connexion de requête

Création d'un magasin sémantique dans la console

  1. Ouvrez la page de liste des magasins de vecteurs.
  2. Entrez un nom et une description.
  3. Sélectionnez le compartiment <QuickStart-compartment-name>.
  4. Sous Type de source de données, sélectionnez Données structurées.
  5. Sous Configurer le connecteur de synchronisation, sélectionnez Outil de base de données OCI comme type de connexion.
  6. Entrez l'ID de connexion d'enrichissement, puis sélectionnez Tester la connexion d'enrichissement.
  7. Entrez l'ID de connexion de requête, puis sélectionnez Tester la connexion de requête.
  8. Dans Schémas, indiquez les noms de schéma de base de données à inclure.
  9. Pour Automatisation, sélectionnez le moment où l'enrichissement est exécuté :
    • Aucun
    • En cours de création
  10. Sélectionnez Create (Créer).

Créer une banque sémantique à l'aide de Python

L'exemple suivant crée et gère une banque sémantique à l'aide de l'API de service 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. Exécuter l'enrichissement manuellement

Pour Automatisation, si vous avez sélectionné Aucun au lieu de Lors de la création, vous pouvez exécuter l'enrichissement une fois la banque sémantique créée. Effectuez cette étape si vous avez ignoré l'option Lors de la création.

Le processus d'enrichissement lit les métadonnées du schéma, telles que les tables et les colonnes, à partir de la base de données connectée. OCI Generative AI utilise ces métadonnées pour générer le SQL.

Pour déclencher l'enrichissement manuellement, appelez l'API GenerateEnrichmentJob.

Vous pouvez également gérer les travaux d'enrichissement à l'aide de l'API suivante :

  • ListEnrichmentJobs
  • GetEnrichmentJob
  • CancelEnrichmentJob
6. Recherche d'adresses OCI pour la banque sémantique et GenerateSqlFromNl

NL2SQL utilise les API de service OCI plutôt que les chemins /openai/v1 compatibles avec OCI OpenAI.

CRUD du magasin sémantique

Utilisez l'URL de base suivante pour les opérations CRUD de stockage sémantique :

URL de base : https://generativeai.${region}.oci.oraclecloud.com

Utilisez le chemin d'adresse suivant :

/20231130/semanticStores

Authentification :

  • Session IAM uniquement

API de travail d'enrichissement

Utilisez l'URL de base suivante pour les travaux d'enrichissement d'un magasin sémantique :

URL de base : https://inference.generativeai.${region}.oci.oraclecloud.com

Utilisez le chemin d'adresse suivant :

/20260325/semanticStores/{semanticStoreId}/

Authentification :

  • Session IAM uniquement

Générer du code SQL à partir du langage naturel

Utilisez l'URL de base suivante pour la génération SQL :

URL de base : https://inference.generativeai.${region}.oci.oraclecloud.com

Utilisez le modèle d'adresse suivant :

/20260325/semanticStores/{semanticStoreId}/actions/generateSqlFromNl

Authentification :

  • Session IAM uniquement

Stockage sémantique et API NL2SQL disponibles

Emplacements de stockage sémantique

Emplacements de stockage sémantique
  • CreateSemanticStore
  • ListSemanticStores
  • GetSemanticStore
  • UpdateSemanticStore
  • ChangeSemanticStoreCompartment
  • DeleteSemanticStore
Travaux d'enrichissement
  • ListEnrichmentJobs
  • GetEnrichmentJob
  • GenerateEnrichmentJob
  • CancelEnrichmentJob
Générer le code SQL
GenerateSqlFromNl
Remarque

L'URL de base diffère pour l'API des magasins sémantiques et des travaux d'enrichissement.
7. Générer votre première instruction SQL

Une fois la banque sémantique prête et l'enrichissement terminé, appelez l'API NL2SQL pour générer du code SQL à partir du langage naturel.

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

Observer

A propos du suivi des appels d'API des réponses

Utilisez les données de trace de réponse intégrées dans l'API OCI Responses pour comprendre comment une demande a été traitée. Pour une observabilité plus approfondie, vous pouvez également intégrer l'API OCI Responses aux plates-formes d'observabilité externes telles que Langfuse.

Ce démarrage rapide explique comment inspecter les détails d'exécution renvoyés par l'API Responses et comment suivre les demandes à l'aide de Langfuse.

Prérequis

Avant de commencer, vous devez disposer des éléments suivants :

  • Un projet OCI Generative AI
  • Authentification configurée pour l'API OCI Responses
  • Le kit SDK OpenAI est installé
  • Un client API OCI Réponses fonctionnel

(Facultatif) Pour l'intégration à Langfuse, vous avez besoin d'un compte et d'informations d'identification Langfuse.

1. Examiner la sortie de l'API des réponses

Lorsque vous appelez l'API OCI Responses, la réponse inclut un champ output. Ce champ est un tableau d'éléments qui décrivent ce qui s'est passé pendant la demande.

Chaque élément représente une étape de l'exécution et peut inclure différents types, tels que :

  • message
  • file_search_call
  • mcp_call

Ces éléments de sortie fournissent une visibilité sur la façon dont la demande a été traitée. Vous pouvez les utiliser pour :

  • Déboguer et comprendre le comportement du modèle
  • Afficher les étapes d'exécution dans une interface utilisateur
  • Créez des workflows d'observabilité ou de journalisation personnalisés

Par exemple, après avoir envoyé une demande, vous pouvez inspecter le champ 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. Installer le kit SDK Langfuse

Pour obtenir des informations plus détaillées, telles que la latence, les coûts et les traces d'exécution, vous pouvez intégrer l'API OCI Responses à une plate-forme d'observabilité.

L'une des options est Langfuse, une plate-forme d'ingénierie LLM open source qui aide les développeurs à déboguer, surveiller et améliorer les applications LLM. Langfuse fournit une observabilité de bout en bout pour le suivi des actions de l'agent, prend en charge la gestion des versions d'invite et aide à évaluer les sorties du modèle. Il s'intègre aux structures populaires telles qu'OpenAI, LangChain et LlamaIndex.

Installez le kit SDK Langfuse :

pip install langfuse
3. Configurer des variables d'environnement

Définissez les variables d'environnement Langfuse et OCI requises :

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. Instrumenter le client OpenAI

Importez le client OpenAI à partir du SDK Langfuse. Le code de demande existant reste le même, mais les demandes sont automatiquement suivies.

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. Envoyer une demande d'API de réponses tracées

Une fois que vous avez instrumenté le client, envoyez une demande d'API Réponses comme d'habitude. Langfuse trace automatiquement la demande.

Par exemple :

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)