Démarrage rapide

Utilisez les étapes suivantes pour commencer à créer des agents d'IA d'entreprise à l'aide du service d'intelligence artificielle générative pour OCI. Ce guide vous guide tout au long de la configuration initiale, avec le contexte en cours de route afin que vous compreniez non seulement ce que vous devez faire, mais aussi pourquoi cela compte.

Préalable : Configurer les autorisations IAM

Avant de créer un projet, assurez-vous que les groupes d'utilisateurs appropriés ont accès aux ressources du service d'intelligence artificielle générative pour OCI. Sans ces autorisations, vous ne pourrez pas créer ni gérer des projets et des ressources connexes.

OCI fournit un type de ressource agrégé, generative-ai-family, qui accorde l'accès à tous les types de ressource d'IA générative au moyen d'une seule politique.

Conseil

Accordez un accès étendu uniquement aux administrateurs ou aux utilisateurs qui travaillent dans un bac à sable ou des environnements de développement. Pour une utilisation en production, envisagez d'appliquer des politiques plus restrictives.

Accorder l'accès au niveau de la location

Pour permettre à un groupe d'utilisateurs de gérer toutes les ressources du service d'intelligence artificielle générative dans l'ensemble de la location :

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

Accorder l'accès au niveau du compartiment

Pour définir la portée de l'accès à un compartiment spécifique :

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

Une fois ces autorisations en place, vous êtes prêt à créer le premier projet.

1. Créer un projet

Un projet est la ressource fondamentale pour l'organisation et la gestion des agents d'IA et des ressources connexes dans l'IA générative OCI. Vous pouvez créer un projet à l'aide de la console Oracle Cloud.

Après avoir créé un projet, vous pouvez le gérer au moyen de la console, par exemple, mettre à jour ses détails, le déplacer vers un autre compartiment, gérer des marqueurs ou le 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 (1 à 255 caractères). Si vous ne spécifiez pas de nom, un nom est généré automatiquement à l'aide du format suivant :

    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 dans lequel le projet réside. Par défaut, il s'agit du compartiment courant, mais vous pouvez sélectionner n'importe quel compartiment pour lequel vous disposez des autorisations requises.

Conservation des données

Configurer la durée de stockage des données générées. Cela vous permet d'équilibrer la convivialité avec les exigences du cycle de vie des donné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).

Compaction mémoire à court terme

Cette fonctionnalité améliore l'efficacité en résumant l'historique des conversations récentes dans une représentation compacte. Cette solution permet de maintenir le contexte tout en réduisant l'utilisation et la latence des jetons.

  • Activer (facultatif) :

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

  • Sélection de modèle :

    Si cette option est activée, sélectionnez un modèle de compactage. Les modèles disponibles varient selon la région.

Important

  • Le modèle de compactage est sélectionné au moment de la création et ne peut pas être modifié ultérieurement.
  • Une fois activée, cette fonction ne peut pas être désactivée sans supprimer le projet.
  1. (Facultatif) Activez le compactage de mémoire à court terme pour résumer l'historique de clavardage précédent et conserver un contexte léger.
  2. Si vous activez la fonction de compactage de mémoire à court terme, sélectionnez un modèle dans la liste pour le compactage.
    La liste des modèles varie selon la région. Pour les modèles disponibles, voir Modèles et régions d'IA générative pour l'API Agentic.

Mémoire à long terme

La mémoire à long terme permet au système d'extraire et de conserver les informations importantes des conversations pour une utilisation future. Ces données sont stockées sous forme d'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 :
    • 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

  • Ces modèles doivent être sélectionnés lors de la création du projet et ne peuvent pas être modifiés plus tard.
  • Une fois activée, la mémoire à long terme ne peut pas être désactivée sauf si le projet est supprimé.
Conseil

Pour obtenir de meilleurs résultats, définissez à la fois la rétention de la réponse et de la conversation sur la durée maximale (720 heures) lors de l'utilisation de 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 à votre projet.

    Pour plus d'informations, voir Marqueurs de ressource.

Enfin, sélectionnez Créer pour créer le projet.

2. Créer une clé d'API

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.

Les clés d'API sont utilisées pour authentifier les demandes vers le service d'intelligence artificielle générative pour OCI. Au cours de cette étape, vous allez créer une clé que les applications ou les outils peuvent utiliser pour accéder en toute sécurité au service.

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.

Important

Assurez-vous d'ajouter une autorisation de clé d'API après avoir créé la clé.
  • Dans la page de liste Clés d'API, sélectionnez Créer une clé d'API. Si vous avez besoin d'aide pour trouver la page de liste, voir Liste des clés d'API.

    Informations de base

    1. Entrez un nom pour la clé d'API (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. (Facultatif) Pour enregistrer la clé d'API dans un compartiment différent de celui indiqué, sélectionnez un autre compartiment.
      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 et délais d'expiration des clés

    1. Entrez un nom pour la première clé : 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 la date d'expiration de la clé un et la clé un délai 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é : Nom de la clé deux.
    4. (Facultatif) Définissez la date d'expiration de la clé deux 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.
    Assurez-vous d'ajouter une autorisation de clé d'API après avoir créé la clé.
  • 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 (UTC).

