Démarrage rapide

Utilisez les étapes suivantes pour commencer à créer des agents d'IA d'entreprise à l'aide de l'API Réponses OCI.

Conseil

Pour obtenir un aperçu des étapes et des fonctions offertes dans ce démarrage rapide, maintenez cette page réduite et vérifiez les titres. Ensuite, développez chaque titre pour plus de détails. Les six premières étapes de configuration de votre environnement pour obtenir une réponse de modèle à l'aide de l'API Réponses. Le reste des sections présente d'autres fonctions pour les agents de construction.

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

Préalables

Avant de créer un projet ou d'appeler l'API de réponses OCI, assurez-vous que les autorisations IAM requises sont en place.

Accorder l'accès aux ressources du service d'intelligence artificielle générative pour OCI

sk un administrateur pour accorder au groupe d'utilisateurs auquel vous appartenez l'autorisation de gérer les ressources du service d'intelligence artificielle générative pour OCI 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 cette autorisation, vous pouvez créer toutes les ressources du service d'intelligence artificielle générative, y compris les projets, les clés d'API, les magasins vectoriels et les magasins sémantiques dans <QuickStart-compartment-name>.

Important

Ce démarrage rapide utilise une configuration de type bac à sable pour ses autorisations. Nous vous recommandons d'accorder un accès étendu uniquement aux administrateurs ou aux utilisateurs travaillant dans des environnements de bac à sable. Pour une utilisation en production, appliquez des politiques plus restrictives.
1. Créer un projet

Un projet est la ressource fondamentale pour organiser les agents d'IA et les ressources connexes dans l'IA générative OCI. Vous pouvez créer un projet à partir de la console.

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

Pour commencer, naviguez jusqu'à la page de liste de 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 tirets ou de traits de soulignement. La longueur peut être de 1 à 255 caractères. Si vous ne spécifiez 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

Configurer la durée de stockage des données générées.

  • Rétention des réponses :

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

  • Conservation des conversations :

    Détermine la durée de conservation d'une conversation entière après sa dernière mise à jour.

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

Configuration du compactage de la mémoire à court terme

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

Important

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

Configuration de la 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 entre 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 saisit 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 activé, vous ne pouvez pas modifier les modèles et la mémoire à long terme ne peut pas être désactivée tant que le projet n'est pas supprimé.
Conseil

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

Marqueurs

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

  • Facultatif : Sélectionnez Ajouter un marqueur pour affecter des métadonnées au projet.

    Pour plus d'informations, voir Marqueurs de ressource.

Lorsque vous avez terminé, sélectionnez Créer.

2. Configurer l'authentification

L'API de réponses OCI prend en charge deux méthodes d'authentification. Vous pouvez utiliser l'une des deux options.

  • Clés d'API du service d'intelligence artificielle générative pour OCI

    Authentifier et atteindre les modèles et les points d'extrémité avec des clés d'API propres au service d'IA générative compatibles avec OpenAI. Utilisez cette option pour les tests et le développement précoce.

  • Authentification basée sur OCI IAM

    Authentifier et atteindre les modèles et les points d'extrémité à 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 effectuez les opérations suivantes :

    • Exécuter des applications dans des services OCI tels que Functions ou Oracle Kubernetes Engine (OKE)
    • Vous voulez éviter les clés d'API de longue durée
    • Besoin d'un contrôle d'accès centralisé au moyen de l'OCI IAM
2.1 (a) Créer une clé d'API

Cette étape n'est requise que si vous utilisez l'authentification par clé d'API du service d'intelligence artificielle générative pour OCI.

Créez une clé d'API pour authentifier les demandes vers le service d'intelligence artificielle générative pour OCI. Vous pouvez nommer la clé et éventuellement configurer jusqu'à deux noms de clé avec des dates et des heures d'expiration.

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

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

    Informations de base

    1. Entrez un nom pour la clé d'API. Ce champ est obligatoire. Commencez le nom 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.
    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 voir les ressources qu'il contient. Si vous n'êtes pas certain du compartiment à utiliser, communiquez avec un administrateur. Pour plus d'informations, voir Présentation des compartiments.
    4. (Facultatif) Affectez des marqueurs à cette clé d'API. Voir Marqueurs de ressource.

    Noms de clé et délais d'expiration

    1. Entrez le nom de la première clé dans Nom unique de la clé. Commencez le nom 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.
    2. (Facultatif) Définissez Clé une date d'expiration et Clé une date d'expiration (UTC).
      La valeur par défaut est de trois mois à partir de la date de création.
    3. Entrez un nom pour la deuxième clé dans Nom de la clé deux.
    4. (Facultatif) Définissez la clé deux dates d'expiration et la clé deux heures d'expiration (UTC).
      La valeur par défaut est de trois mois à partir de la date de création.
    5. Sélectionnez 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 la liste complète des paramètres et des valeurs pour les commandes de l'interface de ligne de commande, voir Informations de référence sur les commandes de l'interface de ligne de commande.

  • 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 en UTC.

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

