Inicio rapido

Utiliza los siguientes pasos para comenzar a crear agentes de IA empresarial con OCI Generative AI. Esta guía le guiará por la configuración inicial, con el contexto en el camino para que comprenda no solo qué hacer, sino por qué importa.

Requisito: Configurar permisos de IAM

Antes de crear un proyecto, asegúrese de que los grupos de usuarios adecuados tengan acceso a los recursos de OCI Generative AI. Sin estos permisos, no podrá crear ni gestionar proyectos y activos relacionados.

OCI proporciona un tipo de recurso agregado, generative-ai-family, que otorga acceso a todos los tipos de recursos de IA generativa a través de una única política.

Consejo

Otorgue acceso amplio solo a los administradores o usuarios que trabajan en entornos de sandbox o desarrollo. Para el uso de la producción, considere la posibilidad de aplicar políticas más restrictivas.

Otorgar acceso en el nivel de arrendamiento

Para permitir que un grupo de usuarios gestione todos los recursos de IA generativa en todo el arrendamiento:

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

Otorgar acceso en el nivel de compartimento

Para restringir el acceso a un compartimento específico:

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

Una vez que estos permisos estén en su lugar, estará listo para crear el primer proyecto.

1. Crear un Proyecto

Un proyecto es el recurso fundamental para organizar y gestionar agentes de IA y activos relacionados en OCI Generative AI. Puede crear un proyecto mediante la consola de Oracle Cloud.

Después de crear un proyecto, puede gestionarlo a través de la consola, por ejemplo, actualizando sus detalles, moviéndolo a otro compartimento, gestionando etiquetas o suprimiéndolo. Estas acciones están disponibles en el menú Acciones (tres puntos) de la página de lista de proyectos.

Para empezar, vaya a la página de lista de proyectos y seleccione Crear proyecto.

Información Básica

Comience por definir los atributos principales del proyecto:
  • Name (opcional) (Nombre):

    Proporcione un nombre que empiece por una letra o un guion bajo, seguido de letras, números, guiones o guiones bajos (de 1 a 255 caracteres). Si no especifica un nombre, se genera uno automáticamente con el formato:

    generativeaiproject<timestamp> (por ejemplo, generativeaiproject20260316042443). Puede actualizarlo más adelante.

  • Descripción (opcional):

    Agregue una breve descripción para ayudar a identificar el objetivo del proyecto.

  • Compartimento:

    Seleccione el compartimento en el que residirá el proyecto. Por defecto, este es el compartimento actual, pero puede seleccionar cualquier compartimento en el que tenga los permisos necesarios.

Retención de Datos

Configure el tiempo que se almacenan los datos generados. Esto le ayuda a equilibrar el uso con los requisitos del ciclo de vida de los datos:

  • Retención de respuestas:

    Define cuánto tiempo se almacenan las respuestas de modelos individuales después de la generación.

  • Retención de conversaciones:

    Determina cuánto tiempo se mantiene una conversación completa después de su actualización más reciente.

Puede definir ambos valores en horas, hasta un máximo de 720 horas (30 días).

Compactación de memoria a corto plazo

Esta función mejora la eficiencia al resumir el historial de conversaciones recientes en una representación compacta. Ayuda a mantener el contexto al tiempo que reduce el uso y la latencia del token.

  • Enable (opcional) (Activar):

    Active la compactación de memoria a corto plazo para condensar automáticamente las interacciones anteriores.

  • Selección del modelo:

    Si se activa, seleccione un modelo de compactación. Los modelos disponibles varían según la región.

Importante

  • El modelo de compactación se selecciona en el momento de la creación y no se puede cambiar posteriormente.
  • Una vez habilitada, esta función no se puede deshabilitar sin eliminar el proyecto.
  1. (Opcional) Active la compactación de memoria a corto plazo para resumir el historial de chat anterior y mantener el contexto ligero.
  2. Si activa la función de compactación de memoria a corto plazo, seleccione un modelo de la lista para la compactación.
    La lista de modelos varía según la región. Para conocer los modelos disponibles, consulte Generative AI Models and Regions for Agentic API.

Memoria a largo plazo

La memoria a largo plazo permite al sistema extraer y mantener información importante de las conversaciones para su uso futuro. Estos datos se almacenan como incrustaciones, lo que permite realizar búsquedas y reutilizarlos en todas las interacciones.

  • Enable (opcional) (Activar):

    Active la memoria a largo plazo para conservar las estadísticas clave de las conversaciones.

  • Selección del modelo:
    • Modelo de extracción: identifica y captura información importante.
    • Modelo de embebido: convierte los datos almacenados en representaciones vectoriales para su recuperación.
Importante

  • Estos modelos se deben seleccionar durante la creación del proyecto y no se pueden cambiar posteriormente.
  • Una vez activada, la memoria a largo plazo no se puede desactivar a menos que se suprima el proyecto.
Consejo

Para obtener los mejores resultados, establezca tanto la respuesta como la retención de la conversación en la duración máxima (720 horas) cuando utilice memoria a largo plazo.