3. Ajouter une autorisation à la clé d'API

Rechercher l'OCID de la clé d'API

Pour étendre les autorisations à une clé d'API spécifique, vous avez besoin de son OCID.

Dans la console :

  1. Naviguez jusqu'à 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

Créez une politique IAM pour autoriser la clé d'API à appeler l'API de réponses :

allow group <your-group-name> 
to manage generative-ai-response in tenancy where ALL 
{request.principal.type='generativeaiapikey', 
request.principal.id='<your-api-key-OCID>'}

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

4. Appeler l'API de réponses OCI

L'API de réponses d'OCI est l'interface principale pour créer des applications agéntiques d'IA d'entreprise dans l'IA générative d'OCI. Il offre un moyen flexible de combiner des fonctions de base, telles que l'orchestration, le raisonnement, les outils et l'état de conversation, en une seule demande.

Avec cette API, vous pouvez :

  • Exécuter des flux de travail d'inférence simple en une seule étape ou créer des flux de travail d'agent en plusieurs étapes
  • Activer ou désactiver le raisonnement en fonction du cas d'utilisation
  • Intégrer des outils (gérés par une plate-forme ou côté client)
  • Gérer l'état de la conversation dans le service ou dans le client

Cette approche unifiée vous permet de commencer à créer des agents simples et progressifs, tout en gardant le contrôle sur les coûts, la latence et le comportement.

URL de base 🔗

Utilisez l'URL de base suivante pour accéder à l'API de réponses OCI :

https://inference.generativeai.<region>.oci.oraclecloud.com/openai/v1

Remplacez <region> par l'identificateur de région approprié (par exemple, us-chicago-1).

Prise en charge de la trousse SDK 🔗

L'API des réponses OCI est compatible avec la trousse SDK OpenAI, qui est recommandée pour interagir avec le service. Il est pris en charge dans de nombreux langages, notamment Python, Java, TypeScript, Go et .NET.

Vous pouvez également l'utiliser avec des cadres d'agent populaires tels que LangChain, LlamaIndex et OpenAI Agents SDK.

Installer la trousse SDK officielle OpenAI (Python)

Python

pip install openai
Note

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

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

Faites votre première demande 🔗

L'exemple suivant montre comment appeler l'API Responses à l'aide de Python :

from openai import OpenAI

client = OpenAI(
    base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1", # change the region if needed
    api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", # replace with your Generative AI API Key created in Step 2
    project="ocid1.generativeaiproject.oc1.us-chicago-1.xxxxxxxx"  # replace with your Generative AI Project OCID created in Step 1
)

response = client.responses.create(
    model="xai.grok-4-1-fast-reasoning",
    input="Write a one-sentence explanation of what a database is."
)

print(response.output_text)

Si la réponse retourne une explication, l'API des réponses OCI fonctionne correctement.

Présentation des points d'extrémité d'API pour les réponses OCI

L'API OCI Responses utilise une interface compatible OpenAI, mais toutes les demandes sont acheminées au moyen du point d'extrémité d'inférence OCI Generative AI :

https://inference.generativeai.<region>.oci.oraclecloud.com/openai/v1

Cela signifie que vous pouvez utiliser des API de style OpenAI familières (telles que /responses ou /containers), alors que toutes les demandes sont exécutées dans OCI.

Bien que les API respectent le format OpenAI, elles sont entièrement intégrées à OCI :

  • L'authentification utilise des clés d'API du service d'intelligence artificielle générative pour OCI ou un accès basé sur IAM, et non des données d'identification OpenAI
  • Les ressources (telles que conteneurs, magasins vectoriels ou fichiers) sont créées et gérées dans OCI, et non dans un environnement OpenAI
  • L'exécution et le traitement des données restent entièrement dans OCI

Par exemple, lorsque vous appelez :

/openai/v1/containers

le conteneur est créé et géré dans le service d'intelligence artificielle générative pour OCI.

Seuls les points d'extrémité répertoriés suivants sont pris en charge. Les autres points d'extrémité OpenAI ne sont pas compatibles avec le service d'intelligence artificielle générative pour OCI.

Le reste de ce démarrage rapide fournit des exemples d'utilisation de ces points d'extrémité.

Points d'extrémité disponibles

