Inicio rapido

Utilice los siguientes pasos para empezar a crear agentes de IA empresarial con la API de respuestas de OCI.

Consejo

Para obtener una visión general de los pasos y las funciones que se ofrecen en este inicio rápido, mantenga esta página reducida y revise los títulos. A continuación, amplíe cada título para obtener más información. Los primeros seis pasos configuran el entorno para obtener una respuesta de modelo mediante la API de respuestas. El resto de las secciones muestran otras características para los agentes de construcción.

Obtener una respuesta de modelo con API de respuestas

Requisitos

Antes de crear un proyecto o llamar a la API de respuestas de OCI, asegúrese de que los permisos de IAM necesarios están establecidos.

Otorgar acceso a los recursos de OCI Generative AI

sk un administrador para otorgar al grupo de usuarios al que pertenece permiso para gestionar recursos de OCI Generative AI en el compartimento utilizado para este QuickStart, <QuickStart-compartment-name>.

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

Con este permiso, puede crear todos los recursos de servicio de IA generativa, incluidos proyectos, claves de API, almacenes vectoriales y almacenes semánticos en <QuickStart-compartment-name>.

Importante

Este inicio rápido utiliza una configuración de estilo sandbox para sus permisos. Le recomendamos que otorgue acceso amplio solo a los administradores o usuarios que trabajan en entornos sandbox. Para uso de producción, aplique políticas más restrictivas.
1. Crear un Proyecto

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

Después de crear un proyecto, puede gestionarlo a través de la consola. Por ejemplo, puede actualizar sus detalles, moverlos a otro compartimento, gestionar etiquetas o suprimirlos. 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. La longitud puede abarcar 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 <QuickStart-compartment-name>.

Conservación de datos

Configure cuánto tiempo se almacenan los datos generados.

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

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

Configuración de compactación de memoria a corto plazo

La compactación de memoria a corto plazo resume 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 las interacciones anteriores automáticamente.

  • Selección del modelo:

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

    Para conocer los modelos disponibles, consulte 2.1 Short-Term Memory Compaction (Conversation History Compaction).

Importante

  • Puede seleccionar el modelo de compactación solo en el momento de la creación y no puede cambiar esta opción más tarde.
  • Si se activa, esta función no se puede desactivar sin suprimir el proyecto.

Configuración de memoria a largo plazo

Al activar la memoria a largo plazo, el servicio puede 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:

    Seleccione los siguientes modelos:

    • 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

  • Debe seleccionar estos modelos durante la creación del proyecto.
  • Después de activarla, no puede cambiar los modelos y la memoria a largo plazo no se puede desactivar a menos que se suprima el proyecto.
Consejo

Para obtener los mejores resultados, defina tanto la retención de respuesta como la retención de conversación en la duración máxima de 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.

Cuando haya terminado, seleccione Create.

2. Configurar autenticación

La API de respuestas de OCI soporta dos métodos de autenticación. Puede utilizar cualquiera de las dos opciones.

  • Claves de API de OCI Generative AI

    Autenticar y llegar a los modelos y puntos finales con claves de API específicas del servicio de IA generativa compatibles con OpenAI. Utilice esta opción para pruebas y desarrollo anticipado.

  • Autenticación basada en IAM de OCI

    Autenticar y acceder a los modelos y puntos finales mediante solicitudes de API firmadas. Recomendamos esta opción para cargas de trabajo de producción y entornos gestionados por OCI. Considere el uso de la autenticación de IAM cuando:

    • Ejecutar aplicaciones en servicios de OCI como Functions u Oracle Kubernetes Engine (OKE)
    • Quiere evitar claves de API de larga duración
    • Se necesita un control de acceso centralizado a través de OCI IAM
2.1 (a) Creación de una Clave de API

Este paso solo es necesario si utiliza autenticación de clave de API de OCI Generative AI.

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.

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

  • En la página de lista de claves de API, seleccione Crear clave de API.

    Información Básica

    1. Introduzca un nombre para la clave de API. Este campo se necesario. 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.
    3. Guarde la clave de API en el compartimento <QuickStart-compartment-name>.
      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 tiempos de caducidad

    1. Introduzca un nombre para la primera clave en Nombre de clave única. 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) Defina la fecha de caducidad de clave única y la hora de caducidad de clave única (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 en Key two name.
    4. (Opcional) Defina la Fecha de caducidad de la clave dos y la hora de caducidad de la clave dos (UTC).
      El valor por defecto es de tres meses a partir de la fecha de creación.
    5. Seleccione Crear.
  • 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 en UTC.

2.1 b) Agregar permiso a la clave de API