Etiquetas

Las etiquetas le ayudan a organizar y gestionar recursos.

  • (Opcional) Seleccione Agregar etiqueta para asignar metadatos al proyecto.

    Para obtener más información, consulte Etiquetas de recurso.

Por último, seleccione Crear para crear el proyecto.

2. Creación de una Clave de API

Cree una clave de API para autenticar solicitudes en OCI Generative AI. Puede asignar un nombre a la clave y, opcionalmente, configurar hasta dos nombres de clave con fechas y horas de caducidad.

Las claves de API se utilizan para autenticar solicitudes en OCI Generative AI. En este paso, creará una clave que las aplicaciones o herramientas pueden utilizar para acceder de forma segura al servicio.

Puede crear y gestionar claves de API mediante la consola, la CLI o la API.

Importante

Asegúrese de agregar permiso de clave de API después de crear la clave.
  • En la página de lista Claves de API, seleccione Crear clave de API. Si necesita ayuda para buscar la página de lista, consulte Listado de claves de API.

    Información básica

    1. Introduzca un nombre para la clave de API (necesario). Inicie el nombre con una letra o guion bajo, seguido de letras, números, guiones o guiones bajos. La extensión puede abarcar entre1 y 255 caracteres.
    2. (Opcional) Introduzca una descripción.
    3. (Opcional) Para guardar la clave de API en un compartimento diferente al que aparece, seleccione otro compartimento.
      Debe tener permiso para trabajar en un compartimento para ver los recursos que contiene. Si no está seguro de qué compartimento utilizar, póngase en contacto con un administrador. Para obtener más información, consulte Descripción de los compartimentos.
    4. (Opcional) Asigne etiquetas a esta clave de API. Consulte Etiquetas de recursos.

    Nombres de claves y plazos de caducidad

    1. Introduzca un nombre para la primera clave: Nombre de clave única. Inicie el nombre con una letra o guion bajo, seguido de letras, números, guiones o guiones bajos. La extensión puede abarcar entre1 y 255 caracteres.
    2. (Opcional) Defina la clave de una fecha de caducidad y la clave de una hora de caducidad (UTC).
      El valor por defecto es de tres meses a partir de la fecha de creación.
    3. Introduzca un nombre para la segunda clave: Key two name.
    4. (Opcional) Defina la clave de dos fechas de caducidad y la clave de dos horas de caducidad (UTC).
      El valor por defecto es de tres meses a partir de la fecha de creación.
    5. Seleccione Crear.
    Asegúrese de Agregar permiso de clave de API después de crear la clave.
  • Utilice el comando api-key create y los parámetros necesarios para crear una clave de API.

    oci generative-ai api-key create [OPTIONS]

    Para obtener una lista completa de parámetros y valores para los comandos de la CLI, consulte la Referencia de comandos de la CLI.

  • Ejecute la operación CreateApiKey para crear una clave de API. Proporcione el nombre mostrado, la descripción opcional y cualquier nombre de clave con sus registros de hora de caducidad (UTC).

3. Agregar permiso a la clave de API

Buscar el OCID de clave de API

Para restringir los permisos a una clave de API específica, necesita su OCID.

En la consola:

  1. Vaya a la página de lista de claves de API.
  2. Seleccione la clave de API que ha creado.
  3. Copie el OCID (normalmente comienza con ocid1.generativeaiapikey...).

Otorgar permiso a la clave de API

Cree una política de IAM para permitir que la clave de API llame a la API de respuestas:

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

Esta política permite que las solicitudes autenticadas con la clave de API especificada accedan a la API de respuestas y, al mismo tiempo, mantengan el ámbito y el control del acceso.

4. Llamada a la API de respuestas de OCI

La API de respuestas de OCI es la interfaz principal para crear aplicaciones ágentes de IA empresarial en OCI Generative AI. Proporciona una forma flexible de combinar capacidades básicas, como la orquestación, el razonamiento, las herramientas y el estado de la conversación, en una sola solicitud.

Con esta API, puede:

  • Ejecute una inferencia sencilla de un solo paso o cree flujos de trabajo de agente de varios pasos
  • Activar o desactivar el razonamiento según el caso de uso
  • Integrar herramientas (gestionadas por la plataforma o por el cliente)
  • Gestionar el estado de la conversación en el servicio o en el cliente

Este enfoque unificado le permite iniciar agentes simples y progresivamente más avanzados, al tiempo que mantiene el control sobre el costo, la latencia y el comportamiento.

URL de base 🔗

Utilice la siguiente URL base para acceder a la API de respuestas de OCI:

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

Sustituya <region> por el identificador de región adecuado (por ejemplo, us-chicago-1).

Soporte de SDK 🔗

La API de respuestas de OCI es compatible con el SDK de OpenAI, que se recomienda para interactuar con el servicio. Es compatible en muchos lenguajes, incluidos Python, Java, TypeScript, Go y .NET.

También puede utilizarlo con marcos de agentes populares como LangChain, LlamaIndex y OpenAI Agents SDK.