Cette étape n'est requise que si vous utilisez l'authentification par clé d'API du service d'intelligence artificielle générative pour OCI.

Rechercher l'OCID de la clé d'API

Pour étendre les autorisations à une clé d'API spécifique, obtenez d'abord son OCID.

Dans la console :

  1. Ouvrez la page de liste 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 l'autorisation à la clé d'API

Pour permettre à un groupe d'utilisateurs spécifique d'appeler l'API Réponses avec cette clé d'API, ajoutez la politique 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 politique permet aux demandes authentifiées avec la clé d'API spécifiée d'accéder à l'API Réponses tout en gardant l'accès étendu et contrôlé.

Pour un accès plus étendu au bac à sable uniquement, vous pouvez utiliser la politique 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) Installer la bibliothèque d'authentification IAM du service d'intelligence artificielle générative pour OCI

Cette étape n'est requise que si vous utilisez l'authentification par clé d'API du service d'intelligence artificielle générative pour OCI. Si vous utilisez des clés d'API du service d'intelligence artificielle générative pour OCI, ignorez cette étape.

Installez l'ensemble d'aide pour l'authentification OCI Generative AI :

pip install oci-genai-auth

L'ensemble oci-genai-auth fournit des assistants d'authentification pour l'intégration de l'authentification OCI IAM à la trousse SDK OpenAI, notamment :

  • OciSessionAuth pour le développement local
  • OciUserPrincipalAuth pour les utilisateurs utilisant les clés de signature d'API IAM pour OCI
  • 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 un http_client authentifié.

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

3. Installer openai

Installez le SDK OpenAI officiel.

Python

pip install openai
Note

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

Pour les autres langues, consultez la page Bibliothèques OpenAI.

4. Rechercher le point d'extrémité pour l'API de réponses OCI

L'API des réponses OCI est l'API principale pour créer des applications agéntiques d'IA d'entreprise dans l'IA générative OCI. Il vous permet d'envoyer des demandes de modèle, d'utiliser des outils et de gérer le contexte de conversation au moyen d'une seule API.

Utilisez l'API Réponses pour :

  • Exécuter des flux de travail simples d'inférence en une seule étape ou en plusieurs étapes pour les agents
  • 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 de réponses OCI utilise une interface compatible OpenAI. Les demandes utilisent la même syntaxe de style OpenAI, mais elles sont envoyées au service d'intelligence artificielle générative pour OCI et authentifiées au moyen des données d'identification OCI, telles que les clés d'API du service d'intelligence artificielle générative pour OCI ou l'authentification basée sur OCI IAM.

Le client recommandé est la trousse SDK OpenAI. Il prend en charge des langages tels que Python, Java, TypeScript, Go et .NET. Vous pouvez également l'utiliser avec des cadres 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 votre région OCI, par exemple us-chicago-1.

Pour l'API Réponses, utilisez le chemin de point d'extrémité suivant :

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

Vous pouvez utiliser l'API de réponses OCI pour appeler différents types de modèle disponibles dans les régions prises en charge par le service d'intelligence artificielle générative pour OCI. Pour obtenir la liste des modèles et des régions pris en charge, voir Modèles et régions d'agent.

Mode sur demande

Les modèles sur demande sont hébergés et gérés par OCI et sont disponibles sans grappes d'IA dédiées. 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 un isolement ou des performances prévisibles, vous pouvez héberger des modèles sur une grappe dédiée à l'IA. Dans ce cas, utilisez l'OCID du point d'extrémité de grappe 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."
)

Assurez-vous de sélectionner la même région que la grappe 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 performance, de coût et de contrôle.

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