Este paso solo es necesario si utiliza autenticación de clave de API de OCI Generative AI.

Buscar el OCID de clave de API

Para definir el ámbito de los permisos para una clave de API específica, primero obtenga su OCID.

En la consola:

  1. Abra 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

Para permitir que un grupo específico de usuarios llame a la API de respuestas con esta clave de API, agregue la siguiente política de IAM:

allow group <agent-builders-with-Responses-API-group>
to manage generative-ai-response 
in compartment <QuickStart-compartment-name> 
where ALL {request.principal.type='generativeaiapikey',
request.principal.id='<api-key-OCID>'}

Esta política permite que las solicitudes autenticadas con la clave de API especificada accedan a la API de respuestas mientras se mantiene el ámbito y el control del acceso.

Solo para un acceso al sandbox más amplio, puede utilizar la siguiente política:

allow any-user to use generative-ai-family 
in compartment <QuickStart-compartment-name> 
where ALL {request.principal.type='generativeaiapikey', 
request.principal.id='<your-api-key-OCID>'}
2.2 (a) Instalación de la biblioteca de autenticación de IAM de OCI Generative AI

Este paso solo es necesario si utiliza autenticación de clave de API de OCI Generative AI. Si utiliza claves de API de OCI Generative AI, omita este paso.

Instale el paquete de ayuda de autenticación de OCI Generative AI:

pip install oci-genai-auth

El paquete oci-genai-auth proporciona ayuda de autenticación para integrar la autenticación de OCI IAM con el SDK de OpenAI, que incluye:

  • OciSessionAuth para el desarrollo local
  • OciUserPrincipalAuth para usuarios que utilizan claves de firma de API de OCI IAM
  • OciInstancePrincipalAuth
  • OciResourcePrincipalAuth para entornos gestionados por OCI

Al utilizar la autenticación de OCI IAM con el cliente de OpenAI, defina api_key="not-used" y proporcione un http_client autenticado.

Para OciUserPrincipalAuth, configure un archivo de configuración de OCI para la identidad que firma las solicitudes. Consulte los siguientes temas relacionados:

3. Instalar openai

Instale el SDK oficial de OpenAI.

Python

pip install openai
Nota

Para llamar a la API de respuestas, utilice el SDK de OpenAI, no el SDK de OCI. Además, asegúrese de utilizar la última versión del SDK de OpenAI.

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

4. Buscar el punto final para la API de respuestas de OCI

La API de respuestas de OCI es la API principal para crear aplicaciones ágentes de IA empresarial en OCI Generative AI. Le permite enviar solicitudes de modelos, utilizar herramientas y gestionar el contexto de la conversación a través de una única API.

Utilice la API Responses para:

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

La API de respuestas de OCI utiliza una interfaz compatible con OpenAI. Las solicitudes utilizan la misma sintaxis de estilo OpenAI, pero se envían a OCI Generative AI y se autentican con credenciales de OCI, como claves de API de OCI Generative AI o autenticación basada en OCI IAM.

El cliente recomendado es el SDK OpenAI. Soporta lenguajes como Python, Java, TypeScript, Go y .NET. También puede utilizarlo con marcos como LangChain, LlamaIndex y OpenAI Agents SDK.

Utilice la siguiente URL base:

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

Sustituya ${region} por su región de OCI, por ejemplo, us-chicago-1.

Para la API Responses, utilice la siguiente ruta de acceso de punto final:

/responses
5. Buscar ID de modelo y regiones compatibles

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.

Modo bajo demanda

Los modelos a demanda están alojados y gestionados por OCI y están disponibles sin necesidad de clusters de IA dedicados. Ejemplos:

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

Modo dedicado

Para cargas de trabajo de producción que requieren aislamiento o rendimiento predecible, puede alojar 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."
)

Asegúrese de seleccionar la misma región que el cluster cuando envíe la solicitud.

Seleccione un modelo en una región disponible, con el modo disponible que mejor se adapte a sus requisitos de rendimiento, costo y control.

6. Crea tu primera respuesta

En los siguientes ejemplos se muestra cómo llamar a la API de respuestas mediante Python. Si la solicitud devuelve una explicación, la API de respuestas de OCI funciona correctamente.

Ejemplo de clave de API
from openai import OpenAI

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

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

print(response.output_text)
Ejemplo de OciUserPrincipalAuth

Utilice este enfoque cuando utilice claves de firma de API de OCI IAM (no claves de API de OCI Generative AI). Consulte Claves y OCID necesarios.

from openai import OpenAI
from oci_openai import OciUserPrincipalAuth
import httpx