Instalar el SDK oficial de OpenAI (Python)

Python

pip install openai
Nota

Para llamar a la API de respuestas, asegúrese de utilizar el SDK de OpenAI, no el SDK de OCI. También asegúrese de tener instalada la última versión del SDK de OpenAI.

Para otros idiomas, consulte la página Bibliotecas OpenAI.

Realice su primera solicitud 🔗

En el siguiente ejemplo se muestra cómo llamar a la API de respuestas mediante 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 respuesta devuelve una explicación, la API de respuestas de OCI funciona correctamente.

Descripción de puntos finales de API de respuestas de OCI

La API de respuestas de OCI utiliza una interfaz compatible con OpenAI, pero todas las solicitudes se enrutan a través del punto final de inferencia de OCI Generative AI:

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

Esto significa que puede utilizar API de estilo OpenAI conocidas (como /responses o /containers), mientras que todas las solicitudes se ejecutan en OCI.

Aunque las API siguen el formato de OpenAI, están totalmente integradas con OCI:

  • La autenticación utiliza claves de API de OCI Generative AI o acceso basado en IAM, no credenciales de OpenAI
  • Los recursos (como contenedores, almacenes de vectores o archivos) se crean y gestionan en OCI, no en un entorno OpenAI.
  • La ejecución y el procesamiento de datos permanecen completamente dentro de OCI

Por ejemplo, al llamar:

/openai/v1/containers

el contenedor se crea y gestiona en OCI Generative AI.

Solo están soportados los siguientes puntos finales mostrados. Otros puntos finales de OpenAI no son compatibles con OCI Generative AI.

El resto de este inicio rápido proporciona ejemplos de cómo utilizar estos puntos finales.

Puntos Finales Disponibles

API URL Base Autenticación Ruta de acceso al punto final
API de respuestas https://inference.generativeai.${region}.oci.oraclecloud.com Clave de API o sesión de IAM /openai/v1/responses
API de Conversaciones https://inference.generativeai.${region}.oci.oraclecloud.com Clave de API o sesión de IAM /openai/v1/conversations
API de archivos https://inference.generativeai.${region}.oci.oraclecloud.com Clave de API o sesión de IAM /openai/v1/files
API de archivos de almacenamiento vectorial https://inference.generativeai.${region}.oci.oraclecloud.com Clave de API o sesión de IAM /openai/v1/vector_stores/{id}/files
Búsqueda de tienda de vectores https://inference.generativeai.${region}.oci.oraclecloud.com Clave de API o sesión de IAM /openai/v1/vector_stores/{id}/search
API de contenedores https://inference.generativeai.${region}.oci.oraclecloud.com Clave de API o sesión de IAM /openai/v1/containers
CRUD de proyecto https://generativeai.${region}.oci.oraclecloud.com Solo sesión de IAM /20231130/generativeAiProjects
CRUD de clave de API https://generativeai.${region}.oci.oraclecloud.com Solo sesión de IAM /20231130/apikeys
CRUD de almacén semántico https://generativeai.${region}.oci.oraclecloud.com Solo sesión de IAM /20231130/semanticStores
Tienda de vectores CRUD https://generativeai.${region}.oci.oraclecloud.com Solo sesión de IAM /20231130/openai/v1/vector_stores

Autenticación de OCI IAM

En los pasos anteriores, utilizó una clave de API de IA generativa para autenticar solicitudes en la API de respuestas de OCI. Las claves de API son una opción conveniente para pruebas rápidas y desarrollo temprano. Sin embargo, para las cargas de trabajo de producción, muchos equipos prefieren la autenticación basada en OCI IAM para mejorar la seguridad y el control de acceso centralizado.

La API de respuestas de OCI soporta por completo la autenticación de OCI IAM. En esta sección se muestra cómo utilizar la autenticación basada en IAM en lugar de las claves de API.

Cuándo utilizar la autenticación de IAM

Considere el uso de la autenticación de IAM cuando:

  • Ejecución de aplicaciones en servicios de OCI (por ejemplo, Functions u OKE)
  • Evitar credenciales de larga duración como claves de API
  • Aplicación de control de acceso detallado mediante políticas de IAM

Instalación de la biblioteca de autenticación de IAM de OCI

Instale la biblioteca oci-genai-auth, que proporciona utilidades auxiliares para integrar la autenticación de OCI IAM con el SDK de OpenAI:

pip install oci-genai-auth

Esta biblioteca incluye los siguientes ayudantes de autenticación:

  • OciSessionAuth (para el desarrollo local)
  • OciUserPrincipalAuth
  • OciInstancePrincipalAuth
  • OciResourcePrincipalAuth (para entornos gestionados por OCI)

Configurar el cliente OpenAI

Al utilizar la autenticación de IAM, inicialice el cliente de OpenAI con un cliente HTTP personalizado y un manejador de autenticación. El valor api_key es "not used" en este caso.

Ejemplo: desarrollo local (OciSessionAuth)