Les exemples suivants montrent comment appeler l'API Responses à l'aide de Python. Si la demande retourne une explication, l'API des réponses OCI 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). Voir 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 que le service Fonctions OCI ou OCI Container Engine pour 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 l'enreg. de débogage.

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

Vous pouvez référencer cet ID demande lors du signalement de problèmes pour vous aider à identifier et diagnostiquer les problèmes plus rapidement.

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 des réponses OCI prend en charge la diffusion en continu, où vous pouvez recevoir les sorties de modèle de manière incrémentielle au fur et à mesure que 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 seulement (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)

La diffusion en continu est particulièrement utile pour les applications interactives où les utilisateurs peuvent lire les réponses au fur et à mesure de leur génération.

Ajouter un motif

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

Conseil

Vérifiez les fonctions clés de la page de détails du modèle pour vous assurer que le modèle que vous appelez a un raisonnement. Voir Modèles de clavardage disponibles.

Raisonnement de l'effort

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

print(response.output_text)

Sortie du sommaire des motifs

Si vous créez un agent conversationnel, l'activation de sommaires de raisonnement peut aider les utilisateurs à mieux comprendre comment le modèle est arrivé à un résultat. Pendant le streaming, 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 souhaitez que le modèle retourne des données dans un format prévisible au lieu de texte à structure libre. Cette fonction est utile pour extraire des champs d'une 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 OCI Responses, 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 fortement typé 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'un des suivants : "low", "medium" ou "high", le résultat analysé suit cette structure. Cela permet au code de travailler plus facilement avec la réponse en toute sécurité et de manière prévisible. L'API de réponses OCI prend en charge ce problème en vous permettant de définir un schéma et d'analyser la sortie du modèle dans des objets fortement typés.

Cette approche est utile lors de l'intégration à des systèmes en aval, de l'application de la cohérence ou de l'extraction de champs spécifiques à partir d'une entrée en 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 de réponses OCI 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 des images et des réponses de modèle plus délibérées.

Conseil

Vérifiez les fonctions clé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. Voir Modèles de clavardage disponibles.

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

Entrée 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 fichier

Important

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

API Ajouter des outils aux 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 de données, le traitement de fichiers et d'autres tâches de calcul.

Note

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 le point d'extrémité compatible OCI OpenAI. Pour plus de détails sur la syntaxe et les demandes, voir la rubrique Code Interpreter 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 réseau externe, l'interpréteur de code est une bonne option lorsque le flux de travail nécessite un calcul ou un traitement de fichiers dans un paramètre contrôlé.

Utilisation de Code Intepreter

Si vous l'utilisez pour la première fois, pensez à Code Interpreter en tant qu'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 tables
  • Génération de 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, de nombreuses tâches courantes fonctionnent sans configuration supplémentaire.

Le code s'exécute dans un conteneur de bac à sable. Ce conteneur est l'environnement de travail où Python s'exécute et où les fichiers 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 de l'interpréteur de code utilisent un groupe de mémoire partagé 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é.

Il est important de savoir lors de la création de flux en 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, comme 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 l'interpréteur de code.

Conteneurs pour l'interpréteur de code

L'outil Code Interpreter 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 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 courant.
  • OCID du conteneur : Vous créez le conteneur vous-même, définissez la taille de la 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.

Note

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 le point d'extrémité compatible OCI OpenAI. Pour plus de détails sur la syntaxe et les demandes, voir Conteneurs pour les intégrateurs de code et Documentation sur l'API OpenAI Containers.

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 d'un contrôle direct sur l'environnement
  • Vous voulez une configuration plus simple

Vous pouvez éventuellement spécifier memory_limit. Si vous ne le spécifiez 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. Vous transmettez ensuite l'ID conteneur dans la demande.

Utilisez le mode explicite lorsque vous souhaitez contrôler davantage 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

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

Ceci est utile pour les flux de travail 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

Informations de référence sur les API : Documentation sur l'API OpenAI Container Files et API Container Files.

Persistance du fichier

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

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

  • Lire un fichier
  • Analyser
  • Enregistrer un graphique
  • Utiliser ce graphique plus tard dans le même conteneur

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

Chargement et gestion des fichiers

Vous pouvez gérer les fichiers de conteneur au moyen des API Container Files.

