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.
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 tenancyOtorgar 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ú 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
-
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.
- 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.
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.
- 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.
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.
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
Nombres de claves y plazos de caducidad
Asegúrese de Agregar permiso de clave de API después de crear la clave. Utilice el comando
api-key createy 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:
- Vaya a la página de lista de claves de API.
- Seleccione la clave de API que ha creado.
- 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/v1Sustituya <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 openaiPara 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-authEsta biblioteca incluye los siguientes ayudantes de autenticación:
OciSessionAuth(para el desarrollo local)OciUserPrincipalAuthOciInstancePrincipalAuthOciResourcePrincipalAuth(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 tenancySi 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:
messageweb_search_callfile_search_callmcp_callmcp_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 langfusePaso 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
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í:
- El cliente envía una solicitud que incluye una o más definiciones de herramienta.
- El modelo decide si una de esas herramientas es necesaria.
- Si se necesita una herramienta, el modelo devuelve el nombre y los argumentos de la herramienta.
- La aplicación ejecuta la herramienta y prepara el resultado.
- La aplicación envía ese resultado de nuevo en una solicitud de seguimiento.
- 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_idy 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.
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
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í.
Herramienta de búsqueda de archivos
La herramienta de búsqueda de archivos permite al modelo buscar contenido relevante de archivos almacenados en un almacén de vectores y utilizar el contenido recuperado al formar una respuesta. Esto es útil cuando desea que las respuestas reflejen los documentos que ha proporcionado, en lugar de depender solo del conocimiento incorporado del modelo.
Puesto que el servicio maneja la búsqueda de archivos, la aplicación no necesita implantar su propio pipeline de recuperación.
Preparar una tienda de vectores
Antes de utilizar la búsqueda de archivos, cree un almacén de vectores y agregue los archivos a los que desea que haga referencia el modelo. OCI Generative AI soporta varios patrones de manejo de archivos a través de API que siguen el estilo de API de archivos de OpenAI.
| Juego de API | Descripción |
|---|---|
| Archivos | Gestión de archivos estándar. |
| Archivos de almacén de vectores | Archivos vinculados directamente a las tiendas. |
| Lotes de archivo de almacén de vectores | Archivos para el procesamiento por lotes para agregarlos a las tiendas. |
| Archivos de contenedor | Manejo de archivos en contenedores. |
Ejemplo
Para que la búsqueda de archivos esté disponible en una solicitud, agregue una entrada de herramienta con type: "file_search" y proporcione el ID de almacén de vectores.
response = client.responses.create(
model="openai.gpt-oss-120b",
input="Summarize the main ideas covered in the documents in this vector store.",
tools=[
{
"type": "file_search",
"vector_store_ids": ["<vector_store_id>"]
}
]
)
print(response)
- El modelo puede utilizar el contenido del almacén de vectores durante la generación de respuestas.
- La recuperación de archivos la gestiona la plataforma.
- Los parámetros de búsqueda híbrida no están soportados con la herramienta de búsqueda de archivos.
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:
- 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 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_idfile_idfilename
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.
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 tenancySi 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.
Después de crear un almacén de vectores, puede ver sus detalles y realizar otras tareas, como actualizarlo o suprimirlo. Utilice el menú 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
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
API de tienda semántica
Puede gestionar almacenes semánticos mediante la siguiente API:
ChangeSemanticStoreCompartmentCreateSemanticStoreDeleteSemanticStoreGetSemanticStoreUpdateSemanticStoreListSemanticStores
Para la gestión de trabajos de enriquecimiento, también están disponibles las siguientes API:
ListEnrichmentJobsGetEnrichmentJobGenerateEnrichmentJobCancelEnrichmentJob
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
# 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)