Utilice este enfoque al ejecutar código localmente (por ejemplo, en un portátil que utiliza un perfil de la CLI de 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)

Ejemplo: entornos gestionados de OCI (OciResourcePrincipalAuth)

Utilice este enfoque cuando se ejecute en servicios de OCI como OCI Functions u 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()),
)

El uso de la autenticación de OCI IAM permite a la aplicación acceder de forma segura a OCI Generative AI sin gestionar claves de API, al tiempo que se alinea con las prácticas de seguridad estándar de OCI.

Garantizar los permisos necesarios

Antes de llamar a la API de respuestas de OCI, verifique que se aplican las políticas de IAM adecuadas. Las políticas necesarias dependen del método de autenticación utilizado.

Si se utiliza la autenticación de OCI IAM

Si ha agregado las políticas en Requisito: Configurar permisos de IAM, omita este paso.

Para permitir que un grupo de usuarios llame a la API de respuestas, agregue la siguiente política:

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

Si se utiliza la autenticación de clave de API de IA generativa

Al utilizar la autenticación de clave de API, se necesita otra política para autorizar las solicitudes realizadas con la clave de API. Si ha agregado las políticas en 3. Agregue el permiso a la clave de API; omita este paso.

Para otorgar acceso a una clave de API específica:

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

Para un acceso más amplio (por ejemplo, durante las pruebas), puede utilizar una política más general:

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

Estas políticas garantizan que las solicitudes, ya sean autenticadas mediante IAM o claves de API, estén autorizadas para acceder a los recursos de OCI Generative AI.

Activar log de depuración

Si encuentra problemas al llamar a la API, activar el registro de depuración puede ayudar con la resolución de problemas. Los logs de depuración muestran las solicitudes y respuestas HTTP sin procesar, incluido opc-request-id, que es útil al trabajar con los Servicios de Soporte Oracle.

Puede hacer referencia a este ID de solicitud al informar problemas para ayudar a identificar y diagnosticar problemas más rápidamente.

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

Modelos de llamadas

Puede utilizar la API de respuestas de OCI para llamar a diferentes tipos de modelos disponibles en las regiones soportadas de OCI Generative AI. Para obtener una lista de los modelos y regiones soportados, consulte Agent Models and Regions.

Modelos alojados de terceros

OCI Generative AI proporciona acceso a modelos de proveedores de terceros. Especifique el modelo con su nombre completo:

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

Modelos bajo demanda

Los modelos a demanda los aloja y gestiona OCI, y están disponibles sin necesidad de infraestructura dedicada:

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

Clusters de IA dedicados (modo dedicado)

Para cargas de trabajo de producción que requieren aislamiento o rendimiento predecible, puede desplegar modelos en un cluster de IA dedicado. En este caso, utilice el OCID de punto final de cluster como identificador de modelo:

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

Esta flexibilidad le permite seleccionar el modelo de despliegue que mejor se adapte a sus requisitos de rendimiento, costo y control.

Respuestas de flujo

La API de respuestas de OCI soporta la transmisión, lo que le permite recibir salidas de modelos de forma incremental a medida que se generan. Esto puede mejorar la capacidad de respuesta para salidas más largas.

Transmitir todos los eventos

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)

Salida de texto de solo flujo (tokens 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)

Streaming es especialmente útil para aplicaciones interactivas en las que desea mostrar respuestas a los usuarios a medida que se generan.

Salida estructurada

En algunos casos de uso, puede que desee que el modelo devuelva respuestas en un formato estructurado en lugar de texto de formato libre. La API de respuestas de OCI soporta esto al permitirle definir un esquema y analizar la salida del modelo en objetos de tipo fuerte.

Este enfoque es útil cuando se integra con sistemas descendentes, se aplica la coherencia o se extraen campos específicos de la entrada de lenguaje natural.

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)

Rastrear llamadas de API

Cuando llama a la API de respuestas de OCI, la respuesta incluye un campo output. Este campo es una serie de elementos que describen lo que ha ocurrido durante la petición.

Cada elemento representa un paso en la ejecución y puede incluir diferentes tipos, como:

  • message
  • web_search_call
  • file_search_call
  • mcp_call
  • mcp_list_tools

Estos elementos de salida proporcionan visibilidad de cómo se procesó la solicitud. Puede utilizarlas para:

  • Depurar y comprender el comportamiento del modelo
  • Mostrar los pasos de ejecución en una interfaz de usuario
  • Crear flujos de trabajo personalizados de observación o registro

Integración con herramientas de observación 🔗

Para obtener información más detallada, como rastreos de latencia, costos y ejecución, puedes integrar la API de respuestas de OCI con plataformas de observación.

Muchos proveedores admiten API compatibles con OpenAI. Una de estas opciones es Langfuse, una plataforma de ingeniería de LLM de código abierto que ayuda a los desarrolladores a depurar, supervisar y mejorar las aplicaciones de LLM. Proporciona una capacidad de observación integral para rastrear acciones del agente, soporta el control de versiones de petición de datos y ayuda con la evaluación de las salidas del modelo. Langfuse se integra con marcos populares como OpenAI, LangChain y LlamaIndex.