client = OpenAI(
    base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1",
    api_key="not-used",
    project="ocid1.generativeaiproject.oc1.us-chicago-1.xxxxxxxx",
    http_client=httpx.Client(
        auth=OciUserPrincipalAuth(
            config_file="~/.oci/config",
            profile_name="DEFAULT",
        )
    )

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

print(response.output_text)
Ejemplo de OciSessionAuth

Utilice este enfoque al ejecutar código localmente:

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 de OciResourcePrincipalAuth

Utilice este enfoque al trabajar con entornos gestionados 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()),
)

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)

Más características

Activar registro 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(
    ...
)
Respuestas de flujo

La API de respuestas de OCI soporta la transmisión, donde puede recibir salidas de modelo de forma incremental a medida que se generan los tokens.

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 donde los usuarios pueden leer las respuestas a medida que se generan.

Agregar razonamiento

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.

Consejo

Revise las funciones clave en la página de detalles del modelo para asegurarse de que el modelo al que llama tenga razonamiento. Consulte Modelos de chat disponibles.

Esfuerzo de razonamiento

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.

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

print(response.output_text)
Obtener salidas estructuradas

Utilice salidas estructuradas cuando desee que el modelo devuelva datos en un formato predecible en lugar de texto de formato libre. Esto resulta útil para extraer campos de entradas no estructuradas, transferir resultados a otros sistemas o mostrar valores específicos en una interfaz de usuario. En la API de respuestas de OCI, puede definir un esquema y analizar la respuesta en él, lo que hace que la salida sea más coherente y fácil de utilizar para las aplicaciones. Las salidas estructuradas coinciden con un esquema proporcionado, mientras que el modo JSON solo garantiza un JSON válido.

Un objeto de tipo fuerte es un objeto cuyos campos y tipos de datos se definen con antelación. Por ejemplo, si un esquema dice que customer_name debe ser una cadena y priority debe ser "low", "medium" o "high", el resultado analizado sigue a esa estructura. Esto facilita que el código funcione con la respuesta de forma segura y predecible. 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
from typing import Literal

class SupportRequest(BaseModel):
    customer_name: str
    product: str
    issue_summary: str
    priority: Literal["low", "medium", "high"]
    requested_action: str

response = client.responses.parse(
    model="<supported-model-id>",
    input=[
        {"role": "system", "content": "Extract the support request into the schema."},
        {
            "role": "user",
            "content": (
                "Sarah Johnson from Example Company says the mobile inventory app "
                "crashes whenever she scans more than 20 items in one session. "
                "This is delaying warehouse processing, and she wants a fix as soon as possible."
            ),
        },
    ],
    text_format=SupportRequest,
)

support_request = response.output_parsed
print(support_request)

Ejemplo de salida:

SupportRequest(
customer_name='Sarah Johnson', 
product='mobile inventory app', 
issue_summary='App crashes whenever she scans more than 20 items in one session.', 
priority='high', 
requested_action='Provide a fix as soon as possible'
)
Enviar 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.

Consejo

Revise las funciones clave de la página de detalles del modelo para asegurarse de que el modelo al que llama acepte entradas multimodales. Consulte Modelos de chat disponibles.

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

print(response.output_text)

Entrada de imagen como URL de Internet

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

print(response.output_text)

Sustituya image_url por una URL de imagen válida.

Entrada de archivo como ID de archivo

Importante

La función de entrada de ID de archivo 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)

Agregar herramientas a la API de respuestas

Intérprete de código

Utilice Code Interpreter para permitir que el modelo escriba y ejecute código Python en un contenedor seguro y aislado. Esta herramienta es útil para cálculos, análisis de datos, procesamiento de archivos y otras tareas de cálculo.

Nota

La herramienta de intérprete de código de OCI utiliza el mismo formato que la herramienta de intérprete de código OpenAI utilizada con la API de respuestas con el punto final compatible con OpenAI de OCI. Para obtener información sobre la sintaxis y la solicitud, consulte el tema Interpretador de código en la documentación de OpenAI.
Consejo

En las peticiones de datos, haga referencia al intérprete de código como la herramienta python. Por ejemplo: Use the python tool to solve the problem.

Debido a que el código se ejecuta en un entorno aislado sin acceso a la red externa, Code Interpreter es una buena opción cuando el flujo de trabajo necesita un cálculo o procesamiento de archivos en una configuración controlada.

Uso del Intepreter de Código

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

Puede utilizarlo para tareas como:

  • Resolución de problemas matemáticos
  • Analizando 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, incluidas Pandas, Matplotlib y SciPy, por lo que muchas tareas comunes funcionan sin configuración adicional.