Les opérations courantes sont les suivantes :

  • Créer un fichier de conteneur : Ajoutez un fichier au conteneur, par chargement en plusieurs parties ou en référençant un ID /v1/files existant
  • Lister les fichiers de conteneur : Voir les fichiers dans le conteneur
  • Supprimer un fichier de conteneur : Supprimer un fichier
  • Extraire le contenu du fichier de conteneur : Téléchargez un fichier à partir du conteneur

Cela vous permet d'utiliser le conteneur comme espace de travail temporaire pour l'exécution de code basée sur un modèle.

Fichiers de sortie et citations

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

Ces annotations peuvent inclure les éléments suivants :

  • 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 de conteneur pour télécharger le fichier.

L'API OCI Responses prend en charge les points d'extrémité compatibles avec OpenAI pour des fonctions telles que les réponses, les fichiers, les conteneurs et les fichiers conteneur. Vous pouvez utiliser la documentation OpenAI associée comme référence pour la structure de demande, les formats de réponse et les flux de travail généraux. Lorsque vous utilisez ces API avec OCI, envoyez des demandes aux points d'extrémité d'inférence du service d'intelligence artificielle générative pour OCI, utilisez l'authentification OCI et notez que les ressources et l'exécution restent dans le service d'intelligence artificielle générative pour OCI, et non dans une location OpenAI.

Note

L'API des fichiers OCI utilise le même format que l'API des fichiers OpenAI avec le point d'extrémité compatible OCI OpenAI. Pour plus de détails sur la syntaxe et les demandes, consultez la documentation relative à l'API OpenAI Files.
Note

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 le point d'extrémité compatible OCI OpenAI. Pour la syntaxe et la demande, voir les références suivantes :

Appel de fonction

Utilisez l'appel de fonction pour laisser les données ou les actions de demande de modèle de votre application lors d'un flux de travail d'API de 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 directement la fonction. Au lieu de cela, il retourne le nom et les arguments de la fonction, votre 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 orientée utilisateur.

Ce que cela 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 quand des informations externes sont nécessaires.