En el siguiente ejemplo se muestra cómo utilizar Langfuse para rastrear y supervisar las llamadas de API de respuestas.

Paso 1: Instalar el SDK de Langfuse

pip install langfuse

Paso 2: Configurar variables de entorno

Defina las variables de entorno de Langfuse y OCI necesarias:

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"

Paso 3: Instrumentalizar el cliente OpenAI

Importe el cliente OpenAI desde el SDK de Langfuse. El código existente permanece sin cambios, pero las solicitudes se rastrean automáticamente.

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)

Esta integración proporciona una visibilidad integral de las llamadas de API sin necesidad de realizar cambios significativos en el código de la aplicación.

Entradas multimodales

La API de respuestas de OCI soporta modelos que aceptan entradas multimodales. Puede combinar texto con imágenes, archivos y controles de razonamiento para admitir flujos de trabajo más completos, como análisis de documentos, comprensión de imágenes y respuestas de modelos más deliberadas.

Entrada de imagen como URL de datos codificados 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)

Entrada de imagen como URL accesible a 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)

Sustituya "image_url" por una URL de imagen válida.

Entrada de archivo como ID de archivo

Importante

La función de ID de archivo como entrada solo se admite con los modelos de Google Gemini. Para cada solicitud, el tamaño combinado de todos los archivos PDF cargados debe ser inferior a 50 MB y puede proporcionar un máximo de 10 ID de archivo en la solicitud. Consulte modelos de Gemini soportados.
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)

Entrada de archivo como URL accesible a 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)

Razones

Los controles de razonamiento le permiten ajustar cuánto esfuerzo utiliza el modelo antes de producir una respuesta. Esto es útil cuando se desea priorizar la velocidad, la profundidad o un equilibrio de ambos.

Esfuerzo de razonamiento

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)

Salida de resumen de razonamiento

Si está creando un chatbot, la activación de resúmenes de razonamiento puede ayudar a los usuarios a comprender mejor cómo llegó el modelo a un resultado. Durante la transmisión, los usuarios también pueden ver tokens de razonamiento mientras el modelo está pensando.

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)

Herramientas de función

Las herramientas de función permiten al modelo solicitar datos o acciones de la aplicación cliente durante un flujo de respuesta. Esto resulta útil cuando el modelo necesita información que se encuentre fuera de la petición de datos en sí, como los datos de calendario, el estado interno de la aplicación o el resultado de una operación personalizada.

Con este patrón, el modelo no ejecuta la función directamente. En su lugar, indica que se debe utilizar una función, que la aplicación cliente realiza ese trabajo y, a continuación, que la aplicación envía el resultado de nuevo para que el modelo pueda continuar y producir la respuesta orientada al usuario.

Lo que esto permite

Las herramientas de función son útiles cuando la aplicación necesita mantener el control de la ejecución mientras permite que el modelo decida cuándo se necesita información externa.

Los casos de utilización habituales incluyen:

  • Consulta de eventos de calendario
  • Recuperando datos de aplicación
  • Llamada a API internas o externas
  • Ejecución de cálculos o lógica de negocio

Este enfoque proporciona flexibilidad a la vez que mantiene la ruta de ejecución dentro de la aplicación.

Flujo de ejecución 🔗

Una interacción típica de la herramienta de función funciona así:

  1. El cliente envía una solicitud que incluye una o más definiciones de herramienta.
  2. El modelo decide si una de esas herramientas es necesaria.
  3. Si se necesita una herramienta, el modelo devuelve el nombre y los argumentos de la herramienta.
  4. La aplicación ejecuta la herramienta y prepara el resultado.
  5. La aplicación envía ese resultado de nuevo en una solicitud de seguimiento.
  6. El modelo utiliza ese resultado para completar la respuesta.

Opciones de manejo de estado 🔗

Existen dos formas comunes de gestionar el estado en estas solicitudes:

  • Estado gestionado por servicio: se recomienda para la mayoría de los casos de uso. La solicitud de seguimiento incluye previous_response_id y el servicio realiza un seguimiento del intercambio anterior.
  • Estado gestionado por el cliente: la aplicación mantiene todo el historial de interacciones y envía el contexto acumulado con cada solicitud.
Consejo

Mantenga las definiciones de herramientas precisas. Los nombres claros, las descripciones precisas y los parámetros bien definidos ayudan al modelo a seleccionar la herramienta adecuada y generar argumentos utilizables.

Definición de una herramienta de función

El siguiente ejemplo define una herramienta que recupera eventos de calendario para una fecha especificada.

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

Incluya esta matriz tools en la solicitud client.responses.create().

Ejemplo: Estado Gestionado por Servicio

En este patrón, la primera solicitud permite al modelo decidir si la herramienta es necesaria. La segunda solicitud devuelve el resultado de la herramienta y hace referencia a la respuesta anterior.

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)

Ejemplo: Estado Gestionado por Servicio