API URL de base Authentication Chemin du point d'extrémité
API de réponses https://inference.generativeai.${region}.oci.oraclecloud.com Clé d'API ou session IAM /openai/v1/responses
API Conversations https://inference.generativeai.${region}.oci.oraclecloud.com Clé d'API ou session IAM /openai/v1/conversations
API Fichiers https://inference.generativeai.${region}.oci.oraclecloud.com Clé d'API ou session IAM /openai/v1/files
API de fichiers de magasin de vecteurs https://inference.generativeai.${region}.oci.oraclecloud.com Clé d'API ou session IAM /openai/v1/vector_stores/{id}/files
Recherche de magasin vectoriel https://inference.generativeai.${region}.oci.oraclecloud.com Clé d'API ou session IAM /openai/v1/vector_stores/{id}/search
API Conteneurs https://inference.generativeai.${region}.oci.oraclecloud.com Clé d'API ou session IAM /openai/v1/containers
CRUD de projet https://generativeai.${region}.oci.oraclecloud.com Session IAM uniquement /20231130/generativeAiProjects
CRUD de clé d'API https://generativeai.${region}.oci.oraclecloud.com Session IAM uniquement /20231130/apikeys
CRUD de magasin sémantique https://generativeai.${region}.oci.oraclecloud.com Session IAM uniquement /20231130/semanticStores
Stockage vectoriel CRUD https://generativeai.${region}.oci.oraclecloud.com Session IAM uniquement /20231130/openai/v1/vector_stores

Authentification OCI IAM

Dans les étapes précédentes, vous avez utilisé une clé d'API du service d'intelligence artificielle générative pour authentifier les demandes auprès de l'API des réponses OCI. Les clés d'API sont une option pratique pour les tests rapides et le développement précoce. Toutefois, pour les charges de travail de production, de nombreuses équipes préfèrent l'authentification basée sur OCI IAM pour une sécurité améliorée et un contrôle d'accès centralisé.

L'API OCI Responses prend entièrement en charge l'authentification OCI IAM. Cette section explique comment utiliser l'authentification basée sur IAM au lieu des clés d'API.

Quand utiliser l'authentification IAM

Envisagez d'utiliser l'authentification IAM lorsque :

  • Exécution d'applications dans les services OCI (par exemple, Functions ou OKE)
  • Éviter les données d'identification de longue durée telles que les clés d'API
  • Application d'un contrôle d'accès détaillé au moyen de politiques IAM

Installer la bibliothèque d'authentification IAM pour OCI

Installez la bibliothèque oci-genai-auth, qui fournit des utilitaires d'aide pour intégrer l'authentification OCI IAM à la trousse SDK OpenAI :

pip install oci-genai-auth

Cette bibliothèque comprend les outils d'aide à l'authentification suivants :

  • OciSessionAuth (pour le développement local)
  • OciUserPrincipalAuth
  • OciInstancePrincipalAuth
  • OciResourcePrincipalAuth (pour les environnements gérés par OCI)

Configurer le client OpenAI

Lors de l'utilisation de l'authentification IAM, initialisez le client OpenAI avec un client HTTP et un programme de traitement d'authentification personnalisés. La valeur api_key est "not used" dans ce cas.

Exemple : Développement local (OciSessionAuth)

Utilisez cette approche lorsque vous exécutez du code localement (par exemple, sur un ordinateur portable à l'aide d'un profil d'interface de ligne de commande OCI) :

from openai import OpenAI
from oci_openai import OciSessionAuth
import httpx

client = OpenAI(
    base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1",  # update region if needed
    api_key="not-used",
    project="ocid1.generativeaiproject.oc1.us-chicago-1.xxxxxxxx",  # project OCID created earlier
    http_client=httpx.Client(auth=OciSessionAuth(profile_name="DEFAULT"))  # update profile if needed
)

response = client.responses.create(
    model="xai.grok-4-1-fast-reasoning",
    input="Write a one-sentence explanation of what a database is."
)

print(response.output_text)

Exemple : Environnements gérés OCI (OciResourcePrincipalAuth)

Utilisez cette approche lors de l'exécution dans des services OCI 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()),
)

L'utilisation de l'authentification OCI IAM permet à l'application d'accéder en toute sécurité à l'IA générative d'OCI sans gérer les clés d'API, tout en s'alignant sur les pratiques de sécurité OCI standard.

Assurer les autorisations requises

Avant d'appeler l'API OCI Responses, vérifiez que les politiques IAM appropriées sont en place. Les politiques requises dépendent de la méthode d'authentification utilisée.

Si vous utilisez l'authentification OCI IAM

Si vous avez ajouté les politiques sous Préalable : Configurer les autorisations IAM, ignorez cette étape.

Pour permettre à un groupe d'utilisateurs d'appeler l'API Réponses, ajoutez la politique suivante :

allow group <your-group-name> 
to manage generative-ai-response in tenancy

Si vous utilisez l'authentification par clé d'API du service d'intelligence artificielle générative

Lors de l'utilisation de l'authentification par clé d'API, une autre politique est requise pour autoriser les demandes effectuées avec la clé d'API. Si vous avez ajouté les politiques dans 3. Ajouter une autorisation à la clé d'API, ignorez cette étape.