El código se ejecuta dentro de un contenedor de sandbox. Este contenedor es el entorno de trabajo donde se ejecuta Python y donde se almacenan los archivos cargados, los archivos generados y los datos de trabajo temporales 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, puede admitir:

  • 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 variables de Python y objetos de Python, se pierde

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

Ejemplo

Para utilizar Code Interpreter, agregue una definición de herramienta en la propiedad tools con "type": "code_interpreter".

response = client.responses.create(
    model="xai.grok-4-1-fast-reasoning",
    tools=[
        {
            "type": "code_interpreter",
            "container": {"type": "auto"}
        }
    ],
    instructions="Use the python tool to solve the problem and explain the result.",
    input="Find the value of (18 / 3) + 7 * 2."
)

print(response.output_text)

En este ejemplo, la herramienta python es Code Interpreter.

Contenedores para intérprete de código

La herramienta Interpretador de código requiere un objeto 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 utilizar uno de los dos modos de contenedor:

  • auto: OCI Generative AI aprovisiona o reutiliza un contenedor en el contexto actual.
  • OCID de contenedor: cree el contenedor usted mismo, defina el tamaño de memoria 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.

Nota

La herramienta de intérprete de código de OCI utiliza el mismo formato que la herramienta de intérprete de código OpenAI utilizada con la API de respuestas con el punto final compatible con OCI OpenAI. Para obtener más información sobre la sintaxis y las solicitudes, consulte Containers for Code Intepreters y la documentación de la API de contenedores OpenAI.

Modo automático

En modo automático, el servicio aprovisiona o reutiliza 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

Opcionalmente, puede especificar memory_limit. Si no lo especifica, el valor por defecto es 1 GB.

response = client.responses.create(
    model="xai.grok-code-fast-1",
    tools=[{
        "type": "code_interpreter",
        "container": {
            "type": "auto",
            "memory_limit": "1g"
        }
    }],
    input="Use the python tool to calculate the average of 12, 18, 24, and 30."
)

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 la configuración del contenedor, como el tamaño de la memoria, o cuando desee mantener una sesión dedicada.

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

Code Interpreter soporta la interacción dinámica de 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
  • Guardando salida procesada
  • Creación de logs o informes

Referencia de API: documentación de la API de archivos de contenedor OpenAI y API de archivos de contenedor.

Persistencia del archivo

Los archivos creados o actualizados por la herramienta python se mantienen en los turnos de ejecución de código 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:

  • Leer un Archivo
  • Analizarlo
  • Guardar un gráfico
  • 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 Container Files.

Las operaciones comunes incluyen:

  • Crear archivo de contenedor: agregue un archivo al contenedor, ya sea mediante carga en varias partes o haciendo referencia a un ID de /v1/files existente
  • 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 pueden devolver como anotaciones en la respuesta.

Estas anotaciones pueden incluir:

  • container_id
  • file_id
  • filename

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

La respuesta puede incluir un objeto container_file_citation que identifique el archivo generado. Utilice la operación Recuperar contenido de archivo de contenedor para descargar el archivo.

La API de respuestas de OCI soporta puntos finales compatibles con OpenAI para funciones como respuestas, archivos, contenedores y archivos de contenedor. Puede utilizar la documentación de OpenAI relacionada como referencia para la estructura de solicitudes, los formatos de respuesta y los flujos de trabajo generales. Cuando utilice 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 archivos de OCI utiliza el mismo formato que la API de archivos de OpenAI con el punto final compatible con OpenAI de OCI. Para obtener información sobre la sintaxis y las solicitudes, consulte la documentación de la API de archivos de OpenAI.
Nota

El intérprete de código de OCI que se utiliza como herramienta para la API Ressponses utiliza el mismo formato que el intérprete de código de OpenAI con el punto final compatible con OCI OpenAI. Para ver la sintaxis y la solicitud, consulte las siguientes referencias:

Llamada de función

Utilice Llamadas de función para permitir que el modelo solicite datos o acciones de la aplicación durante un flujo de trabajo de API de respuestas. Esto resulta útil cuando el modelo necesita información u operaciones que no están disponibles en la petición de datos en sí, como datos de calendario, 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, devuelve el nombre y los argumentos de la función, la aplicación ejecuta la función y, a continuación, la aplicación vuelve a enviar la salida de la función para que el modelo pueda continuar y producir la respuesta orientada al usuario.

Lo que esto permite

Las llamadas de función son útiles cuando la aplicación necesita mantener el control de la ejecución y, al mismo tiempo, permitir que el modelo decida cuándo se necesita información externa.