En este patrón, la aplicación mantiene el intercambio completo y lo vuelve a enviar con la solicitud de seguimiento.

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)

Las herramientas funcionales son una opción sólida cuando la aplicación debe seguir siendo responsable de la ejecución, el control de acceso y la lógica de integración, al tiempo que permite al modelo solicitar la información que necesita.

Herramienta MCP

La herramienta MCP permite a un modelo utilizar las capacidades expuestas por un servidor MCP remoto durante una solicitud. Estas capacidades pueden incluir acceso a servicios externos, orígenes de datos o puntos finales de aplicaciones.

En OCI Generative AI, esta capacidad está disponible a través de llamadas MCP remotas, lo que permite al servicio interactuar con un servidor MCP como parte del flujo de trabajo del modelo.

Cuándo se debe utilizar la herramienta MCP

Utilice la herramienta MCP cuando el modelo necesite acceso a capacidades externas alojadas en un servidor MCP.

Este enfoque es útil cuando se desea:

  • El servicio para comunicarse directamente con el servidor MCP
  • Menos pasos de orquestación del cliente
  • Menor latencia que un patrón de herramienta ejecutado por el cliente
  • Acceso a las capacidades expuestas a través de un servidor MCP remoto

La herramienta MCP forma parte del conjunto de herramientas de OCI Generative AI y se puede utilizar junto con otras herramientas compatibles.

Soporte de transporte

Las llamadas MCP remotas utilizan Streamable HTTP.

Definición de una herramienta MCP

Agregue la definición del servidor MCP en el campo tools de la solicitud.

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)

En este ejemplo, se transmite la respuesta y se imprime el texto a medida que se genera.

Restricción de las herramientas expuestas por el servidor MCP

Si el servidor MCP remoto expone más herramientas de las que necesita la aplicación, puede limitar el juego disponible mediante 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,
)

Proporcionar autenticación al servidor MCP

Si el servidor MCP remoto requiere autenticación, transfiera el token de acceso en el campo 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,
)

Transfiera solo el valor de token. No incluya el prefijo Bearer. OCI envía el token a través de TLS como parte de la solicitud y no lo descodifica, inspecciona, almacena ni registra.

Alojamiento de servidores MCP

OCI Generative AI también proporciona alojamiento de servidores MCP para ayudar a desplegar y escalar servidores MCP.

La herramienta MCP es una buena opción cuando desea que OCI Generative AI funcione directamente con un servidor MCP remoto durante la ejecución de la solicitud, sin necesidad de que la aplicación cliente maneje cada paso de la herramienta en sí.

Intérprete de código

El intérprete de código permite al modelo escribir y ejecutar código Python en un contenedor seguro. Esto resulta útil para tareas como cálculos, análisis de datos y procesamiento de archivos.

En las peticiones de datos, puede llamar a la herramienta Interpretador de código como la herramienta python. Por ejemplo: Utilice la herramienta python para resolver el problema.

Debido a que el código se ejecuta en un entorno aislado sin acceso a la red externa, es una buena opción para las tareas que necesitan procesamiento de archivos o cálculos en un entorno controlado.

Para qué se puede utilizar

Si lo está utilizando por primera vez, ayuda pensar en Code Interpreter como un espacio de trabajo temporal de Python para el modelo.

Puede utilizarlo para tareas como:

  • resolver problemas matemáticos
  • análisis de archivos cargados
  • limpieza o transformación de datos
  • creación de gráficos o tablas
  • generación de archivos de salida como logs o juegos de datos procesados

Entorno de Ejecución

El entorno de Python incluye más de 420 bibliotecas preinstaladas, por lo que muchas tareas comunes funcionan sin configuración adicional.

El código se ejecuta dentro de un contenedor. Este contenedor es el entorno de trabajo donde se ejecuta Python y donde se almacenan los archivos durante la sesión.

Límites de memoria de contenedor

Los contenedores de Code Interpreter utilizan un pool de memoria compartida de 64 GB por arrendamiento.

Los tamaños de contenedor soportados son:

  • 1 GB
  • 4 GB
  • 16 GB
  • 64 GB

Este límite compartido se puede dividir en varios contenedores. Por ejemplo, podría soportar:

  • sesenta y cuatro contenedores de 1 GB
  • dieciséis contenedores de 4 GB
  • cuatro contenedores de 16 GB
  • un contenedor de 64 GB

Si necesita más capacidad, puede enviar una solicitud de servicio.

Caducidad de contenedor

Un contenedor caduca después de 20 minutos de inactividad.

Esto es importante saber al crear flujos de varios pasos:

  • no se puede reutilizar un contenedor caducado
  • debe crear un nuevo contenedor
  • los archivos se deben volver a cargar si es necesario
  • el estado en memoria, como las variables de Python, se pierde

Debido a esto, es mejor tratar los contenedores como entornos de trabajo temporales.

Ejemplo

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)

Contenedores para intérprete de código

El intérprete de código necesita un contenedor. El contenedor es el entorno aislado en el que el modelo ejecuta código Python.