Exemples de cas d'utilisation :

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

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 fonction typique appelant l'interaction fonctionne las :

  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 et les arguments de la fonction.
  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 d'état

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

  • État géré par le service

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

  • État 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 l'outil approprié 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 des événements de calendrier pour une date spécifié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 deuxième demande renvoie le résultat de l'outil et fait 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 excellente option 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 capacités que les modèles d'IA peuvent utiliser pour interagir avec des systèmes externes. Utilisez l'appel MCP dans le service d'intelligence artificielle générative pour OCI 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 qu'une API, des bases de données, des systèmes de fichiers ou des points d'extrémité d'application. OCI Generative AI communique directement avec les serveurs MCP distants dans le cadre du flux de travail 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 souhaitez :

  • La plate-forme Enterprise AI Agent pour communiquer directement avec le serveur MCP
  • Moins d'étapes d'orchestration côté client
  • Latence inférieure à celle d'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 plate-forme et serveur : Contrairement à l'appel de fonction standard, qui retourne le contrôle à l'application client, l'appel MCP permet à l'IA générative OCI de communiquer directement avec le serveur MCP distant.
  • Latence faible : Comme la demande ne nécessite pas d'aller-retour client supplémentaire, l'appel MCP peut réduire les frais généraux d'orchestration.

  • Prise en charge du transport : Prend en charge le protocole HTTP Streamable (SSE obsolète 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 montre comment diffuser la réponse et imprimer le texte au fur et à mesure qu'il est généré.

Restreindre les outils exposés par un serveur MCP

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

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

Fournir l'authentification au 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 par TLS. OCI ne décode pas, n'inspecte pas, ne stocke pas ou n'enregistre pas le jeton. Nous vous recommandons d'utiliser des points d'extrémité de serveur MCP chiffrés TLS.

Outil NL2SQL

À propos de SQL Search 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 à travailler avec des données d'entreprise fédérées sans déplacer ou dupliquer les données sous-jacentes. Il utilise une couche d'enrichissement sémantique pour mapper des termes métier avec des tables, des colonnes et des jointures de base de données, puis génère du code SQL à partir d'une entrée en langage naturel.

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

Préalables

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 à l'interrogation
  • Autorisations IAM pour les magasins sémantiques, NL2SQL, les outils de base de données et les clés secrètes
  • Authentification OCI IAM configurée pour les API du service OCI utilisées dans ce démarrage rapide
1. Créer des connexions Database et DBTools

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

Vous avez besoin des connexions suivantes :

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. Elle a besoin de privilèges pour :

  • Exécuter des interrogations
  • Effectuer des opérations LDD
  • Accéder aux exemples de valeurs 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 à l'interrogation

La connexion d'interrogation est une connexion de base de données à privilèges inférieurs utilisée pour exécuter des interrogations pour le compte de l'utilisateur demandeur.

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

Sujets publiés

2. Configurer les autorisations IAM pour les magasins sémantiques et NL2SQL

Avant de créer un magasin sémantique, configurez les politiques IAM requises.

Pour les administrateurs du magasin sémantique

Si vous avez accordé l'accès à l'étape QuickStart exécutée pour accorder l'accès aux ressources du service d'intelligence artificielle générative pour OCI, vous pouvez ignorer cette étape pour les administrateurs. Ils ont déjà l'autorisation de gérer les magasins sémantiques.

Les administrateurs de magasin sémantique sont des administrateurs qui créent, mettent à jour, suppriment et gèrent la ressource de magasin sémantique du service d'intelligence artificielle générative pour OCI 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 :

  • <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>
Tâches d'administration disponibles avec les deux politiques précédentes

Un <semantic-store-admin> peut :

  • créer le magasin sémantique
  • voir et mettre à jour
  • supprimer ou déplacer
  • enrichissement des déclencheurs
  • inspecter les résultats d'enrichissement
  • générer du code SQL à partir du langage naturel aux fins de validation et de test
  • gérer les opérations NL2SQL liées au magasin

Pour les magasins sémantiques de l'IA générative pour OCI

  • Créez un groupe dynamique pour les magasins sémantiques créés dans la location ou un compartiment spécifié.
  • Accordez l'autorisation de groupe dynamique pour :
    • Accéder aux connexions au service d'outils de base de données
    • Lire les métadonnées de base de données
    • Lire les métadonnées d'Autonomous Database
    • Accéder à l'inférence d'IA générative
    • Clés secrètes de lecture utilisées par les connexions au service d'outils de base de données
  1. Créez un groupe dynamique pour les magasins asemantiques de la location avec la règle de correspondance suivante :
    all {resource.type='generativeaisemanticstore'}
  2. Pour limiter les magasins sémantiques à un compartiment spécifique, mettez à jour la condition précédente à :
    all {resource.type='generativeaisemanticstore',
     resource.compartment.id='<QuickStart-compartment-name>'}
  3. Créez une politique pour accorder au groupe dynamique l'autorisation d'accéder aux connexions au service d'outils de base de données dans un compartiment spécifié.
    allow dynamic-group <dynamic-group-name> 
    to use database-tools-family in compartment <QuickStart-compartment-name>'}
  4. Ajoutez une politique pour accorder au groupe dynamique l'autorisation de lire les clés secrètes utilisées par les connexions au service d'outils de base de données.
    allow dynamic-group <dynamic-group-name> 
    to read secret-family in compartment <QuickStart-compartment-name>
  5. Ajoutez une politique pour accorder au groupe dynamique l'autorisation de lire les métadonnées Oracle Database pour les connexions au service d'outils de base de données.
    allow dynamic-group <dynamic-group-name> 
    to read database-family in compartment <QuickStart-compartment-name>
  6. Ajoutez une politique pour accorder au groupe dynamique l'autorisation de lire les métadonnées Autonomous Database pour les connexions et les tâches d'enrichissement du service d'outils de base de données.
    allow dynamic-group <dynamic-group-name> 
    to read autonomous-database-family in compartment <QuickStart-compartment-name>
  7. Ajoutez une politique pour accorder au groupe dynamique l'autorisation d'accéder aux ressources du service d'intelligence artificielle générative pour OCI aux fins d'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 une inférence de GML au moyen de l'intelligence artificielle générative
  • utiliser les connexions au service d'outils de base de données pour l'enrichissement et l'interrogation
  • clés secrètes de lecture requises par les connexions soutenues par le service d'outils de base de données
  • lire les métadonnées d'Oracle Database et d'Autonomous Database

Pour les utilisateurs du magasin sémantique

Les utilisateurs du magasin sémantique sont des utilisateurs finaux qui sont autorisés à accéder à un magasin sémantique existant et à utiliser les capacités NL2SQL, mais qui 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-magasins sémantiques>
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 d'utilisateur disponibles avec les deux politiques précédentes

<semantic-store-users> peut :

  • afficher le magasin sémantique
  • utiliser les fonctionnalités NL2SQL qui lui sont associées
  • inspecter et interroger les sorties
  • informations d'enrichissement d'accès

Accès des utilisateurs aux connexions aux outils de base de données

Accordez au groupe l'accès aux ressources du service d'outils de base de données 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. Configurer l'authentification OCI IAM

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

Configurer l'authentification OCI IAM pour l'identité qui signe les demandes. Les exemples de cette section utilisent la trousse SDK Python pour OCI et BaseClient.

Vous pouvez vous authentifier en utilisant :

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

Sujets connexes

4. Créer un magasin sémantique

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

Un magasin sémantique est soutenu par un magasin vectoriel avec des données structurées et inclut les connexions DBTools suivantes :

  • Connexion d'enrichissement
  • Connexion à l'interrogation

Créer 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 connexion d'enrichissement, puis sélectionnez Tester la connexion d'enrichissement.
  7. Entrez l'ID connexion à l'interrogation, puis sélectionnez Tester la connexion à l'interrogation.
  8. Dans Schémas, spécifiez les noms de schéma de base de données à ingérer.
  9. Pour Automatisation, sélectionnez lors de l'exécution de l'enrichissement :
    • Aucun
    • Lors de la création
  10. Sélectionnez Créer.

Créer un magasin sémantique à l'aide de Python

L'exemple suivant crée et gère un magasin sémantique à l'aide de l'API du 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 Automation, si vous avez sélectionné Aucun au lieu de À la création, vous pouvez exécuter l'enrichissement une fois le magasin sémantique créé. Effectuez cette étape si vous avez ignoré l'option En cours de 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 code SQL.

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

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

  • ListEnrichmentJobs
  • GetEnrichmentJob
  • CancelEnrichmentJob
6. Rechercher les points d'extrémité OCI pour le magasin sémantique et GenerateSqlFromNl

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

CRUD de 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 du point d'extrémité suivant :

/20231130/semanticStores

Authentification :

  • Session IAM uniquement

API de tâche d'enrichissement

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

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

Utilisez le chemin du point d'extrémité suivant :

/20260325/semanticStores/{semanticStoreId}/

Authentification :

  • Session IAM uniquement

Générer 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 de point d'extrémité suivant :

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

Authentification :

  • Session IAM uniquement

Stockage sémantique et API NL2SQL disponibles

Magasins sémantiques

Magasins sémantiques
  • CreateSemanticStore
  • ListSemanticStores
  • GetSemanticStore
  • UpdateSemanticStore
  • ChangeSemanticStoreCompartment
  • DeleteSemanticStore
Tâches d'enrichissement
  • ListEnrichmentJobs
  • GetEnrichmentJob
  • GenerateEnrichmentJob
  • CancelEnrichmentJob
Générer SQL
GenerateSqlFromNl
Note

L'URL de base diffère pour les magasins sémantiques et l'API des tâches d'enrichissement.
7. Générer votre premier énoncé SQL

Une fois le magasin sémantique prêt 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

À propos du suivi des appels d'API pour les réponses

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

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

Préalables

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

  • Un projet d'IA générative OCI
  • Authentification configurée pour l'API de réponses OCI
  • Trousse SDK OpenAI installée
  • Un client d'API de réponses OCI fonctionnel

(Facultatif) Pour intégrer Langfuse, vous avez besoin d'un compte et de données d'identification Langfuse.

1. Vérifier la sortie de l'API de réponses

Lorsque vous appelez l'API de réponses OCI, 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 permettent de voir comment 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éer des flux de travail 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 SDK Langfuse

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

Une option est Langfuse, une plate-forme d'ingénierie LLM à code source libre 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 d'agent, prend en charge le contrôle des versions rapide et aide à évaluer les sorties du modèle. Il s'intègre à des frameworks populaires tels que OpenAI, LangChain et LlamaIndex.

Installez le SDK Langfuse :

pip install langfuse
3. Configurer les 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. Instrument du 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 suivies

Après avoir instrumenté le client, envoyez une demande d'API Responses comme d'habitude. Langfuse trace automatiquement la demande.

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)