Ejemplos de casos de uso

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

En la función, puede llamar a un servicio externo, una base de datos, una de sus propias API de biblioteca, una CLI o un servidor MCP local.

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

Flujo de ejecución

Una función típica que llama a la interacción funciona de la siguiente manera:

  1. El cliente envía una solicitud que incluye una o más definiciones de herramientas de funciones.
  2. El modelo decide si una de esas herramientas es necesaria.
  3. Si se necesita una herramienta, el modelo devuelve el nombre de la función y los argumentos.
  4. La aplicación ejecuta la función 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 el servicio

    Recomendado 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 el historial completo de interacciones y envía el contexto acumulado con cada solicitud.

Consejo

Mantenga las definiciones de herramientas precisas. Los nombres claros, las descripciones bien escritas 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

Para definir una herramienta de función, agregue una entrada en la propiedad tools con "type": "function".

En el siguiente ejemplo, se 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 el cliente

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)

La llamada a funciones es 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.

Llamadas de MCP

Las herramientas de MCP (Model Context Protocol) son funciones ejecutables o capacidades que los modelos de IA pueden utilizar para interactuar con sistemas externos. Utiliza las llamadas MCP en OCI Generative AI para permitir que un modelo acceda a las herramientas ejecutables expuestas por un servidor MCP remoto durante una solicitud de API Responses. Estas herramientas pueden proporcionar acceso a sistemas externos como API, bases de datos, sistemas de archivos o puntos finales de aplicaciones. OCI Generative AI se comunica directamente con los servidores MCP remotos como parte del flujo de trabajo de solicitud.

Cuándo utilizar llamadas MCP

Utilice las llamadas MCP cuando el modelo necesite acceso a herramientas alojadas en un servidor MCP remoto. Este enfoque resulta útil cuando se desea:

  • La plataforma Enterprise AI Agent 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 herramientas expuestas a través de un servidor MCP remoto

Características clave

Las llamadas MCP proporcionan las siguientes ventajas:

  • Comunicación directa de plataforma a servidor: a diferencia de las llamadas de función estándar, que devuelven el control a la aplicación cliente, MCP Calling permite a OCI Generative AI comunicarse directamente con el servidor MCP remoto.
  • Latencia inferior: debido a que la solicitud no requiere un viaje de ida y vuelta de cliente adicional, MCP Calling puede reducir la sobrecarga de orquestación.

  • Soporte de transporte: soporta HTTP Streamable (SSE en desuso y no soportado).

Definición de una herramienta MCP

Para definir una herramienta MCP, agregue una entrada en la propiedad tools con "type": "mcp".

response_stream = client.responses.create(
    model="openai.gpt-5.4",
    tools=[
        {
            "type": "mcp",
            "server_label": "dmcp",
            "server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
            "server_url": "https://mcp.deepwiki.com/mcp",
            "require_approval": "never",
        },
    ],
    input="Roll 2d4+1",
    stream=True,
)

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

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

Restricción de las herramientas expuestas por un servidor MCP

Un servidor MCP remoto puede exponer muchas herramientas, lo que puede aumentar el costo y la latencia. Si la aplicación solo necesita un subjuego de esas herramientas, utilice allowed_tools para limitar el juego.

response_stream = client.responses.create(
    model="openai.gpt-oss-120b",
    tools=[
        {
            "type": "mcp",
            "server_label": "dmcp",
            "server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
            "server_url": "https://mcp.deepwiki.com/mcp",
            "require_approval": "never",
            "allowed_tools": ["roll"],
        },
    ],
    input="Roll 2d4+1",
    stream=True,
    store=False,
)

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
)

Transfiera solo el valor de token raw. No incluya el prefijo Bearer.

OCI envía el token en el cuerpo de solicitud de API a través de TLS. OCI no descodifica, inspecciona, almacena ni registra el token. Le recomendamos que utilice puntos finales de servidor MCP cifrados en TLS.

Herramienta NL2SQL

Acerca de la Búsqueda SQL con NL2SQL

Utiliza SQL Search (NL2SQL) para convertir solicitudes en lenguaje natural en SQL validado para datos empresariales en OCI Generative AI.

NL2SQL ayuda a los agentes de IA empresarial a trabajar con datos empresariales federados sin mover ni duplicar los datos subyacentes. Utiliza una capa de enriquecimiento semántico para asignar términos de negocio a tablas, columnas y uniones de base de datos y, a continuación, genera SQL a partir de la entrada en lenguaje natural.