Pour accorder l'accès à une clé d'API spécifique :

allow group <your-group-name> 
to manage generative-ai-response in tenancy 
where ALL {request.principal.type='generativeaiapikey', 
request.principal.id='<your-api-key-OCID>'}

Pour un accès plus large (par exemple, lors des tests), vous pouvez utiliser une politique plus générale :

allow any-user 
to manage generative-ai-family in tenancy 
where ALL {request.principal.type='generativeaiapikey', 
request.principal.id='<your-api-key-OCID>'}

Ces politiques garantissent que les demandes, qu'elles soient authentifiées au moyen du service IAM ou de clés d'API, sont autorisées à accéder aux ressources d'IA générative pour OCI.

Activer le journal 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(
    ...
)

Modèles d'appel

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.

Modèles hébergés par une tierce partie

OCI Generative AI donne accès à des modèles de fournisseurs tiers. Spécifiez le modèle à l'aide de son nom complet :

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

Modèles sur demande

Les modèles sur demande sont hébergés et gérés par OCI et sont disponibles sans nécessiter d'infrastructure dédiée :

response = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Write a one-sentence explanation of what a database is."
)

Grappes dédiées à l'IA (mode dédié)

Pour les charges de travail de production nécessitant un isolement ou une performance prévisible, vous pouvez déployer 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."
)

Cette flexibilité vous permet de sélectionner le modèle de déploiement qui correspond le mieux à vos exigences en matière de performance, de coût et de contrôle.

Réponses de flux

L'API OCI Responses prend en charge la diffusion en continu, ce qui vous permet de recevoir les sorties de modèle de manière incrémentielle à mesure qu'elles sont générées. Cela peut améliorer la réactivité pour des résultats plus longs.

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ù vous voulez afficher les réponses aux utilisateurs au fur et à mesure de leur génération.

Sortie structurée

Dans certains cas d'utilisation, vous pouvez vouloir que le modèle retourne des réponses dans un format structuré au lieu de texte à structure libre. 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 tapé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

class CalendarEvent(BaseModel):
    name: str
    date: str
    participants: list[str]


response = client.responses.parse(
    model="openai.gpt-oss-120b",
    input=[
        {"role": "system", "content": "Extract the event details."},
        {
            "role": "user",
            "content": "The team meeting is scheduled for Monday with Sarah, John, and Priya.",
        },
    ],
    store=False,
    text_format=CalendarEvent,
)

event = response.output_parsed
print(event)

Trace des appels d'API

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
  • web_search_call
  • file_search_call
  • mcp_call
  • mcp_list_tools

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

Intégrer à Observability Tools 🔗

Pour obtenir des informations plus détaillées, telles que les traces de latence, de coût et d'exécution, vous pouvez intégrer l'API OCI Responses aux plates-formes d'observabilité.

De nombreux fournisseurs prennent en charge les API compatibles OpenAI. L'une de ces options 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. Il fournit une observabilité de bout en bout pour le suivi des actions d'agent, prend en charge le contrôle des versions rapide et facilite l'évaluation des sorties de modèle. Langfuse s'intègre à des frameworks populaires tels que OpenAI, LangChain et LlamaIndex.

L'exemple suivant montre comment utiliser Langfuse pour tracer et surveiller les appels d'API Responses.

Étape 1 : Installer le SDK Langfuse

pip install langfuse

Étape 2 : 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"

Étape 3 : Instrumenter le client OpenAI

Importez le client OpenAI à partir de la trousse SDK Langfuse. Le code existant reste inchangé, mais les demandes sont automatiquement suivies.

import os
from langfuse.openai import OpenAI  # Import from Langfuse

client = OpenAI(
    base_url="https://inference.generativeai.us-ashburn-1.oci.oraclecloud.com/openai/v1",
    api_key=os.getenv("OCI_GENAI_API_KEY"),
    project=os.getenv("OCI_GENAI_PROJECT_ID"),
)

# Requests are automatically instrumented by Langfuse
response = client.responses.create(
    model="openai.gpt-oss-120b",
    tools=[
        {
            "type": "mcp",
            "server_label": "dmcp",
            "server_url": "https://mcp.deepwiki.com/mcp",
            "require_approval": "never",
        },
    ],
    input="Explain why tracing and observability are important in distributed systems."
)

print(response.output_text)

Cette intégration fournit une visibilité de bout en bout des appels d'API sans nécessiter de modifications importantes du code d'application.

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.

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="openai.gpt-oss-120b",
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": "Describe the main objects in this image."},
                {
                    "type": "input_image",
                    "image_url": f"data:image/jpeg;base64,{base64_image}",
                    "detail": "high",
                },
            ],
        }
    ],
)

print(response.output_text)