Un contenedor puede contener:

  • archivos cargados
  • archivos creados por el modelo
  • datos de trabajo temporales durante la ejecución

Al utilizar Code Interpreter, puede asignar uno de los dos modos de contenedor:

  • auto: OCI Generative AI crea el contenedor para usted y le asigna automáticamente un tamaño de contenedor.
  • OCID de contenedor: cree el contenedor usted mismo, defina el tamaño del contenedor y proporcione el OCID.

Para ambas opciones, los contenedores se crean y gestionan en OCI Generative AI. El código que se ejecuta en esos contenedores también se ejecuta en el arrendamiento de OCI Generative AI.

Modo automático

En el modo automático, el servicio crea el contenedor. Esta es la opción más fácil y un buen punto de partida para la mayoría de los usuarios.

Utilice el modo automático cuando:

  • desea que OCI Generative AI gestione el contenedor
  • No necesita control directo sobre el medio ambiente
  • desea una configuración más sencilla
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."
)

Modo explícito

En el modo explícito, primero debe crear el contenedor y definir el tamaño. A continuación, transfiera el ID de contenedor en la solicitud.

Utilice el modo explícito cuando desee tener más control sobre los detalles del contenedor, como el tamaño de la memoria.

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)

Archivos en Code Interpreter

El intérprete de código puede trabajar con archivos durante la vida útil del contenedor. El modelo puede leer los archivos que proporcione y también puede crear nuevos archivos.

Esto resulta útil para flujos de trabajo como:

  • lectura de un CSV o PDF
  • generación de un gráfico
  • guardado de salida procesada
  • creación de logs o informes

Persistencia de archivos 🔗

Los archivos creados o modificados por la herramienta python permanecen disponibles en el mismo contenedor siempre que el contenedor no haya caducado.

Esto significa que el modelo puede basarse en trabajos anteriores en la misma sesión. Por ejemplo, puede:

  1. leer un archivo
  2. analizarlo
  3. guardar un gráfico
  4. utilizar ese gráfico más adelante en el mismo contenedor

Cuando el contenedor caduca, ese estado ya no está disponible.

Carga y gestión de archivos 🔗

Puede gestionar archivos de contenedor mediante las API de archivo de contenedor.

Las operaciones comunes incluyen:

  • Crear archivo de contenedor: agregue un archivo al contenedor
  • Mostrar Archivos de Contenedor: Ver Archivos en el Contenedor
  • Suprimir archivo de contenedor: eliminación de un archivo
  • Recuperar Contenido de Archivo de Contenedor: Descargue un archivo del contenedor

Esto le permite utilizar el contenedor como espacio de trabajo temporal para la ejecución de código controlado por modelo.

Archivos de salida y citas 🔗

Cuando el modelo crea archivos, estos archivos se almacenan en el contenedor y se puede hacer referencia a ellos en la respuesta.

Estas referencias incluyen:

  • container_id
  • file_id
  • filename

Estos valores se pueden utilizar para recuperar el contenido del archivo generado.

La API de respuestas de OCI soporta puntos finales compatibles con OpenAI para funciones como respuestas, archivos, contenedores y archivos de contenedor. Por este motivo, la documentación de OpenAI relacionada se puede utilizar como referencia para la estructura de solicitudes, los formatos de respuesta y los flujos de trabajo generales. Sin embargo, al utilizar estas API con OCI, envíe solicitudes a los puntos finales de inferencia de OCI Generative AI, utilice la autenticación de OCI y tenga en cuenta que los recursos y la ejecución permanecen en OCI Generative AI, no en un arrendamiento de OpenAI.

Nota

La API de respuestas de OCI soporta puntos finales compatibles con OpenAI para funciones como respuestas, archivos, contenedores y archivos de contenedor. Por este motivo, la documentación de OpenAI relacionada se puede utilizar como referencia para la estructura de solicitudes, los formatos de respuesta y los flujos de trabajo generales. Sin embargo, al utilizar estas API con OCI, envíe solicitudes a los puntos finales de inferencia de IA generativa de OCI, utilice la autenticación de OCI y los recursos y la ejecución permanezcan en OCI Generative AI, no en un arrendamiento de OpenAI. Consulte Puntos finales disponibles para la URL base y los puntos finales soportados.

Referencia de OpenAI

Herramienta NL2SQL

La herramienta NL2SQL ayuda a los agentes de IA empresarial a convertir el lenguaje natural en SQL validado. Está diseñado para consultar datos empresariales federados sin mover ni duplicar los datos subyacentes.

NL2SQL asigna el lenguaje de negocio a campos de base de datos, tablas y uniones a través de una capa de enriquecimiento semántico. La herramienta solo genera SQL. No ejecuta la consulta en sí.

El servidor MCP de DBTools maneja la ejecución de consultas por separado. Ese servidor llama al servicio NL2SQL para generar SQL y, a continuación, autoriza y ejecuta la consulta en la base de datos de origen mediante la identidad del usuario final y las guías de protección adecuadas.

