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.
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 tenancyAccorder 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 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
-
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.
- 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.
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.
- 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é.
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.
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
Noms et délais d'expiration des clés
Assurez-vous d'ajouter une autorisation de clé d'API après avoir créé la clé. Utilisez la commande
api-key createet 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 :
- Naviguez jusqu'à la page de liste Clés d'API.
- Sélectionnez la clé d'API que vous avez créée.
- 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/v1Remplacez <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 openaiPour 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-authCette bibliothèque comprend les outils d'aide à l'authentification suivants :
OciSessionAuth(pour le développement local)OciUserPrincipalAuthOciInstancePrincipalAuthOciResourcePrincipalAuth(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 tenancySi 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 :
messageweb_search_callfile_search_callmcp_callmcp_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
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 :
- Le client envoie une demande qui inclut une ou plusieurs définitions d'outils.
- Le modèle décide si l'un de ces outils est nécessaire.
- Si un outil est nécessaire, le modèle renvoie le nom et les arguments de l'outil.
- L'application exécute l'outil et prépare le résultat.
- L'application renvoie ce résultat dans une demande de suivi.
- 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_idet 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.
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
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.
Outil de recherche de fichiers
L'outil de recherche de fichiers permet au modèle de rechercher du contenu pertinent à partir de fichiers stockés dans un magasin de vecteurs et d'utiliser ce contenu extrait lors de la formation d'une réponse. Cela est utile lorsque vous voulez que les réponses reflètent les documents que vous avez fournis, plutôt que de vous fier uniquement aux connaissances intégrées du modèle.
Comme la recherche de fichiers est gérée par le service, l'application n'a pas besoin d'implémenter son propre pipeline d'extraction.
Préparer un magasin de vecteurs
Avant d'utiliser la recherche de fichiers, créez un magasin de vecteurs et ajoutez les fichiers auxquels le modèle doit faire référence. OCI Generative AI prend en charge plusieurs modèles de traitement de fichier au moyen d'API respectant le style d'API OpenAI Files.
| Jeu d'API | Description |
|---|---|
| Fichiers | Gestion de fichiers standard. |
| Fichiers de magasin de vecteurs | Fichiers liés directement aux magasins. |
| Lots de fichiers du magasin de vecteurs | Fichiers pour le traitement par lots à ajouter aux magasins. |
| Fichiers de conteneur | traitement des fichiers conteneurisés; |
Exemple
Pour rendre la recherche de fichier disponible dans une demande, ajoutez une entrée d'outil avec type: "file_search" et fournissez l'ID magasin vectoriel.
response = client.responses.create(
model="openai.gpt-oss-120b",
input="Summarize the main ideas covered in the documents in this vector store.",
tools=[
{
"type": "file_search",
"vector_store_ids": ["<vector_store_id>"]
}
]
)
print(response)
- Le modèle peut utiliser le contenu du magasin de vecteurs lors de la génération de la réponse.
- L'extraction de fichiers est gérée par la plate-forme.
- Les paramètres de recherche hybride ne sont pas pris en charge avec l'outil de recherche de fichiers.
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 :
- 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.
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_idfile_idfilename
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.
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 tenancySi 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.
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 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
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
API de magasin sémantique
Vous pouvez gérer les magasins sémantiques à l'aide de l'API suivante :
ChangeSemanticStoreCompartmentCreateSemanticStoreDeleteSemanticStoreGetSemanticStoreUpdateSemanticStoreListSemanticStores
Pour la gestion des tâches d'enrichissement, l'API suivante est également disponible :
ListEnrichmentJobsGetEnrichmentJobGenerateEnrichmentJobCancelEnrichmentJob
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
# 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)