NL2SQL sólo genera SQL. No ejecuta la consulta en sí. La ejecución de consultas se maneja por separado mediante el servidor MCP de DBTools, que 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.

Requisitos

Antes de utilizar NL2SQL, debe tener:

  • Una base de datos de origen, como Oracle Autonomous Database
  • Dos conexiones de DBTools:
    • Conexión de enriquecimiento
    • Conexión de consulta
  • Permisos de IAM para almacenes semánticos, NL2SQL, herramientas de base de datos y secretos
  • Autenticación de OCI IAM configurada para las API del servicio OCI que se utilizan en este inicio rápido
1. Creación de Conexiones de Base de Datos y DBTools

Antes de crear un almacén semántico, cree la base de datos de origen y las conexiones de DBTools necesarias.

Necesita las siguientes conexiones:

Conexión de enriquecimiento

La conexión de enriquecimiento es una conexión de base de datos con privilegios superiores que se utiliza durante el enriquecimiento. Necesita privilegios para:

  • Ejecutar consultas
  • Realizar operaciones DDL
  • Acceder a valores de ejemplo de la base de datos

OCI Generative AI utiliza esta conexión para leer los detalles del esquema y crear los metadatos necesarios para la generación SQL.

Conexión de consulta

La conexión de consulta es una conexión de base de datos con menos privilegios que se utiliza para ejecutar consultas en nombre del usuario que realiza la consulta.

Esta separación ayuda a mantener las responsabilidades de generación y ejecución distintas y apoya un control de acceso más seguro.

Temas Relacionados

2. Configuración de permisos de IAM para almacenes semánticos y NL2SQL

Antes de crear un almacén semántico, configure las políticas de IAM necesarias.

Para administradores de tienda semántica

Si ha otorgado acceso al paso de QuickStart realizado para otorgar acceso a recursos de OCI Generative AI, puede omitir este paso para los administradores. Ya tienen permiso para gestionar tiendas semánticas.

Los administradores de almacenes semánticos son administradores que crean, actualizan, suprimen y gestionan el recurso de almacén semántico de OCI Generative AI y sus operaciones relacionadas con NL2SQL.

Pida a un administrador que cree un grupo de IAM para los administradores. En este tema, el grupo de administradores está representado por:

  • <administrador de tienda semántica>
allow group <semantic-store-admin> 
to manage generative-ai-semantic-store 
in compartment <QuickStart-compartment-name>
allow group <semantic-store-admin> 
to manage generative-ai-nl2sql 
in compartment <QuickStart-compartment-name>
Tareas de administración disponibles con las dos políticas anteriores

Un <semantic-store-admin> puede:

  • crear el almacén semántico
  • verla y actualizarla
  • suprimirlo o moverlo
  • disparar enriquecimiento
  • inspeccionar los resultados de enriquecimiento
  • generar SQL a partir de lenguaje natural para la validación/prueba
  • Gestionar operaciones NL2SQL vinculadas al almacén

Para tiendas semánticas de IA generativa de OCI

  • Cree un grupo dinámico para los almacenes semánticos que se creen en el arrendamiento o en un compartimento especificado.
  • Otorgue el permiso de grupo dinámico para:
    • Acceso a conexiones de Database Tools
    • Leer metadatos de base de datos
    • Leer metadatos de Autonomous Database
    • Acceder a inferencia de IA generativa
    • Secretos de lectura utilizados por las conexiones de Database Tools
  1. Cree un grupo dinámico para los almacenes asemánticos del arrendamiento con la siguiente regla de coincidencia:
    all {resource.type='generativeaisemanticstore'}
  2. Para restringir los almacenes semánticos a un compartimento específico, actualice la condición anterior a:
    all {resource.type='generativeaisemanticstore',
     resource.compartment.id='<QuickStart-compartment-name>'}
  3. Cree una política para otorgar al grupo dinámico permiso para acceder a las conexiones de Database Tools en un compartimento especificado.
    allow dynamic-group <dynamic-group-name> 
    to use database-tools-family in compartment <QuickStart-compartment-name>'}
  4. Agregue una política para otorgar al grupo dinámico permiso para leer los secretos que utilizan las conexiones de Database Tools.
    allow dynamic-group <dynamic-group-name> 
    to read secret-family in compartment <QuickStart-compartment-name>
  5. Agregue una política para otorgar permiso al grupo dinámico para leer los metadatos de Oracle Database para las conexiones de Database Tools.
    allow dynamic-group <dynamic-group-name> 
    to read database-family in compartment <QuickStart-compartment-name>
  6. Agregue una política para otorgar al grupo dinámico permiso para leer metadatos de Autonomous Database para conexiones de Database Tools y trabajos de enriquecimiento.
    allow dynamic-group <dynamic-group-name> 
    to read autonomous-database-family in compartment <QuickStart-compartment-name>
  7. Agregue una política para otorgar permiso al grupo dinámico para acceder a los recursos de OCI Generative AI para la inferencia.
    allow dynamic-group <dynamic-group-name> 
    to use generative-ai-family in compartment <QuickStart-compartment-name>