Para utilizar NL2SQL, cree un recurso de almacén semántico de OCI. Un almacén semántico está respaldado por un almacén de vectores con datos estructurados e incluye dos conexiones de DBTools:

  • Conexión de enriquecimiento
  • Conexión de consulta

Durante la configuración, puede seleccionar al ejecutar el enriquecimiento:

  • Al crear: el enriquecimiento se inicia automáticamente después de crear el almacén semántico.
  • Manual: el enriquecimiento se dispara más tarde mediante una llamada de API

El proceso de enriquecimiento lee los metadatos del esquema, como tablas y columnas, de la base de datos conectada. A continuación, esos metadatos se utilizan para generar SQL más preciso.

Una vez completado el enriquecimiento, puede llamar a la API GenerateSqlFromNl para convertir la entrada de lenguaje natural en SQL.

Requisitos

Antes de utilizar la herramienta NL2SQL, cree una base de datos y configure las conexiones de base de datos necesarias.

Para obtener más información, consulte:

Permisos para almacenes semánticos

Para utilizar datos estructurados para consultas de NL2SQL y de esquema, configure las políticas de IAM necesarias antes de crear el almacén semántico.

Acceso a secretos

Otorgue acceso al grupo para leer los secretos utilizados por Database Tools:

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

Acceso a conexiones de Database Tools

Otorgue al grupo acceso a los recursos necesarios de Database Tools:

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

Acceso a recursos de IA generativa

Si la política más amplia a continuación ya está en vigor, incluye el acceso a los recursos del almacén semántico:

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

Si desea un acceso más restringido, utilice la siguiente política en su lugar para permitir que el grupo cree y gestione almacenes semánticos:

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

Si el grupo solo necesita utilizar un almacén semántico existente y llamar a NL2SQL, utilice estas políticas más específicas:

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>

Creación de un almacén semántico

Un almacén semántico es un almacén de vectores con datos estructurados que apuntan a una base de datos. En esta tarea se documentan los pasos para crear un almacén vectorial con datos estructurados mediante la consola de Oracle Cloud.

Consejo

Después de crear un almacén de vectores, puede ver sus detalles y realizar otras tareas, como actualizarlo o suprimirlo. Utilice el menú Acciones (tres puntos) de la consola para acceder a estas tareas.

Para crear un almacén de vectores, en la página de lista, seleccione Crear almacén de vectores. Si necesita ayuda para encontrar la página de lista, consulte Listado de almacenes vectoriales.

Información Básica

  1. Introduzca un nombre para el almacén de vectores.
    Inicie el nombre con una letra o guion bajo, seguido de letras, números, guiones o guiones bajos. La longitud puede abarcar de 1 a 255 caracteres.
  2. (Opcional) Introduzca una descripción para el almacén de vectores.
  3. Seleccione un compartimento en el que crear el almacén de vectores. El compartimento por defecto es el que ha seleccionado en la página de lista, pero puede seleccionar cualquier compartimento en el que tenga permiso para trabajar.

Tipo de Origen de Datos

Seleccione Datos estructurados. Esta opción crea un almacén semántico para consultas de NL2SQL y de esquema.

Datos estructurados

  1. En Configurar conector de sincronización, seleccione un tipo de conexión.

    Valor permitido: herramienta OCI Database.

  2. Introduzca el ID de conexión de enriquecimiento y, a continuación, seleccione Probar conexión de enriquecimiento para verificar el acceso.
  3. Introduzca el ID de conexión de consulta y, a continuación, seleccione Probar conexión de consulta para verificar el acceso.
  4. En Esquemas, especifique los nombres de esquema de base de datos que se van a ingerir para NL2SQL y las consultas basadas en esquemas.

API de tienda semántica

Puede gestionar almacenes semánticos mediante la siguiente API:

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

Para la gestión de trabajos de enriquecimiento, también están disponibles las siguientes API:

  • ListEnrichmentJobs
  • GetEnrichmentJob
  • GenerateEnrichmentJob
  • CancelEnrichmentJob

Ejemplo: creación y gestión de un almacén semántico con 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)

Ejemplo: Llamada a la API NL2SQL

Una vez que el almacén semántico esté listo y se haya completado el enriquecimiento, puede llamar a la API NL2SQL para generar SQL a partir del lenguaje natural.

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

Conversaciones de varias vueltas

OCI Generative AI admite interacciones de varias vueltas, por lo que puede crear aplicaciones que mantengan el contexto en todas las vueltas de los usuarios.

Para ello, existen dos formas comunes:

  • Encadenamiento de respuestas
  • API de Conversaciones

Encadenamiento de respuestas

Con el encadenamiento de respuestas, cada nueva respuesta apunta a la anterior. Esta es una opción sencilla cuando se desea trasladar el contexto sin crear explícitamente un recurso de conversación.

# 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 Conversaciones

Con la API Conversations, primero debe crear una conversación y, a continuación, adjuntar respuestas a dicha conversación. Esto resulta útil cuando se desea un objeto de conversación dedicado que se pueda reutilizar en turnos.
# 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)