Entrée d'image en tant qu'URL accessible par Internet

response = client.responses.create(
    model="openai.gpt-oss-120b",
    store=False,
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": "Describe the scene shown in this image."},
                {
                    "type": "input_image",
                    "image_url": "https://example.photos/id/123",
                },
            ],
        }
    ],
)

print(response.output_text)

Remplacez "image_url" par une URL d'image valide.

Entrée de fichier en tant qu'ID fichier

Important

L'ID fichier en tant que fonction d'entrée n'est pris 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)

Raisonnement

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.

Raisonnement de l'effort

import json

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

print(response.output_text)

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.

import json

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

print(response.output_text)

Outils de fonction

Les outils de fonction permettent au modèle de demander des données ou des actions à partir de l'application client lors d'un flux de réponses. Cela est utile lorsque le modèle a besoin d'informations qui se trouvent en dehors de 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 signale qu'une fonction doit être utilisée, l'application client effectue ce travail, puis l'application renvoie le résultat afin que le modèle puisse continuer et produire la réponse orientée utilisateur.

Ce que cela permet

Les outils de fonction sont utiles lorsque l'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.

Les cas d'utilisation typiques sont les suivants :

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

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'outil de fonction typique fonctionne comme suit :

  1. Le client envoie une demande qui inclut une ou plusieurs définitions d'outils.
  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 l'outil.
  4. L'application exécute l'outil 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 précises 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

L'exemple suivant définit un outil qui extrait les é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 renvoie à 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 service

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)

Les outils fonctionnels sont 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.

Outil MCP

L'outil MCP permet à un modèle d'utiliser les fonctionnalités exposées par un serveur MCP distant lors d'une demande. Ces fonctionnalités peuvent inclure l'accès à des services externes, à des sources de données ou à des points d'extrémité d'application.

Dans l'IA générative d'OCI, cette fonction est disponible au moyen d'un appel MCP distant, qui permet au service d'interagir avec un serveur MCP dans le cadre du flux de travail du modèle.

Quand utiliser l'outil MCP

Utilisez l'outil MCP lorsque le modèle a besoin d'accéder à des fonctionnalités externes hébergées sur un serveur MCP.

Cette approche est utile lorsque vous souhaitez :

  • Le service 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 fonctionnalités exposées via un serveur MCP distant

L'outil MCP fait partie du jeu d'outils d'IA générative d'OCI et peut être utilisé avec d'autres outils pris en charge.

Soutien au transport

L'appel MCP distant utilise le protocole HTTP évolutif.

Définir un outil MCP

Ajoutez la définition du serveur MCP dans le champ tools de la demande.

response_stream = client.responses.create(
    model="xai.grok-code-fast-1",
    tools=[
        {
            "type": "mcp",
            "server_label": "calendar",
            "server_description": "An MCP server that retrieves calendar events for a specified date.",
            "server_url": "https://example.com/mcp",
            "require_approval": "never",
        },
    ],
    input="What events are scheduled for 2026-04-02?",
    stream=True,
)

for event in response_stream:
    if event.type == "response.output_text.delta":
        print(event.delta, end="", flush=True)

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 le serveur MCP

Si le serveur MCP distant expose plus d'outils que les besoins de l'application, vous pouvez restreindre le jeu disponible à l'aide de allowed_tools.

response_stream = client.responses.create(
    model="openai.gpt-oss-120b",
    tools=[
        {
            "type": "mcp",
            "server_label": "calendar",
            "server_description": "An MCP server that retrieves calendar events for a specified date.",
            "server_url": "https://example.com/mcp",
            "require_approval": "never",
            "allowed_tools": ["get_events"],
        },
    ],
    input="Show the calendar events for 2026-02-02.",
    stream=True,
    store=False,
)

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,
    store=False,
)

Transmettez uniquement la valeur du jeton. N'incluez pas le préfixe Bearer. OCI envoie le jeton sur TLS dans le cadre de la demande et ne le décode pas, ne l'inspecte pas, ne le stocke pas ou ne le consigne pas.

Hébergement de serveur MCP

OCI Generative AI fournit également un hébergement de serveur MCP pour aider à déployer et à adapter les serveurs MCP.

L'outil MCP est une bonne option lorsque vous souhaitez que l'IA générative OCI fonctionne directement avec un serveur MCP distant lors de l'exécution de la demande, sans que l'application client ne doive gérer chaque étape de l'outil elle-même.

Interpréteur de code

L'interpréteur de code permet au modèle d'écrire et d'exécuter du code Python dans un conteneur sécurisé. Cette fonction est utile pour les tâches telles que les calculs, l'analyse de données et le traitement de fichiers.

Dans les invites, vous pouvez appeler l'outil d'interpréteur de code en tant qu'outil python. Par exemple : Utilisez l'outil python pour résoudre le problème.