Lo que ofrecen las dos políticas anteriores

El recurso generativeaisemanticstore puede:

  • Llamar a la inferencia de LLM mediante IA generativa
  • Utilizar conexiones de Database Tools para el enriquecimiento y la consulta
  • leer secretos requeridos por las conexiones respaldadas por Database Tools
  • leer metadatos de Oracle Database y Autonomous Database

Para usuarios de tienda semántica

Los usuarios de almacenes semánticos son usuarios finales que pueden acceder a un almacén semántico existente y utilizar las capacidades de NL2SQL, pero no necesitan administrar el recurso.

Solicite a un administrador que cree un grupo de IAM para los usuarios. En este tema, el grupo de usuarios está representado por:

  • <semantic-store-users>
allow group <semantic-store-users> 
to read generative-ai-semantic-store 
in compartment <QuickStart-compartment-name>
allow group <semantic-store-users> 
to manage generative-ai-nl2sql 
in compartment <QuickStart-compartment-name>
Tareas de usuario disponibles con las dos políticas anteriores

<semantic-store-users> puede:

  • Ver el almacén semántico
  • Utilizar las capacidades relacionadas con NL2SQL asociadas a él
  • inspeccionar y consultar salidas
  • información de enriquecimiento de acceso

Para el acceso del usuario a las conexiones de Database Tools

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

allow group <semantic-store-users>
to use database-tools-family in compartment <QuickStart-compartment-name>
where all {request.principal.type='generativeaisemanticstore'}
allow group <semantic-store-users>
to read database-family in compartment <QuickStart-compartment-name>
where all {request.principal.type='generativeaisemanticstore'}
allow group <semantic-store-users>
to read autonomous-database-family in compartment <QuickStart-compartment-name>
where all {request.principal.type='generativeaisemanticstore'}
3. Configuración de la autenticación de OCI IAM

Este inicio rápido utiliza la autenticación de OCI IAM para la API de servicio de OCI que crea almacenes semánticos, ejecuta trabajos de enriquecimiento y genera SQL.

Configure la autenticación de OCI IAM para la identidad que firma las solicitudes. Los ejemplos de esta sección utilizan el SDK de Python de OCI y BaseClient.

Puede autenticarse mediante:

  • Un archivo de configuración de OCI y claves de firma de API
  • Un firmante de token de seguridad

En los siguientes ejemplos se utiliza SecurityTokenSigner, pero también puede utilizar un firmante de configuración de OCI estándar si eso se ajusta mejor a su entorno.

Temas relacionados

4. Creación de una tienda semántica

Para utilizar NL2SQL, cree un recurso de almacén semántico de OCI.

Un almacén semántico está respaldado por un almacén vectorial con datos estructurados e incluye las siguientes conexiones de DBTools:

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

Creación de un almacén semántico en la consola

  1. Abra la página de lista de los almacenes de vectores.
  2. Introduzca un nombre y una descripción.
  3. Seleccione el compartimento <QuickStart-compartment-name>.
  4. En Tipo de origen de datos, seleccione Datos estructurados.
  5. En Configurar conector de sincronización, seleccione Herramienta OCI Database como tipo de conexión.
  6. Introduzca el ID de conexión de enriquecimiento y, a continuación, seleccione Probar conexión de enriquecimiento.
  7. Introduzca el ID de conexión de consulta y, a continuación, seleccione Probar conexión de consulta.
  8. En Esquemas, especifique los nombres de esquema de base de datos que desea ingerir.
  9. En Automatización, seleccione cuando se ejecute el enriquecimiento:
    • Ninguno
    • Al Crear
  10. Seleccione Crear.

Creación de un almacén semántico con Python

En el siguiente ejemplo, se crea y gestiona un almacén semántico mediante la API de servicio de OCI:

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

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

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

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

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

if __name__ == "__main__":
    config, signer = get_signer_auth_security_token(profile="DEFAULT")
    client = make_base_client(signer)

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

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

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

    print("CREATE response:", json.dumps(create_payload, indent=2))
5. Ejecutar enriquecimiento manualmente

