Inicio rapido
Utilice los siguientes pasos para empezar a crear agentes de IA empresarial con la API de respuestas de OCI.
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
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>.
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.
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ú 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 ejemplogenerativeaiproject20260316042443. 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).
- 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.
- 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.
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.
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
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
Nombres de claves y tiempos de caducidad
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 en UTC.
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:
- Abra 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
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>'}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-authEl paquete oci-genai-auth proporciona ayuda de autenticación para integrar la autenticación de OCI IAM con el SDK de OpenAI, que incluye:
OciSessionAuthpara el desarrollo localOciUserPrincipalAuthpara usuarios que utilizan claves de firma de API de OCI IAMOciInstancePrincipalAuthOciResourcePrincipalAuthpara 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:
- Tema: Firmas de solicitud
- Tutorial: Configuración de la autenticación de API para OCI
Instale el SDK oficial de OpenAI.
Python
pip install openaiPara 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.
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
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.
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.
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)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)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)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
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(
...
)
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.
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.
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)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'
)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.
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
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
Utilice la búsqueda de archivos para permitir que el modelo recupere contenido relevante de los archivos almacenados en un almacén de vectores durante la generación de respuestas. Esto resulta útil cuando desea que las respuestas reflejen los documentos que proporciona, en lugar de depender solo de los conocimientos incorporados del modelo.
Mediante la creación de almacenes de vectores y la adición de archivos a ellos, se activa la búsqueda semántica y basada en palabras clave en los datos. Esto amplía el conocimiento integrado del modelo con su contenido personalizado y ayuda a producir respuestas más precisas y conscientes del contexto.
Puesto que el servicio se encarga de 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 las siguientes API para la gestión de almacenes de archivos y vectores:
| Juego de API | Descripción |
|---|---|
| Archivos | Cargar y gestionar archivos. |
| Archivos de almacén de vectores | Gestionar archivos adjuntos a un almacén de vectores. |
| Lotes de archivo de almacén de vectores | Agregar y gestionar varios archivos en un lote de almacén de vectores. |
| Archivos de contenedor | Gestionar archivos en un contenedor. |
Ejemplo
Para utilizar la búsqueda de archivos en una solicitud, agregue una definición de herramienta en la propiedad tools 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)
En este ejemplo:
- 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.
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.
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.
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.
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/filesexistente - 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_idfile_idfilename
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.
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.
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:
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:
- El cliente envía una solicitud que incluye una o más definiciones de herramientas de funciones.
- El modelo decide si una de esas herramientas es necesaria.
- Si se necesita una herramienta, el modelo devuelve el nombre de la función y los argumentos.
- La aplicación ejecuta la función 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 el servicio
Recomendado 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 el historial completo de interacciones y envía el contexto acumulado con cada solicitud.
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.
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
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.
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
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
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
- Cree un grupo dinámico para los almacenes asemánticos del arrendamiento con la siguiente regla de coincidencia:
all {resource.type='generativeaisemanticstore'} - 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>'} - 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>'} - 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> - 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> - 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> - 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
generativeaisemanticstorepuede:- 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'}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
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
- Abra la página de lista de los almacenes de vectores.
- Introduzca un nombre y una descripción.
- Seleccione el compartimento <QuickStart-compartment-name>.
- En Tipo de origen de datos, seleccione Datos estructurados.
- En Configurar conector de sincronización, seleccione Herramienta OCI Database como tipo de conexión.
- Introduzca el ID de conexión de enriquecimiento y, a continuación, seleccione Probar conexión de enriquecimiento.
- Introduzca el ID de conexión de consulta y, a continuación, seleccione Probar conexión de consulta.
- En Esquemas, especifique los nombres de esquema de base de datos que desea ingerir.
-
En Automatización, seleccione cuando se ejecute el enriquecimiento:
- Ninguno
- Al Crear
- 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))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:
ListEnrichmentJobsGetEnrichmentJobCancelEnrichmentJob
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
-
CreateSemanticStoreListSemanticStoresGetSemanticStoreUpdateSemanticStoreChangeSemanticStoreCompartmentDeleteSemanticStore
- Trabajos de enriquecimiento
-
ListEnrichmentJobsGetEnrichmentJobGenerateEnrichmentJobCancelEnrichmentJob
- Generar SQL
GenerateSqlFromNl
La URL base es diferente para la API de almacenes semánticos y trabajos de enriquecimiento.
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
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.
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.
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:
messagefile_search_callmcp_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)
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
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"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"),
)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)