Comme le code s'exécute dans un environnement isolé sans accès réseau externe, c'est une bonne option pour les tâches nécessitant un calcul ou un traitement de fichiers dans un paramètre contrôlé.

Ce pour quoi vous pouvez l'utiliser

Si vous l'utilisez pour la première fois, il est utile de considérer Code Interpreter 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 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, de nombreuses tâches courantes fonctionnent sans configuration supplémentaire.

Le code s'exécute dans un conteneur. Ce conteneur est l'environnement de travail où Python s'exécute et où les fichiers 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 pourrait soutenir :

  • 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 nouveau conteneur
  • les fichiers doivent être chargés à nouveau si nécessaire
  • l'état in-memory, comme les variables Python, est perdu

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

Exemple

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)

Conteneurs pour l'interpréteur de code

L'interpréteur de code a besoin d'un 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 affecter l'un des deux modes de conteneur suivants :

  • Auto : Le service d'intelligence artificielle générative pour OCI crée le conteneur pour vous et affecte automatiquement une taille de conteneur.
  • OCID du conteneur : Vous créez le conteneur vous-même, vous définissez sa taille et vous indiquez son OCID.

Pour les deux options, les conteneurs sont créés et gérés dans le service IA générative pour OCI. Le code qui s'exécute dans ces conteneurs s'exécute également dans la location du service d'intelligence artificielle générative pour OCI.

Mode automatique

En mode automatique, le service crée 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
response = client.responses.create(
    model="xai.grok-code-fast-1",
    tools=[{
        "type": "code_interpreter",
        "container": {
            "type": "auto"
        }
    }],
    input="Use the python tool to calculate the average of 12, 18, 24, and 30."
)

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 mieux contrôler les spécificités du conteneur, telles que la taille de la mémoire.

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 peut travailler avec 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

Persistance des fichiers 🔗

Les fichiers créés ou modifiés par l'outil python restent disponibles 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 :

  1. lire un fichier
  2. analyser
  3. enregistrer un graphique
  4. 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.

Les opérations courantes sont les suivantes :

  • Créer un fichier de conteneur : Ajoutez un fichier au conteneur
  • 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 référencés dans la réponse.

Ces références incluent :

  • container_id
  • file_id
  • filename

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

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. Pour cette raison, la documentation OpenAI associée peut être utilisée comme référence pour la structure des demandes, les formats de réponse et les flux de travail généraux. Toutefois, lors de l'utilisation de ces API avec OCI, envoyez des demandes aux points d'extrémité d'inférence de l'IA générative pour OCI, utilisez l'authentification OCI et notez que les ressources et l'exécution restent dans l'IA générative pour OCI, et non dans une location OpenAI.

Note

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. Pour cette raison, la documentation OpenAI associée peut être utilisée comme référence pour la structure des demandes, les formats de réponse et les flux de travail généraux. Toutefois, lors de l'utilisation de 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 pour OCI et les ressources et l'exécution restent dans le service Intelligence artificielle générative pour OCI, et non dans une location OpenAI. Voir Points d'extrémité disponibles pour l'URL de base et les points d'extrémité pris en charge.

Référence OpenAI

Outil NL2SQL

L'outil NL2SQL aide les agents d'IA d'entreprise à transformer le langage naturel en langage SQL validé. Il est conçu pour interroger les données d'entreprise fédérées sans déplacer ni dupliquer les données sous-jacentes.

NL2SQL mappe le langage métier aux champs de base de données, aux tables et aux jointures au moyen d'une couche d'enrichissement sémantique. L'outil génère uniquement du code SQL. Elle n'exécute pas la requête elle-même.

L'exécution de l'interrogation est gérée séparément par le serveur MCP DBTools. Ce serveur appelle le service NL2SQL pour générer du code SQL, puis autorise et exécute l'interrogation sur la base de données source à l'aide de l'identité de l'utilisateur final et des limites de sécurité appropriées.

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 comprend deux connexions DBTools :

  • Connexion d'enrichissement
  • Connexion à l'interrogation

Lors de la configuration, vous sélectionnez lorsque l'enrichissement est exécuté :

  • À la création : l'enrichissement commence automatiquement après la création du magasin sémantique
  • Manuel : L'enrichissement est déclenché plus tard au moyen d'un appel d'API

Le processus d'enrichissement lit les métadonnées de schéma telles que les tables et les colonnes à partir de la base de données connectée. Ces métadonnées sont ensuite utilisées pour générer des instructions SQL plus précises.

Une fois l'enrichissement terminé, vous pouvez appeler l'API GenerateSqlFromNl pour convertir l'entrée du langage naturel en SQL.

Préalables

Avant d'utiliser l'outil NL2SQL, créez d'abord une base de données et configurez les connexions requises.

Pour plus d'informations, voir :

Autorisations pour les magasins sémantiques