En Automatización, si ha seleccionado Ninguno en lugar de Al crear, puede ejecutar el enriquecimiento después de crear el almacén semántico. Realice este paso si ha omitido la opción Al crear.

El proceso de enriquecimiento lee los metadatos del esquema, como tablas y columnas, de la base de datos conectada. OCI Generative AI utiliza estos metadatos para ayudar a generar el SQL.

Para disparar el enriquecimiento manualmente, llame a la API GenerateEnrichmentJob.

También puede gestionar trabajos de enriquecimiento mediante la siguiente API:

  • ListEnrichmentJobs
  • GetEnrichmentJob
  • CancelEnrichmentJob
6. Buscar puntos finales de OCI para el almacén semántico y GenerateSqlFromNl

NL2SQL utiliza API de servicio de OCI en lugar de las rutas /openai/v1 compatibles con OCI OpenAI.

CRUD de almacén semántico

Utilice la siguiente URL base para operaciones CRUD de almacén semántico:

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

Utilice la siguiente ruta de acceso de punto final:

/20231130/semanticStores

Autenticación:

  • Solo sesión de IAM

API de trabajo de enriquecimiento

Utilice la siguiente URL base para los trabajos de enriquecimiento de un almacén semántico:

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

Utilice la siguiente ruta de acceso de punto final:

/20260325/semanticStores/{semanticStoreId}/

Autenticación:

  • Solo sesión de IAM

Generar SQL a partir de lenguaje natural

Utilice la siguiente URL base para la generación de SQL:

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

Utilice el siguiente patrón de punto final:

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

Autenticación:

  • Solo sesión de IAM

Almacén semántico disponible y API NL2SQL

Almacenes semánticos

Almacenes semánticos
  • CreateSemanticStore
  • ListSemanticStores
  • GetSemanticStore
  • UpdateSemanticStore
  • ChangeSemanticStoreCompartment
  • DeleteSemanticStore
Trabajos de enriquecimiento
  • ListEnrichmentJobs
  • GetEnrichmentJob
  • GenerateEnrichmentJob
  • CancelEnrichmentJob
Generar SQL
GenerateSqlFromNl
Nota

La URL base es diferente para la API de almacenes semánticos y trabajos de enriquecimiento.
7. Generar la primera sentencia SQL

Una vez que el almacén semántico esté listo y se haya completado el enriquecimiento, llame 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))

Observar

Acerca del seguimiento de llamadas de API de respuestas

Utilice los datos de rastreo de respuesta incorporados en la API de respuestas de OCI para comprender cómo se procesó una solicitud. Para una observación más profunda, también puedes integrar la API de respuestas de OCI con plataformas de observación externas como Langfuse.

Este QuickStart muestra cómo inspeccionar los detalles de ejecución devueltos por la API de respuestas y cómo rastrear solicitudes mediante Langfuse.

Requisitos

Antes de empezar, debe tener:

  • Un proyecto de IA generativa de OCI
  • Autenticación configurada para la API de respuestas de OCI
  • SDK de OpenAI instalado
  • Un cliente de API de respuestas de OCI en funcionamiento

(Opcional) Para integrarse con Langfuse, necesita una cuenta y credenciales de Langfuse.

1. Inspeccionar salida de API de respuestas

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

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

Por ejemplo, después de enviar una solicitud, puede inspeccionar el campo output:

response = client.responses.create(
    model="openai.gpt-oss-120b",
    input="Explain the difference between structured and unstructured data."
)

for item in response.output:
    print(item.type)
2. Instalar el SDK de Langfuse

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

Una opción es Langfuse, una plataforma de ingeniería de LLM de código abierto que ayuda a los desarrolladores a depurar, supervisar y mejorar aplicaciones de LLM. Langfuse proporciona una capacidad de observación integral para rastrear acciones de agente, soporta el control de versiones de petición de datos y ayuda a evaluar las salidas del modelo. Se integra con marcos populares como OpenAI, LangChain y LlamaIndex.

Instale el SDK de Langfuse:

pip install langfuse
3. 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"
4. Instrumentalizar el cliente OpenAI

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

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

client = OpenAI(
    base_url="https://inference.generativeai.<region>.oci.oraclecloud.com/openai/v1",
    api_key=os.getenv("OCI_GENAI_API_KEY"),
    project=os.getenv("OCI_GENAI_PROJECT_ID"),
)
5. Enviar una solicitud de API de respuestas con seguimiento

Después de instrumentar al cliente, envíe una solicitud de API de respuestas como de costumbre. Langfuse realiza un seguimiento automático de la solicitud.

Ejemplo:

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

print(response.output_text)