Démarrage express
Procédez comme suit pour commencer à créer des agents d'IA d'entreprise avec OCI Generative AI. Ce guide vous guide tout au long de la configuration initiale, avec le contexte en cours de route afin que vous compreniez non seulement quoi faire, mais aussi pourquoi cela compte.
Prérequis : configuration des droits d'accès IAM
Avant de créer un projet, assurez-vous que les groupes d'utilisateurs appropriés ont accès aux ressources OCI Generative AI. Sans ces autorisations, vous ne pourrez pas créer ni gérer des projets et des ressources associées.
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 via une seule stratégie.
Accordez un large accès uniquement aux administrateurs ou aux utilisateurs travaillant dans des environnements de modèle d'environnement restreint ou 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 autoriser un groupe d'utilisateurs à gérer toutes les ressources d'IA générative dans la location, procédez comme suit :
allow group <your-group-name> to manage generative-ai-family
in tenancyOctroi de l'accès au niveau du compartiment
Pour définir la portée de l'accès à un compartiment spécifique, procédez comme suit :
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éation d'un projet
Un projet est la ressource de base pour l'organisation et la gestion des agents d'IA et des ressources associées dans OCI Generative AI. Vous pouvez créer un projet via la console Oracle Cloud.
Après avoir créé un projet, vous pouvez le gérer via la console, par exemple en mettant à jour ses détails, en le déplaçant vers un autre compartiment, en gérant les balises ou en le supprimant. Ces actions sont disponibles dans le menu de la page de la liste des projets.
Pour commencer, accédez à la page de la liste des 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 traits d'union ou de traits de soulignement (1 à 255 caractères). Si vous n'indiquez pas de nom, un nom est généré automatiquement au 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 où le projet résidera. Par défaut, il s'agit du compartiment en cours, mais vous pouvez choisir n'importe quel compartiment pour lequel vous disposez des droits d'accès requis.
Conservation des données
Configurer la durée pendant laquelle les données générées sont stockées. Cela vous aide à équilibrer la convivialité et les exigences du cycle de vie des données :
-
Conservation de la réponse :
Définit la durée pendant laquelle les réponses de modèle individuelles sont stockées après la génération.
-
Conservation de la conversation :
Détermine la durée pendant laquelle une conversation entière est conservée après sa mise à jour la plus récente.
Vous pouvez définir les deux valeurs en heures, jusqu'à 720 heures (30 jours) au maximum.
Compaction de mémoire à court terme
Cette fonctionnalité améliore l'efficacité en résumant l'historique des conversations récentes en une représentation compacte. Il permet de maintenir le contexte tout en réduisant l'utilisation et la latence des jetons.
-
Activer (facultatif) :
Activez la compression de mémoire à court terme pour condenser automatiquement les interactions précédentes.
-
Sélection de modèle :
Si 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 en tant qu'intégrations, ce qui les rend consultables et réutilisables dans les interactions.
-
Activer (facultatif) :
Activez la mémoire à long terme pour conserver les informations clés des conversations.
- Sélection de modèle :
- Modèle d'extraction : identifie et capture les informations importantes.
- Modèle d'intégration : convertit les données stockées en représentations vectorielles pour extraction.
- Ces modèles doivent être sélectionnés lors de la création du projet et ne peuvent pas être modifiés ultérieurement.
- Une fois qu'elle est activée, la mémoire à long terme ne peut pas être désactivée, sauf si le projet est supprimé.
Pour de meilleurs résultats, définissez la durée maximale (720 heures) de conservation des réponses et des conversations lors de l'utilisation de la mémoire à long terme.
Balises
Les balises vous aident à organiser et à gérer les ressources.
-
(Facultatif) Sélectionnez Ajouter une balise pour affecter des métadonnées à votre projet.
Pour plus d'informations, reportez-vous à Balises de ressource.
Enfin, sélectionnez Créer pour créer le projet.
2. Création d'une clé d'API
Créez une clé d'API pour authentifier les demandes auprès d'OCI Generative AI. Vous pouvez nommer la clé et éventuellement configurer jusqu'à deux noms de clé avec des dates et heures d'expiration.
Les clés d'API sont utilisées pour authentifier les demandes auprès d'OCI Generative AI. Cette étape consiste à créer une clé que les applications ou les outils peuvent utiliser pour accéder au service en toute sécurité.
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.
Sur 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, reportez-vous à Liste des clés d'API.
Informations de base
Noms de clé et délais d'expiration
Veillez à ajouter un droit d'accès 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 obtenir la liste complète des paramètres et des valeurs des commandes de la CLI, reportez-vous à la référence des commandes de la CLI.
Exécutez l'opération CreateApiKey pour créer une clé d'API. Fournissez le nom d'affichage, la description facultative et tous les noms de clé avec leur horodatage d'expiration (UTC).
3. Ajouter un droit d'accès à la clé d'API
Rechercher l'OCID de clé d'API
Pour définir la portée des droits d'accès à une clé d'API spécifique, vous avez besoin de son OCID.
Dans la console :
- Accédez à la page de liste des 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 le droit d'accès à la clé d'API
Créez une stratégie IAM pour autoriser la clé d'API à appeler l'API des 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 stratégie permet aux demandes authentifiées avec la clé d'API indiquée d'accéder à l'API des réponses, tout en gardant l'accès étendu et contrôlé.
4. Appel de l'API OCI Responses
L'API OCI Responses est l'interface principale pour créer des applications agentiques d'IA d'entreprise dans OCI Generative AI. Elle offre un moyen flexible de combiner des fonctionnalités de base, telles que l'orchestration, le raisonnement, les outils et l'état des conversations, dans une seule demande.
Avec cette API, vous pouvez :
- Exécutez une inférence simple en une seule étape ou créez des workflows 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 plate-forme ou côté client)
- Gérer l'état de la conversation dans le service ou au sein du client
Cette approche unifiée vous permet de lancer des agents simples et de créer progressivement des agents plus avancés, 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 OCI Responses :
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 du kit SDK 🔗
L'API des réponses OCI est compatible avec le kit SDK OpenAI, qui est recommandé 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 structures d'agent populaires telles que LangChain, LlamaIndex et OpenAI Agents SDK.
Installation du kit SDK OpenAI officiel (Python)
Python
pip install openaiPour appeler l'API des réponses, assurez-vous d'utiliser le kit SDK OpenAI, et non le kit SDK OCI. Assurez-vous également que la dernière version du kit SDK OpenAI est installée.
Pour les autres langues, reportez-vous à la page Bibliothèques OpenAI.
Faites votre première demande 🔗
L'exemple suivant montre comment appeler l'API de réponses à 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 renvoie une explication, l'API OCI Responses fonctionne correctement.
Présentation des adresses d'API OCI Réponses
L'API OCI Responses utilise une interface compatible OpenAI, mais toutes les demandes sont acheminées via l'adresse d'inférence OCI Generative AI :
https://inference.generativeai.<region>.oci.oraclecloud.com/openai/v1
Cela signifie que vous pouvez utiliser des API de type OpenAI courantes (telles que /responses ou /containers), tandis 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 les clés d'API OCI Generative AI ou l'accès basé sur IAM, et non les informations d'identification OpenAI
- Les ressources (conteneurs, banques de vecteurs ou fichiers, par exemple) 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 OCI Generative AI.
Seules les adresses répertoriées suivantes sont prises en charge. Les autres adresses OpenAI ne sont pas compatibles avec OCI Generative AI.
Le reste de ce démarrage rapide fournit des exemples d'utilisation de ces adresses.
Adresses disponibles
| API | URL de base | Authentification | Chemin d'adresse |
|---|---|---|---|
| API de réponses | https://inference.generativeai.${region}.oci.oraclecloud.com |
Clé d'API ou session IAM | /openai/v1/responses |
| API de conversations | https://inference.generativeai.${region}.oci.oraclecloud.com |
Clé d'API ou session IAM | /openai/v1/conversations |
| API de fichiers | https://inference.generativeai.${region}.oci.oraclecloud.com |
Clé d'API ou session IAM | /openai/v1/files |
| API de fichiers de banque de vecteurs | https://inference.generativeai.${region}.oci.oraclecloud.com |
Clé d'API ou session IAM | /openai/v1/vector_stores/{id}/files |
| Recherche de magasin de vecteurs | https://inference.generativeai.${region}.oci.oraclecloud.com |
Clé d'API ou session IAM | /openai/v1/vector_stores/{id}/search |
| API Containers | https://inference.generativeai.${region}.oci.oraclecloud.com |
Clé d'API ou session IAM | /openai/v1/containers |
| Projet CRUD | https://generativeai.${region}.oci.oraclecloud.com |
Session IAM uniquement | /20231130/generativeAiProjects |
| Clé d'API CRUD | https://generativeai.${region}.oci.oraclecloud.com |
Session IAM uniquement | /20231130/apikeys |
| CRUD du magasin sémantique | https://generativeai.${region}.oci.oraclecloud.com |
Session IAM uniquement | /20231130/semanticStores |
| Magasin de vecteurs CRUD | https://generativeai.${region}.oci.oraclecloud.com |
Session IAM uniquement | /20231130/openai/v1/vector_stores |
Authentification OCI IAM
Au cours des étapes précédentes, vous avez utilisé une clé d'API d'IA 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. Cependant, 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 à la place des clés d'API.
Quand utiliser l'authentification IAM
Envisagez d'utiliser l'authentification IAM dans les cas suivants :
- Exécution d'applications dans les services OCI (par exemple, Functions ou OKE)
- Eviter les informations d'identification de longue durée, telles que les clés d'API
- Application du contrôle d'accès de niveau fin via des stratégies IAM
Installation de la bibliothèque d'authentification OCI IAM
Installez la bibliothèque oci-genai-auth, qui fournit des utilitaires d'aide pour l'intégration de l'authentification OCI IAM au kit SDK OpenAI :
pip install oci-genai-authCette bibliothèque inclut les aides à l'authentification suivantes :
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 personnalisé et un gestionnaire d'authentification. Dans ce cas, la valeur api_key est "not used".
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 par OCI (OciResourcePrincipalAuth)
Utilisez cette approche lorsque vous exécutez des services OCI tels qu'OCI Functions ou OCI Container Engine for Kubernetes (OKE) :
from openai import OpenAI
from oci_openai import OciResourcePrincipalAuth
import httpx
client = OpenAI(
base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1", # update region if needed
api_key="not-used",
project="ocid1.generativeaiproject.oc1.us-chicago-1.xxxxxxxx", # project OCID created earlier
http_client=httpx.Client(auth=OciResourcePrincipalAuth()),
)L'authentification OCI IAM permet à l'application d'accéder en toute sécurité à OCI Generative AI sans gérer les clés d'API, tout en s'alignant sur les pratiques de sécurité OCI standard.
Vérifier les autorisations requises
Avant d'appeler l'API OCI Responses, vérifiez que les stratégies IAM appropriées sont en place. Les stratégies requises dépendent de la méthode d'authentification utilisée.
Utilisation de l'authentification OCI IAM
Si vous avez ajouté les stratégies dans Prérequis : configuration des droits d'accès IAM, ignorez cette étape.
Pour autoriser un groupe d'utilisateurs à appeler l'API des réponses, ajoutez la stratégie suivante :
allow group <your-group-name>
to manage generative-ai-response in tenancySi vous utilisez l'authentification par clé d'API d'IA générative
Lors de l'utilisation de l'authentification par clé d'API, une autre stratégie est requise pour autoriser les demandes effectuées avec la clé d'API. Si vous avez ajouté les stratégies dans 3. Ajouter un droit d'accès à la clé d'API, ignorez cette étape.
Pour accorder l'accès à une clé d'API spécifique, procédez comme suit :
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 stratégie 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 stratégies garantissent que les demandes, qu'elles soient authentifiées via IAM ou des clés d'API, sont autorisées à accéder aux ressources OCI Generative AI.
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 vous aider à résoudre les problèmes. Les journaux de débogage affichent les demandes et réponses HTTP brutes, y compris le fichier opc-request-id, qui est utile lors de l'utilisation du support technique Oracle.
Vous pouvez référencer cet ID de demande lorsque vous signalez des problèmes afin d'identifier et de diagnostiquer plus rapidement les problèmes.
from openai import OpenAI
import logging
logger = logging.getLogger("openai")
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())
# Create and use the OpenAI client as usual
client = OpenAI(
...
)
Modèles d'appel
Vous pouvez utiliser l'API OCI Responses pour appeler différents types de modèle disponibles dans les régions prises en charge par OCI Generative AI. Pour obtenir la liste des modèles et des régions pris en charge, reportez-vous à Modèles et régions d'agent.
Modèles hébergés tiers
OCI Generative AI fournit un accès aux modèles de fournisseurs tiers. Indiquez le modèle en utilisant son nom qualifié 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 à la demande
Les modèles à la demande sont hébergés et gérés par OCI et sont disponibles sans infrastructure dédiée :
response = client.responses.create(
model="openai.gpt-oss-120b",
input="Write a one-sentence explanation of what a database is."
)Clusters d'IA dédiés (mode dédié)
Pour les charges de travail de production nécessitant une isolation ou des performances prévisibles, vous pouvez déployer des modèles sur un cluster d'IA dédié. Dans ce cas, utilisez l'OCID d'adresse de cluster comme identificateur de modèle :
response = client.responses.create(
model="<dedicated-ai-cluster-endpoint-ocid>",
input="Write a one-sentence explanation of what a database is."
)Cette flexibilité vous permet de sélectionner le modèle de déploiement qui correspond le mieux à vos exigences en matière de performances, de coûts et de contrôle.
Réponses de flux
L'API OCI Responses prend en charge la transmission en continu, ce qui vous permet de recevoir les sorties de modèle de manière incrémentielle au fur et à mesure de leur génération. Cela peut améliorer la réactivité pour des sorties plus longues.
Diffuser tous les événements
response_stream = client.responses.create(
model="openai.gpt-oss-120b",
input="Explain the difference between structured and unstructured data.",
stream=True
)
for event in response_stream:
print(event)Sortie de texte de flux uniquement (jetons delta)
response_stream = client.responses.create(
model="openai.gpt-oss-120b",
input="Explain the difference between structured and unstructured data.",
stream=True
)
for event in response_stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)Le streaming est particulièrement utile pour les applications interactives où vous souhaitez 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 souhaiter que le modèle renvoie des réponses dans un format structuré au lieu d'un texte de forme libre. L'API OCI Responses le prend en charge en vous permettant de définir un schéma et d'analyser la sortie du modèle en objets fortement typés.
Cette approche est utile lors de l'intégration avec les systèmes en aval, de l'application de la cohérence ou de l'extraction de champs spécifiques à partir de la saisie du langage naturel.
from pydantic import BaseModel
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 OCI Responses, la réponse inclut un champ output. Ce champ est un tableau d'éléments qui décrivent ce qui s'est passé pendant la demande.
Chaque élément représente une étape de l'exécution et peut inclure différents types, tels que :
messageweb_search_callfile_search_callmcp_callmcp_list_tools
Ces éléments de sortie fournissent une visibilité sur la façon dont la demande a été traitée. Vous pouvez les utiliser pour :
- Déboguer et comprendre le comportement du modèle
- Afficher les étapes d'exécution dans une interface utilisateur
- Créez des workflows d'observabilité ou de journalisation personnalisés
Intégration aux outils d'observabilité 🔗
Pour obtenir des informations plus approfondies telles que la latence, les coûts et les traces 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 open source 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 de l'agent, prend en charge la gestion des versions rapide et aide à l'évaluation des sorties du modèle. Langfuse s'intègre aux structures populaires telles qu'OpenAI, LangChain et LlamaIndex.
L'exemple suivant montre comment utiliser Langfuse pour suivre et surveiller les appels d'API Responses.
Etape 1 : installation du kit SDK Langfuse
pip install langfuseEtape 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 du SDK Langfuse. Le code existant reste inchangé, mais les demandes sont automatiquement tracées.
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 offre une visibilité de bout en bout sur les appels d'API sans nécessiter de modification importante du code de votre application.
Entrées multimodales
L'API OCI Responses prend en charge les modèles qui acceptent les entrées multimodales. Vous pouvez combiner du texte avec des images, des fichiers et des contrôles de raisonnement pour prendre en charge des flux de travail plus riches tels que l'analyse de documents, la compréhension d'images et des réponses de modèles plus délibérées.
Entrée d'image en tant qu'URL de données codées en Base64
import base64
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
base64_image = encode_image("/path/to/image.png")
response = client.responses.create(
model="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)Saisie 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 de fichier
L'ID de 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 de fichier dans la demande. Reportez-vous à Modèles Gemini pris en charge.
file = client.files.create(
file=open("<path-to-file>", "rb"),
purpose="user_data"
)
response = client.responses.create(
model="google.gemini-2.5-pro",
input=[
{
"role": "user",
"content": [
{
"type": "input_file",
"file_id": file.id,
},
{
"type": "input_text",
"text": "Summarize this document.",
},
]
}
]
)
print(response.output_text)Entrée de fichier en tant qu'URL accessible par Internet
response = client.responses.create(
model="google.gemini-2.5-flash",
input=[
{
"role": "user",
"content": [
{"type": "input_text", "text": "Summarize this file."},
{
"type": "input_file",
"file_url": "https://www.example.com/letters/example-letter.pdf",
},
],
}
],
)
print(response.output_text)Raisonnement
Les contrôles de raisonnement vous permettent de régler l'effort que le modèle utilise avant de produire une réponse. Ceci est utile lorsque vous souhaitez hiérarchiser la vitesse, la profondeur ou un équilibre des deux.
Effort de raisonnement
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 de synthèse du raisonnement
Si vous créez un chatbot, l'activation de résumés de raisonnement peut aider les utilisateurs à mieux comprendre comment le modèle est arrivé à un résultat. Pendant la diffusion en continu, les utilisateurs peuvent également voir des jetons de raisonnement pendant que le modèle réfléchit.
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 au cours d'un flux de réponse. 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 la fonction directement. Au lieu de cela, il indique qu'une fonction doit être utilisée, que l'application client effectue ce travail, puis que l'application renvoie le résultat afin que le modèle puisse continuer et produire la réponse côté utilisateur.
Ce qui 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'emploi les plus courants sont :
- Recherche d'événements de calendrier
- Extraction des données d'application
- Appel d'API internes ou externes
- Exécuter une logique métier ou des calculs
Cette approche vous offre de la flexibilité tout en conservant le chemin d'exécution dans l'application.
Flux d'exécution 🔗
Une interaction type d'un outil fonctionnel fonctionne comme suit :
- Le client envoie une demande qui inclut une ou plusieurs définitions d'outil.
- 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 :
- Etat géré par le service : recommandé pour la plupart des cas d'utilisation. La demande de suivi inclut
previous_response_idet le service suit l'échange précédent. - Etat géré par le client : l'application conserve l'historique complet des interactions et envoie le contexte cumulé à chaque demande.
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 le bon outil 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 seconde demande renvoie le résultat de l'outil et référence la réponse précédente.
import json
tools = [
{
"type": "function",
"name": "get_calendar_events",
"description": "Return calendar events scheduled for a specific date.",
"parameters": {
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "Date to query, for example 2026-04-02"
}
},
"required": ["date"],
},
},
]
def get_calendar_events(date):
# Replace this with actual calendar logic or an API call
return [
{"time": "09:00", "title": "Team standup"},
{"time": "13:00", "title": "Design review"},
{"time": "16:00", "title": "Project check-in"},
]
# Initial request
response = client.responses.create(
model="openai.gpt-oss-120b",
tools=tools,
input="Show the calendar events for 2026-04-02.",
)
# Execute the requested function
tool_outputs = []
for item in response.output:
if item.type == "function_call" and item.name == "get_calendar_events":
args = json.loads(item.arguments)
events = get_calendar_events(**args)
tool_outputs.append({
"type": "function_call_output",
"call_id": item.call_id,
"output": json.dumps({"events": events}),
})
# Follow-up request
final = client.responses.create(
model="openai.gpt-oss-120b",
instructions="Summarize the schedule clearly for the user.",
tools=tools,
input=tool_outputs,
previous_response_id=response.id,
)
print(final.output_text)Exemple : état géré par le 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 option puissante lorsque l'application doit rester responsable de l'exécution, du contrôle d'accès et de la logique d'intégration, tout en permettant au modèle de demander les informations dont il a besoin.
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 adresses d'application.
Dans OCI Generative AI, cette fonctionnalité est disponible via un appel MCP distant, qui permet au service d'interagir avec un serveur MCP dans le cadre du workflow de 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 voulez :
- Le service pour communiquer directement avec le serveur MCP
- Moins d'étapes d'orchestration côté client
- Latence plus faible qu'un modèle d'outil exécuté par le client
- Accès aux fonctionnalités exposées via un serveur MCP distant
L'outil MCP fait partie de l'ensemble d'outils OCI Generative AI et peut être utilisé avec d'autres outils pris en charge.
Soutien au transport
L'appel MCP distant utilise le HTTP Streamable.
Définition d'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 transmet la réponse et imprime le texte au fur et à mesure qu'il est généré.
Limitation des outils exposés par le serveur MCP
Si le serveur MCP distant affiche plus d'outils que nécessaire pour l'application, vous pouvez affiner l'ensemble 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,
)Authentification du 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 de jeton. N'incluez pas le préfixe Bearer. OCI envoie le jeton via TLS dans le cadre de la demande et ne le décode pas, ne l'inspecte pas, ne le stocke pas et 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 à faire évoluer les serveurs MCP.
L'outil MCP est une bonne option lorsque vous souhaitez qu'OCI Generative AI fonctionne directement avec un serveur MCP distant lors de l'exécution de la demande, sans nécessiter que l'application client gère 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 une banque 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 compter uniquement sur les connaissances intégrées du modèle.
La recherche de fichier étant 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 File Search, créez une banque de vecteurs et ajoutez les fichiers que le modèle doit référencer. OCI Generative AI prend en charge plusieurs modèles de traitement de fichiers via des API qui suivent le style d'API OpenAI Files.
| Ensemble d'API | Description |
|---|---|
| Fichiers | Gestion de fichiers standard. |
| Fichiers de banque de vecteurs | Fichiers directement liés aux magasins. |
| Lots de fichiers du magasin de vecteurs | Fichiers pour le traitement par lots à ajouter aux magasins. |
| Fichiers de conteneur | Gestion des fichiers en conteneur. |
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 de banque de vecteurs.
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 de stockage vectoriel 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 fichier.
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é. Cela est utile pour des tâches telles que les calculs, l'analyse des données et le traitement des fichiers.
Dans les invites, vous pouvez appeler l'outil Interpréteur de code en tant qu'outil python. Par exemple : Utilisez l'outil python pour résoudre le problème.
Etant donné que le code s'exécute dans un environnement isolé sans accès au réseau externe, il s'agit d'une bonne option pour les tâches nécessitant un calcul ou un traitement de fichier dans un paramètre contrôlé.
Pour quoi l'utiliser
Si vous l'utilisez pour la première fois, il est utile de penser à Code Interpreter comme un espace de travail Python temporaire pour le modèle.
Vous pouvez l'utiliser pour des tâches telles que :
- résolution de problèmes mathématiques
- analyse des fichiers téléchargés
- nettoyage ou transformation de données
- création de graphiques ou de tableaux
- 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 est exécuté dans un conteneur. Ce conteneur est l'environnement de travail où Python est exécuté et où les fichiers sont stockés pendant la session.
Limites de mémoire du conteneur
Les conteneurs d'interpréteur de code utilisent un pool de mémoire partagée de 64 Go par location.
Les tailles de conteneur prises en charge sont les suivantes :
- 1 Go
- 4 Go
- 16 Go
- 64 Go
Cette limite partagée peut être divisée entre plusieurs conteneurs. Par exemple, il peut prendre en charge :
- soixante-quatre conteneurs de 1 Go
- seize conteneurs de 4 Go
- quatre conteneurs de 16 Go
- un conteneur de 64 Go
Si vous avez besoin de plus de capacité, vous pouvez soumettre une demande de service.
Expiration du conteneur
Un conteneur expire après 20 minutes d'inactivité.
Ceci est important à savoir lors de la création de flux à plusieurs étapes :
- un conteneur expiré ne peut pas être réutilisé
- vous devez créer un conteneur
- les fichiers doivent être chargés à nouveau si nécessaire
- L'état en mémoire, 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ète 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 téléchargés
- fichiers créés par le modèle
- données de travail temporaires pendant l'exécution
Lorsque vous utilisez l'interpréteur de code, vous pouvez affecter l'un des deux modes de conteneur suivants :
- auto : OCI Generative AI crée le conteneur pour vous et affecte automatiquement une taille de conteneur.
- OCID de conteneur : vous créez le conteneur vous-même, définissez la taille du conteneur et fournissez l'OCID.
Pour les deux options, les conteneurs sont créés et gérés dans OCI Generative AI. Le code qui s'exécute dans ces conteneurs s'exécute également dans la location OCI Generative AI.
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 de 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. Ensuite, vous transmettez l'ID de conteneur dans la demande.
Utilisez le mode explicite lorsque vous souhaitez plus de contrôle sur 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
L'interpréteur de code peut utiliser des fichiers pendant la durée de vie du conteneur. Le modèle peut lire les fichiers que vous fournissez et peut également créer de nouveaux fichiers.
Cela est utile pour les workflows tels que :
- lecture d'un fichier CSV ou PDF
- génération d'un graphique
- enregistrement de la sortie traitée
- création de journaux ou de rapports
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 les travaux antérieurs de la même session. Par exemple, il peut :
- lire un fichier
- l'analyser
- enregistrer un graphique
- utiliser ce graphique ultérieurement dans le même conteneur
Lorsque le conteneur expire, cet état n'est plus disponible.
Téléchargement et gestion de fichiers 🔗
Vous pouvez gérer les fichiers conteneur via les API de fichier conteneur.
Les opérations courantes sont les suivantes :
- Créer un fichier conteneur : ajoutez un fichier au conteneur.
- Liste des fichiers de conteneur : visualisez les fichiers dans le conteneur.
- Supprimer un fichier conteneur : enlever un fichier
- Extraire le contenu du fichier conteneur : téléchargez un fichier à partir du conteneur.
Vous pouvez ainsi utiliser le conteneur en tant qu'espace de travail temporaire pour l'exécution de code basé sur un modèle.
Fichiers de sortie et citations 🔗
Lorsque le modèle crée des fichiers, ces fichiers sont stockés dans le conteneur et peuvent être 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 des réponses OCI prend en charge les adresses compatibles OpenAI pour des fonctionnalités telles que les réponses, les fichiers, les conteneurs et les fichiers de conteneur. 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 workflows généraux. Toutefois, lorsque vous utilisez ces API avec OCI, envoyez des demandes aux adresses d'inférence OCI Generative AI, utilisez l'authentification OCI et notez que les ressources et l'exécution restent dans OCI Generative AI, et non dans une location OpenAI.
L'API des réponses OCI prend en charge les adresses compatibles OpenAI pour des fonctionnalités telles que les réponses, les fichiers, les conteneurs et les fichiers de conteneur. 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 workflows généraux. Toutefois, lorsque vous utilisez ces API avec OCI, envoyez des demandes aux adresses d'inférence OCI Generative AI, utilisez l'authentification OCI et les ressources et l'exécution restent dans OCI Generative AI, et non dans une location OpenAI. Reportez-vous à Adresses disponibles pour obtenir l'URL de base et les adresses prises 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 avec des champs, des tables et des jointures de base de données via une couche d'enrichissement sémantique. L'outil génère uniquement du code SQL. Il n'exécute pas la requête elle-même.
L'exécution des requêtes est gérée séparément par le serveur DBTools MCP. Ce serveur appelle le service NL2SQL pour générer du code SQL, puis autorise et exécute la requête sur la base de données source à l'aide de l'identité de l'utilisateur final et des garde-fous appropriés.
Pour utiliser NL2SQL, créez une ressource de banque sémantique OCI. Une banque sémantique est soutenue par une banque de vecteurs avec des données structurées et comprend deux connexions DBTools :
- Connexion d'enrichissement
- Connexion de requête
Lors de la configuration, vous sélectionnez les options suivantes lors de l'exécution de l'enrichissement :
- Lors de la création : l'enrichissement démarre automatiquement après la création de la banque sémantique
- Manuel : l'enrichissement est déclenché ultérieurement via un appel d'API
Le processus d'enrichissement lit les métadonnées de schéma telles que les tables et les colonnes 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 en langage naturel en code SQL.
Prérequis
Avant d'utiliser l'outil NL2SQL, commencez par créer une base de données et configurez les connexions de base de données requises.
Pour plus d'informations, reportez-vous à :
Autorisations pour les magasins sémantiques
Afin d'utiliser des données structurées pour l'interrogation NL2SQL et tenant compte des schémas, configurez les stratégies IAM requises avant de créer la banque sémantique.
Accès aux clés secrètes
Autorisez le groupe à lire les clés secrètes utilisées par Database Tools :
allow group <your-group-name>
to read secret-family in compartment <your-compartment-name>
where all {request.principal.type='generativeaisemanticstore'}Accès aux connexions Database Tools
Autorisez le groupe à accéder aux ressources Database Tools 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 sources Generative AI
Si la stratégie plus large ci-dessous est déjà en place, elle inclut l'accès aux ressources de magasin sémantique :
allow group <your-group-name>
to manage generative-ai-family in tenancySi vous souhaitez un accès plus restreint, utilisez plutôt la stratégie suivante pour autoriser le groupe à créer et à 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 une banque sémantique existante et d'appeler NL2SQL, utilisez les stratégies plus spécifiques 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éer un magasin sémantique
Une banque sémantique est une banque de vecteurs avec des données structurées pointant vers une base de données. Cette tâche décrit les étapes de création d'une banque de vecteurs avec des données structurées à l'aide de la console Oracle Cloud.
Après avoir créé une banque de vecteurs, vous pouvez afficher 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 une banque de vecteurs, dans la page de liste, sélectionnez Créer une banque de vecteurs. Si vous avez besoin d'aide pour trouver la page de liste, reportez-vous à Liste des magasins de vecteurs.
Informations de base
Type d'origine des données
Sélectionnez Données structurées. Cette option crée un emplacement de stockage sémantique pour les requêtes NL2SQL et sensibles au schéma.
Données structurées
API de stockage sémantique
Vous pouvez gérer les banques sémantiques à l'aide de l'API suivante :
ChangeSemanticStoreCompartmentCreateSemanticStoreDeleteSemanticStoreGetSemanticStoreUpdateSemanticStoreListSemanticStores
Pour la gestion des travaux d'enrichissement, l'API suivante est également disponible :
ListEnrichmentJobsGetEnrichmentJobGenerateEnrichmentJobCancelEnrichmentJob
Exemple : création et gestion d'une banque 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 : appel de l'API NL2SQL
Une fois la banque sémantique prête 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 à rotation multiple
OCI Generative AI prend en charge les interactions multi-tours, de sorte que vous pouvez créer des applications qui gardent le contexte lors de la rotation des utilisateurs.
Pour ce faire, vous pouvez utiliser les méthodes suivantes :
- Chaîne de réponses
- API de conversations
Chaînage de réponses
Avec le chaînage des réponses, chaque nouvelle réponse pointe vers la précédente. Il s'agit d'une option simple lorsque vous voulez reporter le contexte sans créer explicitement de 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 de 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)