Pour utiliser des données structurées pour les interrogations NL2SQL et sensibles au schéma, configurez les politiques IAM requises avant de créer le magasin sémantique.

Accès aux clés secrètes

Accordez au groupe l'accès pour lire les clés secrètes utilisées par le service d'outils de base de données :

allow group <your-group-name> 
to read secret-family in compartment <your-compartment-name> 
where all {request.principal.type='generativeaisemanticstore'}

Accès aux connexions au service d'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 <your-group-name> 
to use database-tools-family in compartment <compartment-name> 
where all {request.principal.type='generativeaisemanticstore'}
allow group <your-group-name> 
to read database-family in compartment <compartment-name> 
where all {request.principal.type='generativeaisemanticstore'}
allow group <your-group-name> 
to read autonomous-database-family in compartment <compartment-name> 
where all {request.principal.type='generativeaisemanticstore'}

Accès aux ressources de l'IA générative

Si la politique plus large ci-dessous est déjà en place, elle inclut l'accès aux ressources du magasin sémantique :

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

Si vous voulez un accès plus étroit, utilisez plutôt la politique suivante pour permettre au groupe de créer et de gérer des magasins sémantiques :

allow group <your-group-name> 
to manage generative-ai-semantic-store 
in compartment <your-compartment-name>

Si le groupe n'a besoin que d'utiliser un magasin sémantique existant et d'appeler NL2SQL, utilisez les politiques suivantes :

allow group <your-group-name> 
to use generative-ai-semantic-store 
in compartment <your-compartment-name>
allow group <your-group-name> 
to manage generative-ai-nl2sql 
in compartment <your-compartment-name>

Création d'un magasin sémantique

Un magasin sémantique est un magasin de vecteurs avec des données structurées pointant vers une base de données. Cette tâche documente les étapes de création d'un magasin vectoriel avec des données structurées à l'aide de la console Oracle Cloud.

Conseil

Après avoir créé un magasin de vecteurs, vous pouvez voir ses détails et effectuer d'autres tâches, telles que sa mise à jour ou sa suppression. Utilisez le menu Actions (trois points) de la console pour accéder à ces tâches.

Pour créer un magasin de vecteurs, dans la page de liste, sélectionnez Créer un magasin de vecteurs. Si vous avez besoin d'aide pour trouver la page de liste, voir Liste des magasins de vecteurs.

Informations de base

  1. Entrez un nom pour le magasin de vecteurs.
    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 pour le magasin de vecteurs.
  3. Sélectionnez un compartiment dans lequel créer le magasin de vecteurs. Le compartiment par défaut est le même que la page de liste, mais vous pouvez sélectionner n'importe quel compartiment que vous êtes autorisé à utiliser.

Type de source de données

Sélectionnez Données structurées. Cette option crée un magasin sémantique pour les interrogations NL2SQL et sensibles au schéma.

Données structurées

  1. Sous Configurer le connecteur de synchronisation, sélectionnez un type de connexion.

    Valeur autorisée : Outil de base de données OCI.

  2. Entrez l'ID connexion d'enrichissement, puis sélectionnez Tester la connexion d'enrichissement pour vérifier l'accès.
  3. Entrez l'ID connexion d'interrogation, puis sélectionnez Tester la connexion d'interrogation pour vérifier l'accès.
  4. Dans Schémas, spécifiez les noms de schéma de base de données à ingérer pour NL2SQL et l'interrogation en fonction du schéma.

API de magasin sémantique

Vous pouvez gérer les magasins sémantiques à l'aide de l'API suivante :

  • ChangeSemanticStoreCompartment
  • CreateSemanticStore
  • DeleteSemanticStore
  • GetSemanticStore
  • UpdateSemanticStore
  • ListSemanticStores

Pour la gestion des tâches d'enrichissement, l'API suivante est également disponible :

  • ListEnrichmentJobs
  • GetEnrichmentJob
  • GenerateEnrichmentJob
  • CancelEnrichmentJob

Exemple : Créer et gérer un magasin sémantique avec Python

import json
import oci
from oci.base_client import BaseClient
from oci.retry import DEFAULT_RETRY_STRATEGY

API_VERSION = "20231130"
HOST = "https://dev.generativeai.us-ashburn-1.oci.oraclecloud.com"
BASE_PATH = f"/{API_VERSION}"


def get_signer_auth_api_key(profile="DEFAULT"):
    config = oci.config.from_file("~/.oci/config", profile)
    signer = oci.signer.Signer(
        tenancy=config["tenancy"],
        user=config["user"],
        fingerprint=config["fingerprint"],
        private_key_file_location=config["key_file"],
        pass_phrase=config.get("pass_phrase"),
    )
    return config, signer


def get_signer_auth_security_token(profile="DEFAULT"):
    config = oci.config.from_file("~/.oci/config", profile)
    signer = oci.auth.signers.SecurityTokenSigner(config)
    return config, signer


def make_base_client(signer):
    return BaseClient(
        service_endpoint=HOST,
        signer=signer,
        retry_strategy=None,
    )


def create_semantic_store(client, body: dict):
    return client.call_api(
        resource_path=f"{BASE_PATH}/semanticStores",
        method="POST",
        header_params={"content-type": "application/json"},
        body=body,
    )


def update_semantic_store(client, semantic_store_id: str, body: dict):
    return client.call_api(
        resource_path=f"{BASE_PATH}/semanticStores/{semantic_store_id}",
        method="PUT",
        header_params={"content-type": "application/json"},
        body=body,
        retry_strategy=DEFAULT_RETRY_STRATEGY,
    )


def get_semantic_store(client, semantic_store_id: str):
    return client.call_api(
        resource_path=f"{BASE_PATH}/semanticStores/{semantic_store_id}",
        method="GET",
        retry_strategy=DEFAULT_RETRY_STRATEGY,
    )


def delete_semantic_store(client, semantic_store_id: str):
    return client.call_api(
        resource_path=f"{BASE_PATH}/semanticStores/{semantic_store_id}",
        method="DELETE",
        retry_strategy=DEFAULT_RETRY_STRATEGY,
    )


if __name__ == "__main__":
    # Choose one authentication method
    # config, signer = get_signer_auth_api_key(profile="DEFAULT")
    config, signer = get_signer_auth_security_token(profile="DEFAULT")

    client = make_base_client(signer)

    create_body = {
        "displayName": "TestSemanticStore",
        "description": "Semantic store for the ADMIN schema",
        "freeformTags": {},
        "definedTags": {},
        "dataSource": {
            "queryingConnectionId": "ocid1.databasetoolsconnection.oc1.xxx",
            "enrichmentConnectionId": "ocid1.databasetoolsconnection.oc1.xxx",
            "connectionType": "DATABASE_TOOLS_CONNECTION",
        },
        "refreshSchedule": {"type": "ON_CREATE"},
        "compartmentId": "ocid1.tenancy.oc1..xxx",
        "schemas": {
            "connectionType": "DATABASE_TOOLS_CONNECTION",
            "schemas": [{"name": "ADMIN"}],
        },
    }

    create_resp = create_semantic_store(client, create_body)
    print("CREATE status:", create_resp.status)

    create_payload = create_resp.data
    if isinstance(create_payload, (bytes, str)):
        create_payload = json.loads(create_payload)

    print("CREATE response:", json.dumps(create_payload, indent=2))

    semantic_store_id = create_payload.get("id") or "<semantic-store-ocid>"

    update_body = {
        "refreshSchedule": {"type": "ON_CREATE"},
        "schemas": {
            "connectionType": "DATABASE_TOOLS_CONNECTION",
            "schemas": [{"name": "ADMIN"}],
        },
    }

    update_resp = update_semantic_store(client, semantic_store_id, update_body)
    print("UPDATE status:", update_resp.status)
    print("UPDATE response:", update_resp.data)

    get_resp = get_semantic_store(client, semantic_store_id)
    print("GET status:", get_resp.status)
    print("GET response:", get_resp.data)

    delete_resp = delete_semantic_store(client, semantic_store_id)
    print("DELETE status:", delete_resp.status)
    print("DELETE response:", delete_resp.data)

Exemple : Appeler l'API NL2SQL

Une fois le magasin sémantique prêt et l'enrichissement terminé, vous pouvez appeler 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))

Conversations multitours

OCI Generative AI prend en charge les interactions multifonctions afin que vous puissiez créer des applications qui gardent le contexte pendant la rotation des utilisateurs.

Il existe deux méthodes communes pour ce faire :

  • Chaîne de réponses
  • API Conversations

Chaîne de réponses

Avec l'enchaînement des réponses, chaque nouvelle réponse pointe vers la précédente. Il s'agit d'une option simple lorsque vous souhaitez transférer le contexte sans créer explicitement une ressource de conversation.

# first turn
response1 = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Give me three ideas for a team offsite.",
)
print("Response 1:", response1.output_text)

# second turn
response2 = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Make the second idea more budget friendly.",
    previous_response_id=response1.id,
)
print("Response 2:", response2.output_text)

API Conversations

Avec l'API Conversations, vous créez d'abord une conversation, puis vous joignez des réponses à cette conversation. Cette option est utile lorsque vous voulez un objet de conversation dédié qui peut être réutilisé à plusieurs reprises.
# create a conversation
conversation = client.conversations.create(
    metadata={"topic": "demo"}
)
print("Conversation ID:", conversation.id)

# first turn
response1 = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Give me three ideas for a team offsite.",
    conversation=conversation.id,
)
print("Response 1:", response1.output_text)

# second turn
response2 = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Make the second idea more budget friendly.",
    conversation=conversation.id,
)
print("Response 2:", response2.output_text)